Rust 1.84 kiadás. Tock és Vekos magok, Rust nyelven írva. Mini-C dialektus.

Megjelent a Rust 1.84 általános célú programozási nyelv, amelyet a Mozilla projektje alapozott meg, de ma már egy független, nonprofit szervezet, a Rust Foundation irányítása alatt fejlődik. A nyelv a memória biztonságos kezelésére összpontosít, és eszközöket biztosít a feladatok magas fokú párhuzamos végrehajtásához, mindezt a szemétgyűjtő és futásidejű környezet (runtime) nélkül, amely csupán az alapvető inicializálásra és a standard könyvtárak kíséré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:

  • A Cargo csomagkezelőben stabilizálták a függőségkezelési mechanizmust, amely a Rust fordító által megadott minimálisan támogatott verziókkal (MSRV, Minimum Supported Rust Version) összhangban választja ki a függő komponensek verzióit. Az új lehetőség lehetővé teszi a karbantartók számára, hogy elkerüljék a régi verziók manuális kiválasztását a Rust eszközkészletével kompatibilis projektekben. Az új függőségmeghatározási mód alapértelmezetten az 1.85-ös Rust kiadásban lesz elérhető, jelenleg viszont opcióként érhető el, amelyet a „[resolver]” szekcióban a „.cargo/config.toml” fájlban az ‘incompatible-rust-versions = „fallback”‘ megadásával lehet aktiválni.
  • Megkezdődött a fordító áttérése egy új típuskezelő (trait solver) rendszerekre, amely a típusok alkalmazhatóságának határainak ellenőrzésére, a típusok normalizálására és a típusok kompatibilitásának értékelésére szolgál. Az 1.84-es verzióban az új kezelőt a típusok megvalósításainak összhangjának ellenőrzésére alkalmazzák, azaz annak értékelésére, hogy egy típushoz nem létezik-e több mint egy típuselmélet a más crate-csomagokból származó kód figyelembevételével. Ez az ellenőrzés megszüntette a régi típuskezelő megvalósításával kapcsolatos problémákat, amelyek potenciálisan konfliktusokhoz vezethettek a különböző típuselméletek átfedése miatt.
  • Javascripten alapuló "Strict Provenance" API került bevezetésre, amely lehetővé teszi mutatók egész számra alakítását és vissza, figyelembe véve a mutatóhoz kapcsolódó metaadatokat, amelyek információkat tartalmaznak a származásáról és használati területéről (a mutatóhoz csatolt "provenance" érték információkat hordoz más mutatókkal való kapcsolatról, amely lehetővé teszi annak meghatározását, hogy a mutató mikor és hol elérheti a memóriát). A mutató egész számra alakításakor és visszaalakításakor meghatározatlan viselkedés léphet fel, mivel problémás nyomon követni a kapott mutató származását. Az új API alacsony szintű mutatókkal végzett műveletek végrehajtására szolgál, mint például további információk mentése a mutató alsó bitekbe, anélkül, hogy a mutatót egész számra kellene alakítani.
  • Ú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:
    • Ipv6Addr::is_unique_local
    • Ipv6Addr::is_unicast_link_local
    • core::ptr::with_exposed_provenance
    • core::ptr::with_exposed_provenance_mut
    • ::addr
    • ::expose_provenance
    • ::with_addr
    • ::map_addr
    • ::isqrt
    • ::checked_isqrt
    • ::isqrt
    • NonZero::isqrt
    • core::ptr::without_provenance
    • core::ptr::without_provenance_mut
    • core::ptr::dangling
    • core::ptr::dangling_mut
    • Pin::as_deref_mut
  • A «const» jelző alkalmazása a funkciókban:
    • AtomicBool::from_ptr
    • AtomicPtr::from_ptr
    • AtomicU8::from_ptr
    • AtomicU16::from_ptr
    • AtomicU32::from_ptr
    • AtomicU64::from_ptr
    • AtomicUsize::from_ptr
    • AtomicI8::from_ptr
    • AtomicI16::from_ptr
    • AtomicI32::from_ptr
    • AtomicI64::from_ptr
    • AtomicIsize::from_ptr
    • ::is_null
    • ::as_ref
    • ::as_mut
    • Pin::new
    • Pin::new_unchecked
    • Pin::get_ref
    • Pin::into_ref
    • Pin::get_mut
    • Pin::get_unchecked_mut
    • Pin::static_ref
    • Pin::static_mut
  • Stabilizálva lett az inline assembler beillesztések támogatása s390x és Arm64EC architektúrákhoz.
  • A WebAssembly célplatformon stabilizálva lett a multivalue, reference-types és tail-call funkciók támogatása.
  • A wasm32v1-none platform második szintű támogatását valósították meg. A második szintű támogatás a fordítási garanciát jelenti.

Továbbá megemelhető néhány, a Rusttal kapcsolatos projekt is:

  • Megjelent a Tock 2.2 operációs rendszer, amely Rust nyelven készült, és mikrovezérlők használatára lett optimalizálva. A rendszer lehetővé teszi az egyidejű végrehajtást több megbízhatatlan alkalmazás esetén beágyazott eszközökön, amelyek korlátozott RAM mérettel rendelkeznek, mint például érzékelők, TPM (Trusted Platform Module), hitelesítő kulcsok és hordható eszközök. Támogatja az ARM Cortex-M és RISC-V architektúrájával rendelkező mikrovezérlőket. A Tock kulcsfontosságú jellemzője az alkalmazási, kernel- és illesztőprogram szintek elkülönítése, valamint az egyes alkalmazások és illesztőprogramok külön izolálása. Az izoláció a Rust nyelv lehetőségeit és a memória védelmi szintjei alapján történik.
  • A VEKOS (Verified Experimental Kernel OS) projekt Rust nyelven fejleszti az operációs rendszer kerneljét, amely biztosítja a végrehajtott komponensek ellenőrzését. Minden fájlrendszeri művelet, folyamat létrehozása és memóriafoglalás során kriptográfiai megerősítés keletkezik, amely lehetővé teszi a művelet végrehajtás közbeni ellenőrzését (a megvalósítás az operációs rendszerben végzett tevékenységek ellenőrzésére alkalmazott blokklánccal hasonlítható össze). A VKFS fájlrendszer a biztonság és a visszamenőleges manipuláció ellen a Merkle-fa struktúrát használja, ahol minden ág ellenőrzi az alatta lévő ágakat és csomópontokat a fára kiterjedő hash-eléssel. A memóriafoglalás Copy-On-Write (COW) módban történik.
  • A Microsoft és az Inria kutatói a C nyelv egy alnyelvét, a Mini-C-t fejlesztik, amely lehetővé teszi a C nyelvű programok automatikus átkonvertálását Rust nyelvű reprezentációra. A c2rust fordítótól eltérően az új projekt lehetővé teszi a Rust kód generálását unsafe használata nélkül, de elsősorban olyan C projektek átalakítására összpontosít, amelyek rendelkeznek a megbízhatóság formális bizonyítékával. Feltételezhető, hogy könnyebb először a C projektet Mini-C reprezentációra fordítani, amely nem engedélyezi az mutatókkal végzett aritmetikai műveleteket, mint az unsafe blokkok átírása közvetlen C-ből Rustba való fordítás után.

    A fordítóprogram megvalósítása a KaRaMeL eszközkészletén alapul. A Mini-C a HACL* kriptográfiai könyvtár Rust nyelvre történő átírásának keretében készült, amelyhez formális megbízhatósági bizonyítékot is szolgáltattak. Ezt a bizonyítékot arra használták, hogy bemutassák, a Mini-C-ből biztonságos kódot lehet generálni Rust nyelven.

  • Daniel Stenberg, a curl segédprogram szerzője bejelentette, hogy leállítja a Curl alternatív HTTP hátsó végének Rust nyelven történő fejlesztését és támogatását, amely a Hyper könyvtárat használta. Az okként a fejlesztők és felhasználók érdeklődésének hiányát jelölték meg.
  • Bejelentették a Fish 4.0 parancssori felület bétaverzióját, amelyet Rust nyelvre írtak át. Megjegyzendő, hogy két év fejlesztés után a Fish kódalapja teljesen átkerült a C++-ról Rust nyelvre. A Rust-ra való átállás megoldotta a többszálúsággal kapcsolatos problémákat, modern eszközöket biztosított a fordítási hibák kimutatására, javította a memória kezelésének biztonságát, és vonzóbbá tette a projektet az új fejlesztők számára.
  • A Tor projekt közzétette az Arti 1.3.2 kiadását, a Tor kliens alternatív megvalósítását Rust nyelven. Az Arti beágyazható könyvtárat kínál, amelyet különböző alkalmazások is használhatnak. Az Arti elkészítése során figyelembe vették a Tor fejlesztésének korábbi tapasztalatait, hogy elkerüljék a jól ismert architekturális problémákat, modulárisabbá és hatékonyabbá tegyék a projektet. Az 1.x ág alkalmasnak lett nyilvánítva a szokásos felhasználók számára, és ugyanolyan szintű adatvédelmet, használhatóságot és stabilitást nyújt, mint a fő C nyelven írt megvalósítás. Az új verzióban folytatódott az RPC fejlesztése, felkészültek a kapcsolók támogatására, és védelmet adtak a DoS-támadások ellen az Onion-szolgáltatások számára.
  • Megjelent a Bevy 0.15 játékmotor Rust nyelven írt verziója. A motor egy adatalapú (Data Driven) megközelítést alkalmaz a játékmenet meghatározására, amely a Bevy ECS (Entity Component System) kész elemeire épül, melyek párhuzamosan végrehajthatók. Támogatott a 2D és 3D renderelés, a csontváz animáció, a renderelési grafikus rendszer meghatározása, a színpadi rendszer, egy felhasználói felület létrehozására szolgáló keretrendszer, és a színpadok és erőforrások szerkesztése újraindítás nélkül.
  • Megjelent a Helix 25.01 konzolos szövegszerkesztő, amely Rust nyelven készült, és a vim és neovim által bevezetett ötleteket bővíti. Támogatja az LSP-szerverekkel való integrációt és a Tree-sittert, lehetővé teszi több blokk egyidejű kijelölését, több kurzor használatát szerkesztés közben, valamint a téma beállításait és a DAP (Debug Adapter Protocol) hibakeresési protokollt.
  • A Rust nyelven írt Servo böngészőmotorba hozzáadták a sötét téma támogatását. A ServoShell böngésző mérete 20%-kal csökkent. A web-specifikációk támogatása kiterjedt a Discord üzenetek küldésének és olvasásának lehetőségére (üzenetküldés jelenleg még nem lehetséges).
  • A Mozilla bemutatta az Uniffi for React Native eszközt, amely lehetővé teszi Rust nyelven készült modulok létrehozását a React Native számára.
  • Tesztelték a PNG formátumú képek kódolóinak teljesítményét. A Rust nyelvű dekódolók (png, zune-png, wuffs) gyorsabbak voltak, mint a C nyelvűek (libpng, spng, stb_image). Például a png crate csomag (image-rs) 1,8-szor gyorsabb volt a libpng-nél az x86 rendszeren, és 1,5-ször gyorsabb az ARM rendszeren. image-rs: 375.401 MP/s (átlag) 318.632 MP/s (geomean) zune-png: 376.649 MP/s (átlag) 302.529 MP/s (geomean) wuffs: 376.205 MP/s (átlag) 287.181 MP/s (geomean) libpng: 208.906 MP/s (átlag) 173.034 MP/s (geomean) spng: 299.515 MP/s (átlag) 235.495 MP/s (geomean) stb_image: 234.353 MP/s (átlag) 171.505 MP/s (geomean)

Forrás: opennet.ru

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster