Objavljen je izdanak programskog jezika Rust 1.89, koji je izvorno razvijen od strane Mozilla projekta, a sada ga razvija neprofitna organizacija Rust Foundation. Jezik se fokusira na sigurnu upotrebu memorije i pruža sredstva za postizanje visokog paralelizma u izvršavanju zadataka, pri čemu se oslanja na osnovnu inicijalizaciju i podršku standardnoj biblioteci bez upotrebe sakupljača smeća i runtime-a.
Metode upravljanja memorijom u Rust-u oslobađaju developere od grešaka pri manipulaciji pokazivačima i štite od problema koji nastaju zbog niskonivojskog rada s memorijom, kao što su pristupanje memorijskim područjima nakon njihova oslobađanja, dereferenciranje null pokazivača, izlazak izvan granica bafera, itd. Za distribuciju biblioteka, omogućavanje gradnje i upravljanje ovisnostima razvija se paket menadžer Cargo. Za hostovanje biblioteka podržava se repozitorij crates.io.
Sigurno upravljanje memorijom u Rust-u osigurano je tokom kompajliranja pomoću provjere referenci, praćenja vlasništva nad objektima, uzimanja u obzir vremena života objekata (vidljivost) i procjene ispravnosti pristupa memoriji tokom izvršavanja koda. Rust takođe pruža sredstva za zaštitu od prelivanja cijelih brojeva, zahtijeva obaveznu inicijalizaciju vrijednosti varijabli prije korišćenja, bolje obrađuje greške u standardnoj biblioteci, primjenjuje koncept nepromjenjivosti (immutable) referenci i varijabli kao podrazumijevano, te nudi jaku statičku tipizaciju za minimiziranje logičkih grešaka.
Glavne novosti:
- Omogućeno je korišćenje simbola „_“ kao argumenta generičkih parametara sa oznakom „const“ za izvod vrednosti ovih parametara na osnovu okruženja. pub fn all_false() -> [bool; LEN] { [false; _] }
- Dodato je novo lint upozorenje „mismatched_lifetime_syntaxes“ radi rešavanja problema nejasnog određivanja vremena trajanja u potpisima funkcija prilikom korišćenja mehanizma „lifetime elision“ (automatski određuje vreme trajanja referenci, omogućavajući izostavljanje ručnog navođenja). Upozorenje proverava da li su ulazni i izlazni parametri funkcije pripadaju istoj grupi tipova. Grupe su formirane na osnovu podrške za jasno navođenje vremena trajanja i mogućnosti automatskog izračunavanja vremena trajanja od strane prevodioca (na primer, u tipovima „&’a T“ i „ContainsLifetime“ može se eksplicitno prisustvovati vreme trajanja, ali prevodilac ne može automatski odrediti vreme trajanja, dok u tipovima „&T“, „&’_ T“ i „ContainsLifetime“ je dozvoljeno kako jasno navođenje, tako i automatsko određivanje).
- U atributu „target_feature“ za x86 sisteme implementirana je mogućnost provere podrške za proširene setove instrukcija sha512, sm3, sm4, kl i widekl, kao i pojedinačne funkcije avx512. #[target_feature(enable = „avx512bw“)] pub fn cool_simd_code(/* .. */) -> /* … */ { /* … */ }
- Omogućen je pokretanje doctest-a (testovi ugrađeni u dokumentaciju) ne samo za trenutnu ciljanju platformu, već i za druge platforme navedene prilikom pokretanja menadžera paketa „cargo“ („cargo test --doc --target other_target“).
- Za funkcije ‘extern „C”‘ prilikom kompilacije za ciljanju platformu „wasm32-unknown-unknown“ implementiran je standardni C ABI za WebAssembly.
- Z nekatere omejitve, ki se nanašajo na združljivost tipov, je dovoljena uporaba tipov i128 in u128 v zunanjih C funkcijah (extern "C"), za katere je bilo prej prikazano lint opozorilo „improper_ctypes_definitions“.
- У розряд стабільних переведено нову порцію API, зокрема стабілізовані методи та реалізації типажів:
- Številne vgrajene funkcije (Intrinsics) za procesorje x86, vključno z funkcijami za AVX512, SHA512, SM3 in SM4.
- NonZero
- File::lock
- File::lock_shared
- File::try_lock
- File::try_lock_shared
- File::unlock
- NonNull::from_ref
- NonNull::from_mut
- NonNull::without_provenance
- NonNull::with_exposed_provenance
- NonNull::expose_provenance
- OsString::leak
- PathBuf::leak
- Result::flatten
- std::os::linux::net::TcpStreamExt::quickack
- std::os::linux::net::TcpStreamExt::set_quickack
Priznak „const“ primenjen u funkcijama:
- ::as_mut_slice
- ::eq_ignore_ascii_case
- str::eq_ignore_ascii_case
- Začel se je postopek prenosa ciljnega sistema „x86_64-apple-darwin“ z prve na drugo raven podpore (Apple načrtuje ukinitev podpore za arhitekturo x86_64). Prva raven podpore pomeni oblikovanje binarnih zbiranj, izvajanje temeljitega testiranja in zagotavljanje najvišje garancije podpore platformi — vsakokratna sprememba v prevajalniku se preveri z izvajanjem popolnega nabora testov. Druga raven podpore pomeni garancijo gradnje, a brez garancij med prehodom testnega nabora.
- Uvedena je bila tretja raven podpore za platformi „loongarch32-unknown-none“ in „loongarch32-unknown-none-softfloat“. Tretja raven vključuje osnovno podporo, vendar brez avtomatiziranega testiranja, objave uradnih zbiranj in preverjanja možnosti gradnje kode.
Dodati je mogoče povezane dogodke in projekte, vezane na Rust:
- Objavljeno je poročilo o stanju paketov v jeziku Rust v Debianu. Opaženo je, da je v veji Debian Unstable (Sid) približno 8 % src-paketov v glavnem repozitoriju povezano z gradbenimi odvisnostmi od vsaj enega paketa „librust-*“. V Debian 12 je bilo takšnih paketov 4,5 %. Prav tako je bilo opaženo, da več kot 3000 paketov vključuje kodo v jeziku Rust, ki je bila izločena v pakete librust-..-dev, 150 src-paketov pa ponuja natisnjene izvršne datoteke ali knjižnice Rust.
Med paketi, zanimivimi za Debian, so omenjeni sudo-rs, ntpd-rs, uutils, Sequoia, rpgp, hickory (DNS), Rustls, rav1d in fish. Dodatna podpora za Rust je bila uvedena v APT, QEMU (virtiofsd), jedru Linux in Mesu, pričakuje se tudi v LibreOffice. Orodje debcargo je bilo uvedeno za pretvorbo crate-paketov v src-pakete Debian.
- Predstavljen je projekt tmux-rs, ki razvija klon multiplexerja terminala tmux (upravljalnik oken za konzolo), predelanega iz C v Rust.
- Razvijalec gonilnika Tyr iz podjetja Collabora je objavil članek o napravi, ki deluje na ravni jedra gonilnikov za GPU in načelih izdelave takšnih gonilnikov v jeziku Rust.
- Demonstrirana je bila univerzalna aplikacija v jeziku Rust, ki lahko deluje tako na CPU kot na različnih platformah GPU: CUDA za NVIDIA, SPIR-V za GPU s podporo Vulkan, Metal za Apple, DirectX 12 za Windows, WebGPU za brskalnike.
Izvor: opennet.ru
