Bol vydaný univerzálny programovací jazyk Rust 1.63, založený projektom Mozilla, ale teraz vyvinutý pod záštitou nezávislej neziskovej organizácie Rust Foundation. Jazyk sa zameriava na bezpečnosť pamäte a poskytuje prostriedky na dosiahnutie vysokej paralelnosti úloh, pričom sa vyhýba používaniu zberača odpadu a runtime (beh je zredukovaný 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:
- Pridané rozhranie std::thread::scope API, ktoré vám umožňuje vytvárať vlákna s rozsahom. Na rozdiel od predtým dostupných vlákien, nové std::thread::scope API umožňuje odovzdávanie nestatických údajov, zatiaľ čo vlákna vytvorené pomocou klasického std::thread::spawn API museli vlastniť všetky odovzdané argumenty a nemohli prijímať vypožičané premenné. Rozhranie std::thread::scope API zaisťuje, že všetky vytvorené vlákna sú ukončené pred vrátením údajov, čím poskytuje primerané zabezpečenie mechanizmu výpožičiek.
- Boli navrhnuté nové typy obalov pre deskriptory súborov – BorrowedFd a OwnedFd, ktoré poskytujú výpožičky a vlastníctvo. Typy sú označené "#[repr(transparent)], čo umožňuje ich priame použitie v externých väzbách C spôsobom, ktorý je vedomý vlastníctva.
- Poskytuje možnosť volať Condvar::new, Mutex::new a RwLock::new v kontexte konštánt na vytvorenie globálnych statických hodnôt Mutex, RwLock a Condvar bez použitia balíkov lazy_static.
- Pre funkcie ako fn foo (hodnota: T, f: impl Copy) je povolená syntax ako „foo::“. (32, 3)“, pričom sa výslovne uvádza typ generika.
- Prechod na používanie techniky NLL (Non-Lexical Lifetimes) na identifikáciu problémov s premennými požičiavania bol dokončený. NLL zohľadňuje na úrovni množiny ukazovateľov v grafe toku vykonávania, čo umožňuje zvýšiť kvalitu kontroly premenných výpožičiek (kontrola výpožičiek) a umožňuje vykonávanie niektorých typov správneho kódu, použitie tzv. čo predtým viedlo k chybe. Podpora pre starý mechanizmus, ktorý používal celoživotné viazanie na lexikálnej úrovni, bola teraz úplne odstránená z rustc a použitie nového NLL bolo implementované v celom rozsahu.
- Nová časť API bola presunutá do kategórie stabilných, vrátane metód a implementácií vlastností boli stabilizované:
- pole::from_fn
- Box::into_pin
- BinaryHeap::try_reserve
- BinaryHeap::try_reserve_exact
- OsString::try_reserve
- OsString::try_reserve_exact
- PathBuf::try_reserve
- PathBuf::try_reserve_exact
- Cesta::try_existuje
- Ref::filter_map
- RefMut::filter_map
- NonNull::<[T]>::len
- ToOwned::clone_into
- Ipv6Addr::to_ipv4_mapped
- unix::io::AsFd
- unix::io::BorrowedFd<'fd>
- unix::io::OwnedFd
- okná::io::AsHandle
- windows::io::BorrowedHandle
Zdroj: opennet.ru
