Megjelent a Mozilla projekt által alapított, de immár a Rust Foundation független non-profit szervezet égisze alatt kifejlesztett Rust 1.66 általános célú programozási nyelv. A nyelv a memória biztonságára összpontosít, és biztosítja az eszközöket a munka magas párhuzamosságának eléréséhez, miközben elkerüli a szemétgyűjtő és a futási időt (a futásidő a szabványos könyvtár alapvető inicializálására és karbantartására csökken).
A Rust memóriakezelési módszerei megóvják a fejlesztőt a mutatók manipulálása során előforduló hibáktól, és megóvják az alacsony szintű memóriakezelésből adódó problémáktól, mint például a memóriaterület elérése annak felszabadítása után, a nulla mutatók hivatkozásának megszüntetése, a puffertúllépések stb. A programkönyvtárak terjesztéséhez, a buildek biztosításához és a függőségek kezeléséhez a projekt fejleszti a Cargo csomagkezelőt. A crates.io tároló támogatja a könyvtárak tárolását.
A memóriabiztonságot a Rust a fordítási időben biztosítja a referenciaellenőrzés, az objektumok tulajdonjogának nyomon követése, az objektumok élettartamának (hatóköreinek) nyomon követésével és a memória-hozzáférés helyességének értékelésével a kód végrehajtása során. A Rust védelmet nyújt az egész számok túlcsordulása ellen is, megköveteli a változó értékek kötelező inicializálását használat előtt, jobban kezeli a hibákat a szabványos könyvtárban, alapértelmezés szerint alkalmazza a megváltoztathatatlan hivatkozások és változók koncepcióját, erős statikus gépelést kínál a logikai hibák minimalizálása érdekében.
Főbb újítások:
- Az egész számokat tartalmazó felsorolásokban (a "#[repr(Int)]" attribútum) megengedett a diszkrimináns explicit feltüntetése (a felsorolásban szereplő változatszám), még akkor is, ha a felsorolás mezőket tartalmaz. #[repr(u8)] enum Foo { A(u8), # diszkrimináns 0 B(i8), # diszkrimináns 1 C(bool) = 42, # diszkrimináns 42 }
- Hozzáadott függvény core::hint::black_box, amely egyszerűen visszaadja a kapott értéket. Mivel a fordító úgy gondolja, hogy ez a függvény csinál valamit, a black_box függvény segítségével letiltható a fordítói ciklusok optimalizálása kódteljesítmény-teszteléskor vagy generált gépi kód vizsgálatakor (hogy a fordító ne tekintse használtnak a kódot, és ne távolítsa el). Például az alábbi példában a black_box(v.as_ptr()) megakadályozza, hogy a fordító azt gondolja, hogy a v vektort nem használják. használd az std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); black_box(v.as_ptr()); } }
- A "cargo" csomagkezelő felajánlja a "remove" parancsot, amely lehetővé teszi a függőségek eltávolítását a Cargo.toml jegyzékből a parancssorból.
- 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:
- proc_macro::Span::source_text
- u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
- i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
- i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
- BTreeSet::{első, utolsó, pop_első, pop_utolsó}
- BTreeMap::{első_kulcsérték, utolsó_kulcsérték, első_bejegyzés, utolsó_bejegyzés, pop_első, pop_utolsó}
- WASI használatakor vegyen fel AsFd-megvalósításokat az stdio zártípusokhoz.
- impl TryFrom > Box<[T; N]>
- core::hint::black_box
- Időtartam::try_from_secs_{f32,f64}
- Opció:: unzip
- std::os::fd
- A "..X" és a "..=X" tartomány megengedett a sablonokban.
- A rustc fordító és az LLVM háttérrendszer felépítése során az LTO (Link Time Optimization) és a BOLT (Bináris optimalizálási és elrendezési eszköz) optimalizálási módokat használjuk a kapott kód teljesítményének növelésére és a memóriafelhasználás csökkentésére.
- Megvalósított 5. szintű támogatás az armv5te-none-eabi és thumbvXNUMXte-none-eabi platformokhoz. A harmadik szint alapvető támogatást jelent, de automatikus tesztelés, hivatalos buildek közzététele és a kód felépítési képességének ellenőrzése nélkül.
- Támogatás hozzáadva a macOS általános könyvtárakhoz való kapcsolódáshoz.
Ezenkívül megjegyezhetjük, hogy a Rust nyelv (gccrs) front-end fordítója bekerült a GCC kódbázisba. A frontend a GCC 13 ágban található, amely 2023 májusában fog megjelenni. A GCC 13-tól kezdődően a szabványos GCC eszközkészlet használható lesz Rust programok fordítására anélkül, hogy telepíteni kellene az LLVM fejlesztésekkel épített rustc fordítót. A GCC 13 Rust implementációja béta állapotú lesz, alapértelmezés szerint nincs engedélyezve.
Forrás: opennet.ru