Programovací jazyk Rust 1.99, založený projektom Mozilla, ale teraz vyvíjaný pod záštitou nezávislej neziskovej organizácie Rust Foundation, bol vydaný. Jazyk sa zameriava na bezpečnosť pamäte a poskytuje nástroje na dosiahnutie vysokého paralelizmu vykonávania úloh, pričom sa zaobíde bez použitia garbage collectoru a runtime prostredia (runtime prostredie je redukované na základnú inicializáciu a údržbu štandardnej knižnice).
Metódy správy pamäte v Ruste sú navrhnuté tak, aby eliminovali chyby pri manipulácii s ukazovateľmi a chránili pred problémami vyplývajúcimi z nízkoúrovňovej správy pamäte, ako je prístup k pamäti po jej uvoľnení, dereferencovanie nulových ukazovateľov, preplnenie vyrovnávacej pamäte atď. Projekt vyvíja správcu balíčkov Cargo na distribúciu knižníc, uľahčenie zostavovania a správu závislostí. Na hosťovanie knižníc sa udržiava repozitár crates.io.
Bezpečnosť pamäte je v Rust zabezpečená v čase kompilácie prostredníctvom kontroly referencií, sledovania vlastníctva objektu, sledovania životnosti objektov (rozsahov) a hodnotenia správnosti prístupu do pamäte počas vykonávania kódu. Rust tiež poskytuje ochranu proti pretečeniu celých čísel, vyžaduje povinnú inicializáciu hodnôt premenných pred použitím, lepšie zvláda chyby v štandardnej knižnici, štandardne aplikuje koncept nemenných referencií a premenných, ponúka silné statické typovanie na minimalizáciu logických chýb.
Hlavné inovácie:
- Rust teraz umožňuje vytvárať variadic funkcie exportované na volanie z projektov v jazyku C (C ABI). Posledným prvkom zoznamu parametrov v takýchto funkciách môže byť konštrukt "...", ktorý sa v Ruste spracováva pomocou špeciálneho typu VaList, ktorý funguje podobne ako va_list v jazyku C. unsafe extern "C" fn sum(mut args: ...) -> i32 { let a = unsafe { args.next_arg:: () }; nech b = nebezpečné { args.next_arg:: () }; a + b } fn foo() -> i32 { nebezpečné { súčet(0i32, 2i32) } }
- Funkcie Layout::for_value_raw, mem::size_of_val_raw a mem::align_of_val_raw boli stabilizované, aby umožňovali bezpečnú zmenu veľkosti a zarovnanie nespracovaných ukazovateľov, a to aj pri použití dynamicky dimenzovaných typov, ako sú napríklad slices, bez nutnosti vytvárať odkazy na údaje.
- Dokumentácia teraz odporúča vyhnúť sa uvoľňovaniu pamäte, na ktorú sa staticky odkazovalo s neurčitou životnosťou (&'static) prostredníctvom volania Box::leak (round-trip unleaking), pretože táto akcia by mohla viesť k problémom v dôsledku nekompatibility s budúcimi optimalizáciami kompilátora a mechanizmami alokácie zásuvnej pamäte. Namiesto vytvárania statickej referencie pre dočasné prenosy vlastníctva sa odporúča použiť surové ukazovatele, napríklad prostredníctvom volania Box::into_non_null.
- Nová časť API bola presunutá do kategórie stabilných, vrátane metód a implementácií vlastností boli stabilizované:
- IntoIterator pre Box<[T; N]>
- IntoIterator pre &Box<[T; N]>
- IntoIterator pre &mut Box<[T; N]>
- VecDeque::retain_back
- core::ffi::VaList
- Box::into_non_null
- Box::from_non_null
- Vec::do_častí
- Vec::from_parts
- jadro::mem::veľkosť_hodnoty_raw
- jadro::mem::zarovnanie_val_raw
- jadro::alloc::rozloženie::pre_hodnotu_raw
- Reťazec::from_utf8_lossy_owned
- reťazec::FromUtf8Error::into_utf8_lossy
- FusedIterator pre StepBy
- std::fs::set_times
- std::fs::set_times_nofollow
- Správca balíkov cargo teraz obsahuje nový vstavaný profil „debug“, podobný profilu „dev“ (v budúcnosti sa plánuje oddelenie funkcií ladenia a vývoja). Inkrementálna kompilácia je pri zostavovaní v CI predvolene vypnutá.
- Cieľová platforma riscv64-unknown-linux-musl bola presunutá na úroveň podpory 2, ktorá poskytuje záruku zostavenia, ale nie záruku úspešného prejdenia testovacej sady.
Okrem toho by sme chceli zdôrazniť nedávno ohlásené projekty a udalosti súvisiace s Rustom:
- Spoločnosť Microsoft povýšila jazyk Rust na jazyk Tier 1 a bude mu poskytovať plnú podporu vo všetkých fázach vývoja v rámci spoločnosti. Predtým bola podpora Tier 1 poskytovaná pre jazyky C++, C# a TypeScript. Rust sa už používa vo viac ako 100 repozitároch spoločnosti Microsoft. Komponenty Rustu sa okrem iného už používajú v produktoch ako Microsoft 365 a Copilot a pre kompilátor MSVC bol vyvinutý špecializovaný backend pre Rust, rustc_codegen_utc, založený na kompilátore rustc.
Spoločnosť Microsoft uvádza, že primárnym cieľom je použiť Rust na posilnenie bezpečnostne kritického kódu. Podľa technického riaditeľa spoločnosti Microsoft Azure približne 70 % všetkých zraniteľností v Windows sú spôsobené problémami so správou pamäte, ktorým sa dá vyhnúť používaním Rustu.
- Google ho odstránil z jadra. Linux Stará implementácia Binder IPC, napísaná v jazyku C, bola zastaraná v prospech nového ovládača Binder IPC prepísaného v Ruste. Je potrebné poznamenať, že za 15 rokov svojej existencie starý ovládač nahromadil značný technický dlh a početné komplikácie, ktoré bránili detekcii chýb, údržbe a pridávaniu nových funkcií. Ovládač Binder IPC v Ruste bol určený ako hlavný ovládač a už sa neprezentuje ako experimentálny vývoj.
- Bola vydaná verzia Arti 2.7.0, implementácia nástroja Tor v jazyku Rust. Akonáhle kódová základňa Arti dosiahne úroveň schopnú úplne nahradiť implementáciu v jazyku C, vývojári systému Tor plánujú urobiť z Arti primárnu implementáciu v jazyku Tor a postupne ukončiť údržbu implementácie v jazyku C. Nová verzia zahŕňa vývoj funkcií pre relé a serverov Funkcia Directory Authority (DA) súvisiaca s analýzou dokumentov, podporou zrkadlenia adresárových serverov a spracovaním prevádzky DNS. Bola pridaná implementácia RPC pre zmeny a kontroly konfigurácie. Bolo opravených niekoľko zraniteľností – správcom služby Onion sa odporúča urýchlená aktualizácia ich systémov.
Zdroj: opennet.ru
