Megjelent a Mozilla által indított, de manapság a független, nonprofit Rust Foundation által fejlesztett Rust 1.79 általános célú programozási nyelv. A nyelv a memória biztonságos kezelésére összpontosít, és eszközöket biztosít a feladatok magas párhuzamossággal való végrehajtásához, mindezt anélkül, hogy szemétgyűjtőt vagy futásidőt (runtime) használna (a futásidő a kezdeti beállításra és a standard könyvtár kezelésére korlátozódik).
A Rust memória kezelésének módszerei megszüntetik a fejlesztők hibáit a mutatókkal való manipulálás során, és védelmet nyújtanak az alacsony szintű memória kezelésből adódó problémákkal szemben, mint például a már felszabadított memória területére való hivatkozás, null-pointer dereferálás, pufferméret túllépés stb. A könyvtárak terjesztésére, a build biztosítására és a függőségek kezelésére a Cargo csomagkezelő fejlesztés alatt áll. A könyvtárak elhelyezésére a crates.io tároló támogatott.
A memória biztonságos kezelése a Rustban a fordítási időben történik, a hivatkozások ellenőrzésén, az objektumok tulajdonjogának nyomon követésén, az objektumok élettartamának (láthatóságának) figyelembevételén és a memória hozzáférésének helyességének értékelésén keresztül a kód futtatásakor. A Rust emellett eszközöket biztosít az egész számok túllépésének elleni védelemhez, kötelezővé teszi a változók értékeinek inicializálását használat előtt, jobban kezeli a hibákat a standard könyvtárban, alkalmazza a változatlan (immutable) hivatkozások és változók fogalmát alapértelmezés szerint, és erős statikus típussal minimalizálja a logikai hibákat.
Főbb újítások:
- Bevezették az inline konstansok támogatását, amelyek a "const { … }" blokkok segítségével közvetlenül a kódban megadhatók, és lehetővé teszik a külön konstansok meghatározásának elkerülését. A "const { … }" blokkban megadott kód a fordítási szakaszban kerül kiszámításra és konstansként használják, anélkül, hogy a program futása alatt végrehajtanák. Ellentétben a konstansok "const ITEM: … = …" kifejezés általi meghatározásával, a "const { … }" blokkokban nem szükséges megadni a típust, mivel ott automatikus típuskiértékelést támogatnak. Például a külön konstans meghatározásával egyenként
const EMPTY: Option<Vec> = None;
let foo = [EMPTY; 100];helyettesíthető helyi használatra:
let foo = [const { None }; 100];
- Stabilizálták a „T: Trait” szintaxist az asszociált típusú korlátozások meghatározására, amely lehetővé teszi az összetett típuskorlátozások definíciójának egyszerűsítését, amelyek korábban belső impl Trait vagy több „where” feltétel meghatározását igényelték.
- Biztosították a temporális értékek élettartamának automatikus meghosszabbítását, amelyeket a „match” és „if” konstrukciókban használnak.
let a = if true {
..;
&temp() // az élettartam meghosszabbodik
} else {
..;
&temp() // az élettartam meghosszabbodik
}; - Stabilizálták a main függvény más modulokból és crate csomagokból való importálásának lehetőségét.
- A standard könyvtár összeállításakor a fordítón a „-Cforce-frame-pointers=yes” zászlót használják, amely adatokat ad hozzá a programok profilozásakor a verem rekonstrukciójához.
- Új API-k kerültak a stabil kiadások közé, beleértve a metódusok és típusimplementációk stabilizálását:
- {integer}::unchecked_add
- {integer}::unchecked_mul
- {integer}::unchecked_sub
- ::split_at_unchecked
- ::split_at_mut_unchecked
- ::utf8_chunks
- str::Utf8Chunks
- str::Utf8Chunk
- ::is_aligned
- ::is_aligned
- NonNull::is_aligned
- ::len
- ::len
- ::is_empty
- ::is_empty
- NonNull::::is_empty
- CStr::count_bytes
- io::Error::downcast
- num::NonZero
- path::absolute
- proc_macro::Literal::byte_character
- proc_macro::Literal::c_string
- A 'const' qualifier that defines the ability to use it in any context instead of constants is applied in functions:
- Atomic*::into_inner
- io::Cursor::new
- io::Cursor::get_ref
- io::Cursor::position
- io::empty
- io::repeat
- io::sink
- panic::Location::caller
- panic::Location::file
- panic::Location::line
- panic::Location::column
- Stabilizálva
azok a funkciók, amelyeket a Webassembly (WASM) köztes reprezentációba történő fordítás során lehet használni. - Bevezetésre került a harmadik támogatási szint az aarch64-apple-visionos, aarch64-apple-visionos-sim és riscv32ima-unknown-none-elf platformokra. A harmadik szint alapvető támogatást jelent, de automatizált tesztelés, hivatalos kiadások publikálása és a kód összeszerelési képességének ellenőrzése nélkül.
- Bevezetésre került a második támogatási szint az aarch64-pc-windows-gnullvm, i686-pc-windows-gnullvm és x86_64-pc-windows-gnullvm célplatformok számára. A második támogatási szint az összeszerelés garanciáját jelenti.
Emellett a Rust Foundation, amely a Rust nyelv körüli ökoszisztémát felügyeli, bejelentette a "Safety-Critical Rust Consortium" létrehozását, amely a Rust nyelv használatára összpontosít olyan megoldásokban, amelyek magas megbízhatóságot igényelnek (Safety-Critical Software), és ahol a hiba életveszélyhez, környezeti károkhoz vagy súlyos berendezéskárokhoz vezethet. A konzorciumhoz csatlakozott az ARM, AdaCore, Ferrous Systems, OxidOS, Synopsys, HighTec EDV-Systeme GmbH, TrustInSoft, Veecle és a Woven by Toyota. A konzorcium által megoldandó feladatok között szerepel útmutatók írása és könyvtárak, linterek és statikus elemzők fejlesztése, valamint a megbízhatóság formális ellenőrzési módszereinek alkalmazása és a nyelv alnyelvének fejlesztése a nagy megbízhatóságú rendszerekhez.
A nagy megbízhatóságú rendszerekkel kapcsolatos projektek közül kiemelkedik a Verus — a Rust nyelven írt kód helyességének ellenőrzésére szolgáló eszközkészlet. Az ellenőrzés a kód elfogadható viselkedését leíró specifikáció meghatározásával történik. A Verus az végrehajtható kód futása során a specifikációnak való megfelelést ellenőrzi a működés helyességének megerősítése érdekében.
Forrás: opennet.ru
