Rust – kompilowany język programowania ogólnego przeznaczenia. Stworzony z myślą o „bezpieczeństwie, współbieżności i praktyczności”.
Historia Język został zaprojektowany przez Graydona Hoare’a w 2006 roku. W 2009 roku rozwój projektu objęła Fundacja Mozilla. W 2010 Mozilla upubliczniła informację o języku. W 2011 roku kompilator języka, znany jako rustc, został z powodzeniem skompilowany przez samego siebie.
Pierwsza numerowana wersja alfa została wydana w 2012 roku. 15 maja 2015 ukazała się wersja 1.0.
8 lutego 2021 pięć firm (Mozilla, AWS, Google, Microsoft i Huawei) ogłosiły utworzenie Fundacji Rust.
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++.
W grudniu 2022 język Rust uzyskał wsparcie w rozwoju jądra Linuxa.
Rust wykorzystuje Cargo jako menadżer pakietów.
Wiele organizacji wykorzystuje ten język programowania w zastosowaniach produkcyjnych. Obecnie dwoma największymi otwartymi projektami korzystającymi z języka Rust były w 2018 r. Servo oraz kompilator Rusta.
Cechy języka Najważniejsze cechy języka Rust to:
bezpieczeństwo pamięci, zarządzanie pamięcią poprzez Resource Acquisition Is Initialization, bezpieczeństwo współbieżności w koncepcji Ownership i Borrowing, system typów obsługujący mechanizm podobny do klas typów, zwany cechami, inspirowany językiem Haskell.
Przykłady Hello world: fn main() { println!("Hello, world!"); } Fizz buzz: 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)
ROT13: 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"); }
Krytyka – Unsafe Rust 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.
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.
Przypisy
Linki zewnętrzne Oficjalna strona języka Rust Język Rust w serwisie GitHub
Kategoria:Języki programowania Kategoria:Oprogramowanie na licencji Apache License Kategoria:Oprogramowanie na licencji MIT