Megjelent a Rust 1.92 programozási nyelv, amelyet a Mozilla projekt alapított, de ma már egy független, nonprofit szervezet, a Rust Foundation felügyelete alatt fejlődik. A nyelv a memória biztonságos kezelésére összpontosít, és eszközöket biztosít a feladatok magas párhuzamú végrehajtásához, mindezt anélkül, hogy hulladékgyűjtőt vagy futási időt (a futási idő alapvető inicializálásra és a standard könyvtár kísérésére korlátozódik) használnának.
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:
- Folyamatban van a «never» típus stabilizálása, amelyet a «!» szimbólum jelöl, és olyan számításokat határoz meg, amelyek soha nem adnak vissza értéket (például a «exits» függvény, a «panic!» makró és a végtelen ciklusok soha nem adják vissza az irányítást). Az új verzióban a «never_type_fallback_flowing_into_unsafe» és «dependency_on_unit_never_type_fallback» lint-ellenőrzések alapértelmezés szerint figyelmeztetések kiadása helyett fordítási hibák generálására váltottak. Ezek az ellenőrzések aktiválódnak, ha problémák merülnek fel a kódban, amikor a «never» típus használatára kerül sor.
Előzetes becslések szerint hasonló problémák körülbelül 500 crate csomagban fordulnak elő. A lint-ellenőrzések bekapcsolása lehetővé teszi, hogy felkészüljünk a «never» típus stabilizálására, amely egyelőre a kísérleti lehetőségek közé tartozik. A lint-ellenőrzések csak közvetlen csomaggyűjtés során lépnek működésbe, és nem jelentkeznek a függőségek gyűjtésekor. Az ellenőrzéseket a «#[allow]» attribútumon keresztül is lehet tiltan.
- Megváltozott a «unused_must_use» lint-ellenőrzés viselkedése, amely a függvény visszaadott értékének figyelmen kívül hagyásakor lép működésbe, ha a függvény vagy a visszaadott típus a «#[must_use]» attribútummal van megjelölve. Az új verzióban a figyelmeztetések megszűntek a «Result» és «ControlFlow» típusú visszaadott értékek figyelmen kívül hagyásakor, ahol a hibaállapot típus értékek nélküli (például «!» vagy «Infallible»). Például: «fn can_never_fail() -> Result {…}».
- Megváltozott a «-Cpanic=abort» jelző viselkedése, amelynek megadásakor alapértelmezés szerint bekapcsolódik a visszahívási nyomkövetés (backtrace) végrehajtásához szükséges unwind-táblák generálása. A régi viselkedés visszaállítására a «-Cforce-unwind-tables=no» opció áll rendelkezésre.
- Megszigorították a «#[macro_export]» attribútum argumentumainak ellenőrzését. Érvénytelen attribútumok megadása esetén mostantól hibaüzenet jelenik meg, nem figyelmeztetés. A «#[macro_export]»-dal kapcsolatos problémákat nemcsak a crate csomag közvetlen összeállításakor, hanem a függőségek összeállításakor is ellenőrizni fogják.
- A safe-kódban engedélyezett a raw mutatók („&raw [mut | const]”) megszerzése union típusokban.
- A célplatformra, a mips64el-unknown-linux-muslabi64-re megvalósult a dinamikus kötés támogatása.
- A minimálisan támogatott LLVM külső eszközkészlet verziója a LLVM 20 ágáig emelkedett.
- Ú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:
- NonZero::div_ceil
- Location::file_as_c_str
- RwLockWriteGuard::downgrade
- Box::new_zeroed
- Box::new_zeroed_slice
- Rc::new_zeroed
- Rc::new_zeroed_slice
- Arc::new_zeroed
- Arc::new_zeroed_slice
- btree_map::Entry::insert_entry
- btree_map::VacantEntry::insert_entry
- impl Extend for proc_macro::TokenStream
- impl Extend for proc_macro::TokenStream
- impl Extend for proc_macro::TokenStream
- impl Extend for proc_macro::TokenStream
- A «const» jelző alkalmazása a funkciókban:
- ::rotate_left
- ::rotate_right
- A Cargo csomagkezelőben biztosítva van a „git fetch” művelet megismétlése az első lekérés végrehajtásának hibája esetén. Hozzáadott komponensek az Ghostty terminálemulátorral való integrációhoz. Új fejezet került a kézikönyvbe, amely az építési folyamat optimalizálásáról szól.
Érdemes megemlíteni a Rust-tal kapcsolatos, nemrégiben bejelentett projekteket és eseményeket:
- A Ferrocene bejelentette, hogy átvette az IEC 61508 (SIL 2) tanúsítványt a libcore könyvtár számára, amely a Rust standard könyvtárának hívásainak egy részhalmazát tartalmazza. A tanúsítvány megerősíti, hogy a könyvtár megfelel a kritikus ipari rendszerek követelményeinek. A Ferrocene a biztonságkritikus rendszerek fejlesztésére szolgáló eszközkészletek létrehozásáról és a Rust nyelv specifikációjának (Ferrocene Language Specification) fenntartásáról ismert.
- Megjelent az Iced 0.14 könyvtár kiadása, amely grafikus felhasználói felületek készítésére szolgál reakciós programozási modellel. Az Iced egy olyan architektúrával rendelkezik, amely ismerős a deklaratív felülettervezéssel foglalkozó fejlesztők számára, mint például az Elm. Kész, testreszabható widgetek halmaza elérhető aszinkron kezelők készítésére és a felhasználói felület elemeinek adaptív elrendezésére az ablak és a képernyő mérete alapján. Számos renderelő motor elérhető, amelyek támogatják a Vulkan, Metal és DX12 technológiákat. A nagyobb projektek közül, amelyek az Icedet használják, megemlíthető a COSMIC asztali környezet.
Az új verzióban bevezetésre kerültek a nézetek, mint a „table”, „grid”, „sensor”, „float” és „pin”, valamint bővült a Markdown formátumban való munkavégzés lehetősége. Megvalósításra került: reaktív megjelenítési mód; szükség esetén megjelenő görgetősávok; API az animációk kezeléséhez; bemeneti módszerek támogatása; headless mód; a módosítások végrehajtásának lehetősége az alkalmazás leállítása nélkül (hot reloading); képek dekódolásának párhuzamosítása; teljesítményprofilozó és hibakereső eszközök.
- A Ribir projekt egy olyan könyvtárat fejleszt, amely lehetővé teszi többplatformos grafikus alkalmazások létrehozását, így egy közös kódbázist használhatunk különböző platformok (Linux, Windows, macOS, tervezett Android és iOS) grafikus alkalmazásainak formálásához. Elérhetők deklaratív felületépítési nyelv Rust makrókra alapozva, több mint 20 widget, téma és a wgpu alapú renderelés.
- Bemutatták az Island nevű segédprogramot, amely az alkalmazások elszigetelt futtatására szolgál. A sandbox-elszigeteléshez a Landlock mechanizmus került bevetésre. Az Island lehetőséget ad arra, hogy TOML formátumban szabályokat hozzunk létre, és alkalmazzuk azokat a Landlock keretein belül meglévő futtatható fájlok elszigetelésére anélkül, hogy módosítanunk kellene a kódot. A Firejail-lal ellentétben az Island segédprogram nem igényel root jogosultságokat és különleges jogosultságokat.
- A Google bemutatta a Rust nyelven írt Wasefire eszközkészletet biztonságos firmware-ek fejlesztéséhez. Az alapötlet, hogy az firmware (platform) alapvető környezete fölött külön elszigetelt feldolgozókat (appleteket) indítsanak. A firmware fejlesztése nem kötődik programozási nyelvekhez – a firmware komponensek WebAssembly formában, WASI (WebAssembly System Interface) kiterjesztésekkel szállíthatók és a Wasmtime segítségével futtathatók.
- Megjelent a Patina 18 UEFI firmware, amely Rust nyelven készült. A Patina helyettesíti az UEFI firmware alapvető komponenseit, és fokozatosan használható a C nyelven írt meglévő firmware-ek Rust nyelvre történő áttérésére.
- A Brimstone projekt egy új JavaScript motor fejlesztésén dolgozik, amelyet teljesen Rust nyelven alapítottak. Jelenlegi állapotában az ECMAScript 2026 lehetőségeinek több mint 97%-át támogatja. A bájtcode végrehajtásához létrehozott virtuális gép a V8 motor architektúrájára tekintettel készült.
- A Catten projekt egy CharlotteOS kísérleti operációs rendszerhez készült kernelt fejleszt, amely Rust nyelven íródott. A kernel támogatja a "capability" alapú hozzáférés-vezérlést (a Fuchsia-hoz hasonlóan), és egy Plan 9-hez hasonló, elosztott erőforrás-hierarchiát használ, amely fájlútvonalak URI-alapú címzésével működik.
- Megjelent a Fish 4.2.0 interaktív parancssori héj (friendly interactive shell). A 4.x ág kitüntetett figyelmet kapott a teljes kódalap C++-ról Rustra történő átkonvertálásával.
- A Cloudflare publikálta a tokio-quiche Rust könyvtár kódját, amely a QUIC és HTTP/3 protokollok támogatását biztosítja a Tokio keretrendszeren alapuló aszinkron alkalmazások számára.
- A Tor projekt kiadta az Arti 1.7 és 1.8 verzióit, a Rust nyelven írt Tor eszközkészlet megvalósítását. Amikor az Arti kódja elér egy olyan szintet, amely teljesen helyettesíti a C verziót, a Tor fejlesztői Az Arti-t a Tor fő megvalósításává kívánják tenni, és fokozatosan leállítják a C megvalósítás támogatását.
Az új verzió stabilizálta a korlátozott onion-szolgáltatások megvalósítását, amely kliens-engedélyezést használ ("restricted-discovery"). A SOCKS proxy mellett HTTP-proxy támogatás is került hozzáadásra a CONNECT módszerrel. Megvalósították az adaptív időkorlát-beállítást a terhelés függvényében. Kísérleti tokio-console támogatás is bevezetésre került. Folytatódott a relay-ek és szerverek dir directory (Directory Authority) fejlesztése. Hozzáadva az "arti hsc ctor-migrate" parancs a kulcsok átvitelére a C kliensből az Arti kulcstárába. Beállítások kerültek hozzáadásra az onion-szolgáltatások indításának kezelésére.
- Megjelent a RustDB, egy Rust nyelven készült adatbázis, amely a PostgreSQL ihletésével készült. Támogatja az alapvető SQL műveleteket (CREATE/DROP TABLE/VIEW, INSERT, SELECT, UPDATE, DELETE, SHOW TABLES, EXPLAIN, VACUUM), tranzakciókat, MVCC-t, WAL-t (Write-Ahead Log), indexeket, PostgreSQL-kompatibilis protokollal való kapcsolódást. A RustDB fejlesztése során mesterséges intelligenciát használtak.
Forrás: opennet.ru
