| Pojawienie się |
2010 |
|---|---|
| Paradygmat |
wieloparadygmatowy (obiektowy, imperatywny, funkcyjny, strukturalny, współbieżny) |
| Aktualna wersja stabilna |
1.99.0 |
| Twórca | |
| Licencja | |
| Platforma sprzętowa | |
| Platforma systemowa |
wieloplatformowy |
| Strona internetowa | |
Rust – kompilowany język programowania ogólnego przeznaczenia. Stworzony z myślą o „bezpieczeństwie, współbieżności i praktyczności”.
Język został zaprojektowany przez Graydona Hoare’a w 2006 roku. W 2009 roku rozwój projektu objęła Fundacja Mozilla[2]. W 2010 Mozilla upubliczniła informację o języku[3]. W 2011 roku kompilator języka, znany jako rustc, został z powodzeniem skompilowany przez samego siebie[4].
Pierwsza numerowana wersja alfa została wydana w 2012 roku[5]. 15 maja 2015 ukazała się wersja 1.0[6].
8 lutego 2021 pięć firm (Mozilla, AWS, Google, Microsoft i Huawei) ogłosiły utworzenie Fundacji Rust[7][8].
6 kwietnia 2021 Google ogłosił wsparcie dla języka Rust w ramach Android Open Source Project jako alternatywę dla języków C/C++[9][10].
W grudniu 2022 język Rust uzyskał wsparcie w rozwoju jądra Linuxa[11].
Rust wykorzystuje Cargo jako menadżer pakietów[12].
Wiele organizacji wykorzystuje ten język programowania w zastosowaniach produkcyjnych[13]. Obecnie[kiedy?] dwoma największymi otwartymi projektami korzystającymi z języka Rust były w 2018 r. Servo oraz kompilator Rusta[14].
Najważniejsze cechy języka Rust to[15][16]:
fn main() {
println!("Hello, world!");
}
fn main() {
let max = 101;
for i in 1..max {
if i % 15 == 0 {
println!("{}", "FizzBuzz")
} else if i % 5 == 0 {
println!("{}", "Buzz")
} else if i % 3 == 0 {
println!("{}", "Fizz")
} else {
println!("{}", i)
}
}
}
fn rot13(string: String) -> String {
let mut bytes: Vec<u8> = string.into();
for byte in &mut bytes {
match *byte {
b'a'...b'm' | b'A'...b'M' => *byte += 13,
b'n'...b'z' | b'N'...b'Z' => *byte -= 13,
_ => {}, //nic nie rób
}
}
String::from_utf8(bytes).unwrap()
}
fn main() {
let a = rot13("abc".to_owned());
assert_eq!(a, "nop");
}
Rust, a właściwie społeczność skupiona wokół tego języka, bywa krytykowany za niekonsekwentne realizowanie własnych założeń. Krytyka ta wynika z faktu, że jednym z głównych celów języka jest zapewnienie bezpieczeństwa pamięci oraz eliminowanie typowych błędów związanych z jej zarządzaniem, podczas gdy wiele narzędzi deweloperskich i bibliotek wykorzystuje blok unsafe, pozwalający na wykonywanie operacji, których poprawności kompilator nie jest w stanie w pełni zweryfikować. W efekcie część gwarancji bezpieczeństwa zapewnianych przez język nie obejmuje kodu znajdującego się wewnątrz takich bloków, a poprawność jego działania zależy od programisty. Niektórzy autorzy wskazują, że szerokie wykorzystanie unsafe w popularnych bibliotekach osłabia praktyczne znaczenie gwarancji bezpieczeństwa oferowanych przez język, ponieważ błędy w takich bibliotekach mogą wpływać również na programy z nich korzystające[18][19].
Należy jednak zauważyć, że blok unsafe stanowi integralny element projektu języka Rust i został przewidziany do implementacji niskopoziomowych abstrakcji, współpracy z kodem napisanym w innych językach programowania oraz bezpośredniej interakcji z systemem operacyjnym. Dokumentacja języka podkreśla, że użycie unsafe nie wyłącza większości mechanizmów bezpieczeństwa, takich jak borrow checker, lecz umożliwia wykonywanie ograniczonego zestawu operacji, których bezpieczeństwa kompilator nie może zagwarantować automatycznie[20].