Programovací jazyk Rust 1.93, 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 spracovania pamäte Rustu chránia vývojára pred chybami pri manipulácii s ukazovateľmi a chránia pred problémami, ktoré vznikajú v dôsledku nízkoúrovňového spracovania pamäte, ako je prístup k oblasti pamäte po jej uvoľnení, dereferencovanie nulových ukazovateľov, pretečenie vyrovnávacej pamäte atď. Na distribúciu knižníc, poskytovanie zostáv a správu závislostí projekt vyvíja správcu balíkov Cargo. Úložisko crates.io je podporované pre hosťovanie knižníc.
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:
- Štandardná knižnica Musl v jazyku C, ktorá je zabudovaná do distribúcie Rust a používa sa na statické linkovanie pre cieľové platformy „*-linux-musl“ (aarch64-unknown-linux-musl, x86_64-unknown-linux-musl, powerpc64le-unknown-linux-musl atď.) na systémoch bez Musl, bola aktualizovaná na verziu 1.2.5. Minimálna podporovaná verzia Musl pre dynamické linkovanie bola tiež zvýšená na 1.2.5. Rust predtým používal Musl 1.2.3, ktorý mal problémy s implementáciou DNS resolvera. V Musl 1.2.4 bol DNS resolver aktualizovaný tak, aby podporoval odosielanie TCP dotazu, ak UDP požiadavka zlyhá, čo vyriešilo problém s dotazovaním veľkých DNS záznamov a zlepšilo kompatibilitu s rekurzívnymi DNS servermi, ktoré nepodporujú vracanie čiastočných výsledkov v skrátených UDP odpovediach. Musl 1.2.5 implementuje spracovanie odpovedí s dlhými sekvenciami CNAME v DNS resolveri a rieši problém, ktorý spôsoboval, že niektoré veľké odpovede prenesené cez TCP boli zahodené.
- Štandardná knižnica bola prepracovaná s cieľom riešiť problémy s reentranciou v makre std::thread_local! a funkcii std::thread::current v globálnych alokátoroch pamäte napísaných v jazyku Rust, čo viedlo k nekonečnej rekurzii. Aby sa zabránilo volaniu std::thread_local! a std::thread::current rovnakého alokátora, v ktorom sa používajú pri pokuse o alokáciu pamäte, teraz priamo využívajú mechanizmus alokácie systémovej pamäte.
- Použitie atribútov cfg je teraz povolené vo vnútri blokov „asm!“ obsahujúcich assemblerový kód. To umožňuje napríklad riadiť používanie rozšírených inštrukčných sád CPU v kontexte jednotlivých príkazov v rámci bloku asm (predtým bolo možné atribúty cfg zadať iba pre celý blok asm). asm!( // alebo global_asm! alebo naked_asm! "nop", #[cfg(target_feature = "sse2")] "nop", // … #[cfg(target_feature = "sse2")] a = const 123, // používa sa iba na sse2 );
- Nová časť API bola presunutá do kategórie stabilných, vrátane metód a implementácií vlastností boli stabilizované:
- <[MožnoUninit ]>::assume_init_drop
- <[MožnoUninit ]>::assume_init_ref
- <[MožnoUninit ]>::assume_init_mut
- <[MožnoUninit ]>::zapísať_kópiu_výrezu
- <[MožnoUninit ]>::write_clone_of_slice
- Reťazec::do_raw_parts
- Vec::into_raw_parts
- ::nezaškrtnuté_negatívne
- ::nezaškrtnuté_shl
- ::nezaškrtnuté_shr
- ::nezaškrtnuté_shl
- ::nezaškrtnuté_shr
- <[T]>::as_array
- <[T]>::as_array_mut
- <*const [T]>::as_array
- <*mut[T]>::as_mut_array
- VecDeque::pop_front_if
- VecDeque::pop_back_if
- Trvanie::from_nanos_u128
- znak::MAX_LEN_UTF8
- znak::MAX_LEN_UTF16
- std::fmt::from_fn
- std::fmt::FromFn
- Cieľová platforma „riscv64a23-unknown-linux-gnu“ bola presunutá na druhú úroveň podpory, ktorá zahŕňa záruku zostavenia, ale nie záruku úspešného absolvovania testovacej sady.
Okrem toho stojí za zmienku niekoľko projektov súvisiacich s Rustom:
- Pre jadro Linux V súčasnosti sa vyvíja framework Rex, ktorý umožňuje vytváranie doplnkov pre jadro. Linux v jazyku Rust, ktorý sa dá použiť na rozšírenie základnej funkcionality namiesto eBPF. Rex poskytuje rovnaké bezpečnostné záruky ako eBPF, ale využíva jazykové funkcie Rustu a odľahčené runtime prostredie pre izoláciu a bezpečnosť. Takéto programy nepoužívajú verifikátor a sú kompilované do natívneho kódu kompilátorom Rust.
Programy Rex umožňujú použitie podmnožiny jazyka Rust, ktorá poskytuje bezpečnostné záruky. V súčasnosti je podporovaných päť typov programov eBPF: kprobe, perf_event, tracepoint, xdp a tc. Je možné volať pomocné funkcie eBPF, interagovať so štruktúrami mapy eBPF, spravovať zdroje jadra, ošetrovať výnimky a používať obaly a abstrakcie nad štruktúrami jadra.
- Fjall 3, vstavané úložisko kľúčov a hodnôt napísané v jazyku Rust, je teraz k dispozícii. Dáta sa ukladajú v protokolovej forme pomocou stromu Log-Structured-Merge (LSM), podobného RocksDB, kde sa zmeny zapisujú pridaním dát na koniec súboru. Na prístup k databáze je k dispozícii API v štýle BTreeMap. Medzi podporované funkcie patria menné priestory, vyhľadávanie vpred a vzad v rozsahu, vstavaná kompresia, serializovateľné transakcie, samostatné ukladanie kľúčov a ich pridružených veľmi veľkých hodnôt a automatická údržba databázy na pozadí. Kód je open source pod licenciou Apache 2.0.
- Projekt Tor vydal Arti 1.9.0, implementáciu 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 Toru plánujú urobiť z Arti primárnu implementáciu Toru a postupne ukončiť údržbu implementácie v jazyku C. Nová verzia naďalej implementuje funkcionalitu pre relé a serverov adresáre (Directory Authority), vylepšená podpora pre prácu s dynamicky priradenými portami (proxy.socks_listen = "auto"), pridané experimentálne API na správu kľúčov pre onion služby.
Zdroj: opennet.ru
