Megjelent a Mozilla projekt által alapított, de immár a Rust Foundation független non-profit szervezet égisze alatt kifejlesztett Rust 1.57 rendszerprogramozási nyelv kiadása. A nyelv a memória biztonságára összpontosít, automatikus memóriakezelést biztosít, és biztosítja a magas szintű párhuzamosság elérését szemétgyűjtő vagy futási idő nélkül (a futásidő a szabványos könyvtár alapvető inicializálására és karbantartására csökken).
A Rust automatikus memóriakezelése kiküszöböli a mutatók manipulálása során fellépő hibákat, és védelmet nyújt az alacsony szintű memóriamanipulációból eredő problémák ellen, mint például a memóriaterület felszabadítása utáni hozzáférés, nullmutató hivatkozások, puffertúllépések stb. A programkönyvtárak terjesztésére, az összeállítás biztosítására és a függőségek kezelésére a projekt a Cargo csomagkezelőt fejleszti. A crates.io tároló támogatja a könyvtárak tárolását.
Főbb újítások:
- A „pánik!” makró használata stabilizálódott. a fordítás során létrehozott kontextusokban, például a "const fn" deklarációkban. Ezenkívül a "pánik!" const deklarációk lehetővé teszik az „assert!” makró használatát. és néhány más szabványos könyvtári API. A stabilizálás még nem fedi le a teljes formázási infrastruktúrát, így jelenlegi formájában a „pánik!” makró csak statikus karakterláncokkal (pánik!(“...")) használható, vagy egyetlen interpolált "&str" értékkel helyettesítéskor (pánik!("{}", a)), aminek a "{" helyettesítésére kell korlátozódnia. }" formázási specifikációk és egyéb típusok nélkül. A jövőben a makrók állandó kontextusban való alkalmazhatósága bővülni fog, de a stabilizált képességek már a fordítási szakaszban elegendőek az assert ellenőrzések elvégzéséhez: const _: () = assert!(std::mem::size_of:: () == 64); const _: () = assert!(std::mem::size_of:: () == 8);
- A Cargo csomagkezelő lehetővé teszi tetszőleges nevű profilok használatát, nem korlátozva a "dev", "release", "test" és "bench" kifejezésekre. Például, ha csak a végtermék-összeállítások generálásakor szeretné engedélyezni az optimalizálást a linkelési szakaszban (LTO), létrehozhat egy „gyártási” profilt a Cargo.toml-ben, és hozzáadhatja az „lto = true” jelzőt. A saját profilok definiálásakor azonban meg kell adnia egy meglévő profilt, hogy örökölje az alapértelmezett beállításokat. Az alábbi példa egy „gyártási” profilt hoz létre, amely kiegészíti a „release” profilt az „lto = true” jelzővel. Maga a profil a cargo „--profile production” opcióval történő meghívásával aktiválódik, és az összeszerelési műtermékek a „cél/gyártás” könyvtárba kerülnek. [profile.production] inherits = "release" lto = igaz
- Stabilizálódott a try_reserve használata a Vec, String, HashMap, HashSet és VecDeque típusoknál, amely lehetővé teszi, hogy egy adott típusú elem bizonyos számú elemére előre lefoglaljon helyet a memóriafoglalási műveletek gyakoriságának csökkentése és elkerülése érdekében. memóriahiány miatt működés közben összeomlik.
- Megengedett kapcsos zárójeles makrók megadása olyan kifejezésekben, mint az "m!{ .. }.method()" és az "m!{ .. }?".
- A File::read_to_end és read_to_string függvények végrehajtása optimalizálva lett.
- A Unicode specifikáció támogatása a 14.0-s verzióra frissült.
- Bővítette a "#[must_use]" jelzésű függvények számát, hogy figyelmeztetést adjon ki, ha a visszatérési értéket figyelmen kívül hagyja, ami segít azonosítani azokat a hibákat, amelyeket abból adódó feltételezésből adódóan, hogy egy függvény megváltoztatja az értékeket, nem pedig új értéket ad vissza.
- Kísérleti háttérrendszer hozzáadva a libgccjit használatával kódgeneráláshoz.
- Az API új része átkerült a stabil kategóriába, beleértve a tulajdonságok módszereit és megvalósításait is:
- [T; N]::mint_mut_slice
- [T; N]::as_slice
- gyűjtemények::TryReserveError
- HashMap::try_reserve
- HashSet::try_reserve
- String::try_reserve
- String::try_reserve_exact
- Vec::try_reserve
- Vec::try_reserve_exact
- VecDeque::try_reserve
- VecDeque::try_reserve_exact
- Iterátor::map_while
- iter::MapWhile
- proc_macro::is_available
- Parancs::get_program
- Parancs::get_args
- Parancs::get_envs
- Parancs::get_current_dir
- CommandArgs
- CommandEnvs
- A „const” attribútumot, amely meghatározza, hogy használható-e bármilyen kontextusban konstansok helyett, a hint::unreachable_unchecked függvény használja.
- A harmadik támogatási szint az armv6k-nintendo-3ds, az armv7-unknown-linux-uclibceabihf, az m68k-unknown-linux-gnu, az aarch64-kmc-solid_asp3, az armv7a-kmc-solid_asp3-eabi és az armv7a-hoz solid_asp3-eabihf platformok. A harmadik szint alaptámogatást foglal magában, de automatikus tesztelés, hivatalos buildek közzététele vagy annak ellenőrzése nélkül, hogy a kód összeállítható-e.
Forrás: opennet.ru