Megjelent a Rust 1.89 programozási nyelv, amelyet a Mozilla projekt alapított, de ma már egy független, nonprofit szervezet, a Rust Foundation védnöksége alatt fejlődik. A nyelv a memória biztonságos kezelésére összpontosít, és lehetőséget biztosít a feladatok magas fokú párhuzamosságának elérésére, mindezt anélkül, hogy szemétgyűjtőt vagy futási időt (runtime) igényelne, a futási idő csupán az alapvető inicializálásra és a standard könyvtár karbantartására 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:
- Lehetőség nyílt a „_” karakter használatára az általános paraméterek konstans jelzésű argumentumaként, lehetővé téve e paraméterek értékeinek a környezeti kontextus alapján történő meghatározását. pub fn all_false() -> [bool; LEN] { [false; _] }
- Új lint figyelmeztetés került hozzáadásra: „mismatched_lifetime_syntaxes”, mely a funkciós szignatúrákban a nem nyilvánvaló élettartam-meghatározás problémáját hivatott kezelni az „élettartam elhagyása” mechanizmus használatakor (automatikusan határozza meg a hivatkozások élettartamát, lehetővé téve a kézi megadás elkerülését). A figyelmeztetés ellenőrzi, hogy a funkció belépő és kilépő paraméterei ugyanannak a típuscsoportnak a tagjai-e. A csoportok az élettartam expilitációjára való támogatás és a fordító általi automatikus élettartam-levezethetőség alapján képződnek (például a „&’a T” és „ContainsLifetime” típusokban explicit élettartam állhat fenn, de a fordító nem tudja automatikusan meghatározni az élettartamot; míg a „&T”, „&’_ T” és „ContainsLifetime” típusokban mindkettő megengedett, az explicit megadás és az automatikus meghatározás is).
- Az x86 rendszerek „target_feature” attribútumán belül lehetőség nyílt a sha512, sm3, sm4, kl és widekl kiterjesztett utasításkészleteinek, valamint az avx512 egyes funkcióinak támogatottságának ellenőrzésére. #[target_feature(enable = „avx512bw”)] pub fn cool_simd_code(/* .. */) -> /* … */ { /* … */ }
- Biztosítva lett a doctest (a dokumentációba beágyazott tesztek) futtatása nemcsak a jelenlegi célplatformon, hanem más, a „cargo” csomagkezelő indításánál megadott platformokon is („cargo test --doc --target other_target”).
- A 'extern „C”' funkciók esetében, ha a célplatform „wasm32-unknown-unknown”, a WebAssembly-hez a standard C ABI lett megvalósítva.
- Bizonyos kikötésekkel, amelyek a típusok kompatibilitására vonatkoznak, az i128 és u128 típusok használata megengedett a külső C-függvényekben (extern "C"), amelyeknél korábban lint-figyelmeztetést mutattak a "improper_ctypes_definitions" miatt.
- Ú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:
- Számos beépített függvény (Intrinsics) érhető el az x86 processzorokhoz, beleértve az AVX512, SHA512, SM3 és SM4 függvényeket.
- NonZero
- File::lock
- File::lock_shared
- File::try_lock
- File::try_lock_shared
- File::unlock
- NonNull::from_ref
- NonNull::from_mut
- NonNull::without_provenance
- NonNull::with_exposed_provenance
- NonNull::expose_provenance
- OsString::leak
- PathBuf::leak
- Result::flatten
- std::os::linux::net::TcpStreamExt::quickack
- std::os::linux::net::TcpStreamExt::set_quickack
A «const» jelző alkalmazása a funkciókban:
- ::as_mut_slice
- ::eq_ignore_ascii_case
- str::eq_ignore_ascii_case
- Megkezdődött a "x86_64-apple-darwin" célplatform fordításának érettségi szintjének első szintről második szintre történő áthozatala (az Apple tervezi az x86_64 architektúra támogatásának megszüntetését). Az első szint támogatja a bináris összeszereléseket, alapos tesztelést és a platform legmagasabb szintű támogatásának garantálását - minden összeállítási változtatást teljes tesztcsomag végrehajtásával ellenőriznek. A második szint támogatja az összeállítás garantálását, de nem garantálja a tesztcsomagon való átjutást.
- Megvalósult a „loongarch32-unknown-none” és „loongarch32-unknown-none-softfloat” platformok harmadik szintű támogatása. A harmadik szint alapvető támogatást biztosít, de automatikus tesztelés, hivatalos build publikálás és a kód buildelhetőségének ellenőrzése nélkül.
További megjegyzések a Rusttal kapcsolatos eseményekről és projektekről:
- Megjelent a Rust nyelv állapotáról szóló jelentés a Debianban. Megállapították, hogy a Debian Unstable (Sid) ágon körülbelül 8%-a a main tároló src-csomagjainak legalább egy "librust-*" csomaggal kapcsolatos buildfüggőségeket tartalmaz. A Debian 12-ben hasonló csomagok aránya 4,5% volt. Továbbá megállapítást nyert, hogy több mint 3000 csomag Rust kódot tartalmaz, amelyeket librust-..-dev csomagokba vontak be, míg 150 src-csomag Rustban lefordított futtatható fájlokat vagy könyvtárakat biztosít.
A Debian számára érdekes csomagok között megemlítjük a sudo-rs, ntpd-rs, uutils, Sequoia, rpgp, hickory (DNS), Rustls, rav1d és fish projekteket. Az opcionális Rust támogatás megvalósult az APT, a QEMU (virtiofsd), a Linux kernel és a Mesa környezetében, valamint várakozások szerint a LibreOffice-ban is. A crate-csomagok src-csomagokká történő konvertálásához debcargo eszközöket hoztak létre.
- Bemutatásra került a tmux-rs projekt, amely a tmux terminálmultiplexáló klónját fejleszti, amely C nyelvről Rust nyelvre lett átkonvertálva.
- A Tyr driver developer from Collabora published an article about kernel-level drivers for GPUs and the principles of developing such drivers in Rust.
- A universal application written in Rust was demonstrated, capable of running on both CPU and various GPU platforms: CUDA for NVIDIA, SPIR-V for Vulkan-compatible GPUs, Metal for Apple, DirectX 12 for Windows, and WebGPU for browsers.
Forrás: opennet.ru
