Objavljen je izlaz programskog jezika Rust 1.95, koji se prvotno razvijao pod pokroviteljstvom Mozille, a sada ga razvija neovisna neprofitna organizacija Rust Foundation. Jezik se fokusira na sigurnu manipulaciju memorijom i pruža sredstva za postizanje visokog paralelizma u izvršenju zadataka, dok izbjegava korištenje sakupljača smeća i runtimea (runtime se svodi na osnovnu inicijalizaciju i podršku standardnoj biblioteci).
Metode upravljanja memorijom u Rust-u usmjerene su na isključivanje grešaka prilikom manipulacije pokazivačima i zaštitu od problema koji nastaju zbog niskonivojskog rada s memorijom, kao što su pristupanje memorijskom području nakon što je oslobođeno, dereferenciranje nultih pokazivača, izlazak iz okvira bafera itd. Za distribuciju biblioteka, osiguranje gradnje i upravljanje ovisnostima, projekt se razvija preko upravitelja paketa Cargo. Za hosting biblioteka podržava se repozitorij crates.io.
Sigurna manipulacija memorijom osigurava se u Rustu tijekom kompilacije provjerom referenci, praćenjem vlasništva nad objektima, uzimanjem u obzir vremena života objekata (opseg vidljivosti) i ocjenom točnosti pristupa memoriji tijekom izvršavanja koda. Rust također pruža sredstva za zaštitu od cjelobrojnih prekoračenja, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije upotrebe, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivosti (immutable) referenci i varijabla kao zadano te nudi snažnu statičku tipizaciju za minimiziranje logičkih grešaka.
Glavne novine:
- Dodana je makro funkcija "cfg_select!" koja se može koristiti umjesto paketa "cfg-if" za obradu više uvjeta kompilacije u stilu "match" blokova, bez definiranja lanca uvjetnih izraza pomoću konstrukcije "#[cfg]". cfg_select! { unix => { fn foo() { /* unix */ } } target_pointer_width = "32" => { fn foo() { /* ne-unix, 32-bit */ } } _ => { fn foo() { /* ne unix i ne 32-bit */ } } }
- Stabilizirana je mogućnost korištenja izraza "if let" unutar "match" blokova za stvaranje uvjetnih obrasca. Ranije je podrška za navođenje više izraza "let" korištenjem operatora "&&" stabilizirana za "if" i "while" blokove. match value { Some(x) if let Ok(y) = compute(x) => { println!("{}, {}", x, y); } _ => {} }
- Stabilizirana je podrška za inline assembler za PowerPC i PowerPC64 arhitekture.
- U stabilne verzije prebačen je novi set API-ja, uključujući stabilizirane metode i implementacije tipa:
- MaybeUninit: From<[MaybeUninit; N]>
- MaybeUninit: AsRef<[MaybeUninit; N]>
- MaybeUninit: AsRef<[MaybeUninit]>
- MaybeUninit: AsMut<[MaybeUninit; N]>
- MaybeUninit: AsMut<[MaybeUninit]>
- [MaybeUninit; N]: From<MaybeUninit
- Cell: AsRef<[Cell; N]>
- Cell: AsRef<[Cell]>
- Cell: AsRef<[Cell]>
- bool: TryFrom
- AtomicPtr::update
- AtomicPtr::try_update
- AtomicBool::update
- AtomicBool::try_update
- AtomicIn::update
- AtomicIn::try_update
- AtomicUn::update
- AtomicUn::try_update
- cfg_select!
- mod core::range
- core::range::RangeInclusive
- core::range::RangeInclusiveIter
- core::hint::cold_path
- ::as_ref_unchecked
- ::as_ref_unchecked
- ::as_mut_unchecked
- Vec::push_mut
- Vec::insert_mut
- VecDeque::push_front_mut
- VecDeque::push_back_mut
- VecDeque::insert_mut
- LinkedList::push_front_mut
- LinkedList::push_back_mut
- Layout::dangling_ptr
- Layout::repeat
- Layout::repeat_packed
- Layout::extend_packed
- Znak "const" primijenjen je u funkcijama:
- fmt::from_fn
- ControlFlow::is_break
- ControlFlow::is_continue
- U stabilnim verzijama alata ukinuta je podrška za prenošenje specifikacija vlastitih ciljanih platformi compileru.
- Ciljane platforme powerpc64-unknown-linux-musl, aarch64-apple-tvos, aarch64-apple-tvos-sim, aarch64-apple-watchos, aarch64-apple-watchos-sim, aarch64-apple-visionos i aarch64-apple-visionos-sim su prebačene na drugi nivo podrške, što podrazumijeva garanciju izrade, ali bez garancija prilikom prolaska testnog skupa.
Dodatno se mogu istaknuti nedavno najavljeni projekti i događaji vezani za Rust:
- Tvrtka Canonical je predstavila prikazni poslužitelj Mir 2.26, koji pruža skup biblioteka za izradu kompozitnih poslužitelja na bazi protokola Wayland i uključuje standardnu funkcionalnost upravitelja prozora i prikaznih poslužitelja. Mir je korišten u projektima kao što su kompozitni upravitelj Miracle, sučelje za internet kioske Ubuntu Frame i korisničko okruženje Miriway.
Nova verzija se ističe dodavanjem mogućnosti razvoja komponenti na jeziku Rust. Na Rust-u je realizirana alternativna podsustava upravljanja unosom evdev-rs, a započet je rad na frontend-u wayland-rs napisanom na Rust-u za Wayland. Od promjena koje nisu povezane s Rust-om, u Mir-u je zabilježena podrška za Wayland protokole ext_image_copy_capture_v1 i input-triggers.
- Objavljen je prvi izdanak analizatora prometa ayaFlow, napisanog na Rust-u i koristeći sustav jezgre Linux eBPF za presretanje mrežnih paketa (IPv4/TCP/UDP) i Ethernet okvira s minimalnim utjecajem na performanse. Podržano je duboko inspekcijsko protokola razine aplikacija (L7), poput izdvajanja TLS SNI i DNS upita prilikom analize šifriranog prometa. Sustav podržava vođenje tablice sa trenutnim stanjem veza u formatu DashMap, pohranu povijesti u SQLite i pružanje statistike putem REST API-ja za Prometheus.
- Implementirana je mogućnost izrade višedretvenih aplikacija na jeziku Rust, koje koriste funkcije std::thread i izvođenja na strani GPU-a.
Izvor: opennet.ru
