Bol spustený vydanie programovacieho jazyka Rust 1.84, pôvodne vyvinutého projektom Mozilla, ktorý je však teraz rozvíjaný pod záštitou neziskovej organizácie Rust Foundation. Jazyk sa zameriava na bezpečnú manipuláciu s pamäťou a poskytuje prostriedky na dosiahnutie vysokého paralelizmu vykonávania úloh, pričom sa zaobíde bez použitia garbage collector a runtime (runtime sa obmedzuje na základnú inicializáciu a údržbu štandardnej knižnice).
Metódy práce s pamäťou v Rust zbavujú vývojára chýb pri manipulácii s ukazovateľmi a chránia pred problémami, ktoré vznikajú z nízkoúrovňovej práce s pamäťou, ako je prístup do oblasti pamäte po jej uvoľnení, dereferencovanie nulových ukazovateľov, prekročenie hraníc bufra atď. Na distribúciu knižníc, zabezpečenie zostavy a správu závislostí sa vyvíja balíčkový manažér Cargo. Pre umiestnenie knižníc sa podporuje repozitár crates.io.
Bezpečné zaobchádzanie s pamäťou je v Rust zabezpečené už pri kompilácii prostredníctvom kontroly odkazov, sledovania vlastníctva objektov, zohľadňovania životnosti objektov (rozsah viditeľnosti) a posudzovania správnosti prístupu k pamäti počas vykonávania kódu. Rust tiež poskytuje prostriedky na ochranu pred celočíselnými pretečeniami, vyžaduje povinnú inicializáciu hodnôt premenných pred použitím, lepšie spracováva chyby v štandardnej knižnici, aplikuje koncept nemennosti (immutable) odkazov a premenných ako predvolené a ponúka silnú statickú typizáciu na minimalizáciu logických chýb.
Hlavné novinky:
- V balíkovom manažéri Cargo bol stabilizovaný mechanizmus správy závislostí, ktorý vyberá verzie závislých komponentov so zohľadnením kompatibility s verziami kompilátora Rust, označenými ako minimálne podporované projektom (MSRV, Minimum Supported Rust Version). Nová funkcia umožňuje uvoľniť správcov od potreby ručne vyberať staré verzie každej závislosti v projektoch, ktoré si zachovávajú kompatibilitu so staršími verziami nástrojov Rust. Nový režim určovania závislostí bude predvolene aktivovaný vo vydaní Rust 1.85, zatiaľ je dostupný vo formáte voľby, ktorú treba aktivovať v sekcii „[resolver]“ v súbore „.cargo/config.toml“ s uvedením ‘incompatible-rust-versions = „fallback“‘.
- Začal sa prechod kompilátora na nový spracovateľ typov (trait solver), určený na kontrolu rozsahu použiteľnosti typov, normalizáciu typov a vyhodnocovanie kompatibility typov. V verzii 1.84 je nový spracovateľ použitý na kontrolu konzistencie implementácií typov, t.j. vyhodnocovanie existencie najviac jedného typu pre zohľadnený typ s zohľadnením kódu z iných crate balíkov. Uvedená kontrola umožnila zbaviť sa problémov v starom spracovateľovi typov, ktoré potenciálne mohli viesť k vzniku konfliktov v dôsledku prekrývania rôznych implementácií typov.
- Bol zavedený nový API „Strict Provenance“, ktorý možno použiť na prevod ukazovateľa na celé číslo a späť, pričom sa zohľadňujú pripojené metadáta obsahujúce informácie o jeho pôvode a oblasti použitia (k ukazovateľu je navyše pripojená hodnota „provenance“ s informáciami o vzťahu k iným ukazovateľom, čo umožňuje určiť, kde a kedy môže ukazovateľ odkazovať na pamäť). Pri prevode ukazovateľa na celé číslo a späť dochádza k neurčitému správaniu kvôli problémom s sledovaním pôvodu výsledného ukazovateľa. Nový API umožňuje vykonávať nízkoúrovňové operácie s ukazovateľmi, ako je uchovávanie dodatočných informácií v nižších bitoch ukazovateľa bez prevodu ukazovateľa na celé číslo.
- Do oblasti stabilných bol prenesený nový balík API, vrátane stabilizovaných metód a implementácií traitov:
- 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
- Príznak „const“ bol použitý v funkciách:
- 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
- Stabilizovala sa podpora inline assemblerov pre architektúry s390x a Arm64EC.
- Pre cieľovú platformu WebAssembly sa stabilizovala podpora funkčnosti multivalue, reference-types a tail-call.
- Bol implementovaný druhý stupeň podpory pre platformu wasm32v1-none. Druhý stupeň podpory zahŕňa záruku zostavenia.
Ďalej je možné uviesť niekoľko projektov súvisiacich s Rust:
- Bol si vydaný nový release operačného systému Tock 2.2, napísaného v jazyku Rust a zameraného na používanie v mikrokontroléroch. Systém umožňuje simultánne vykonávanie viacerých nedôveryhodných aplikácií na zabudovaných zariadeniach s obmedzenou RAM, ako sú snímače, TPM (Trusted Platform Module), autentifikačné kľúče a nositeľné zariadenia. Podporované sú platformy s mikrokontrolérmi na báze architektúr ARM Cortex-M a RISC-V. Kľúčovou vlastnosťou Tock je izolácia úrovní aplikácií, jadra a ovládačov, ako aj izolácia každej aplikácie a ovládača samostatne. Na izoláciu sa využívajú možnosti jazyka Rust a rozdelenie na úrovni ochrany pamäte.
- Projekt VEKOS (Verified Experimental Kernel OS) rozvíja jadro operačného systému na jazyku Rust, ktoré zabezpečuje verifikáciu vykonávaných komponentov. Pri každej operácii so súborovým systémom, pri vytváraní procesu a prideľovaní pamäte sa vytvára kryptografické potvrdenie, ktoré umožňuje verifikáciu operácie počas vykonávania (implementácia sa porovnáva s použitím blockchainu na verifikáciu akcií v operačnom systéme). Vo súborovom systéme VKFS sa na zabezpečenie integrity a ochranu proti manipulácii spätne využíva štruktúra „Merkleho strom“ (Merkle Tree), kde každá vetva verifikuje všetky podliehajúce vetvy a uzly, vďaka stromovému hashovaniu. Prideľovanie pamäte sa vykonáva v režime COW (Copy-On-Write).
- Skupina výskumníkov z Microsoftu a Inria rozvíja podmnožinu jazyka C — Mini-C, určenú na automatický preklad programov v jazyku C do reprezentácie v jazyku Rust. Na rozdiel od kompilátora c2rust, nový projekt umožňuje generovať Rust-kód bez použitia unsafe, ale je zameraný predovšetkým na transformáciu C-projektov, ktoré majú formálne dôkazovej spoľahlivosti. Predpokladá sa, že bude jednoduchšie najprv preložiť C-projekt do reprezentácie v Mini-C, v ktorej nie sú povolené aritmetické operácie s ukazovateľmi, ako prepisovať unsafe-bloky po priamom kompilácii z C do Rust.
Implementácia kompilátora je založená na nástrojoch KaRaMeL. Mini-C bol vyvinutý a vyskúšaný v rámci projektu prepisovania kryptografickej knižnice HACL* do Rustu, pre ktorú bolo poskytnuté formálne dôkaz o spoľahlivosti. Takýto dôkaz bol použitý na demonštráciu možnosti generovať z Mini-C bezpečný kód v Rust.
- Daniel Stenberg, autor nástroja curl, oznámil ukončenie vývoja a podpory pre projekt Curl – alternatívny HTTP backend, napísaný v Ruste s použitím knižnice Hyper. Ako dôvod uviedol nedostatok záujmu zo strany vývojárov a používateľov.
- Bola ohlásená beta verzia shellu Fish 4.0, prepisovaného v jazyku Rust. Uvádza sa, že po dvoch rokoch vývoja bola kódová báza Fish úplne prevedená z C++ na Rust. Prechod na Rust umožnil riešiť problémy s viacvláknovosťou, získať moderný nástroj na odhaľovanie chýb už počas kompilácie, zvýšiť bezpečnosť pri práci s pamäťou a spraviť projekt atraktívnejším pre nových vývojárov.
- Projekt Tor publikoval vydanie Arti 1.3.2, alternatívnej implementácie Tor klienta v jazyku Rust. Arti poskytuje vkladateľnú knižnicu, ktorú môžu používať rôzne aplikácie. Pri vytváraní Arti sa zohľadnil predchádzajúci skúsenosti z vývoja Tor, aby sa predišlo známym architektonickým problémom, spravilo projekt modulárnejším a efektívnejším. Veta 1.x je označená ako vhodná pre bežných používateľov a zabezpečuje rovnakú úroveň súkromia, použiteľnosti a stability ako základná implementácia v C. V novej verzii pokračuje vývoj RPC, boli vykonané prípravy na implementáciu podpory relayov a bola pridaná ochrana pred DoS útokmi na Onion služby.
- Bol publikovaný release herného enginu Bevy 0.15, napísaného v Ruste. V engine sa uplatňuje dátovo orientovaný model (Data Driven) definovania hernej logiky, postavený nad sadou pripravených komponentov Bevy ECS (Entity Component System), ktoré môžu fungovať paralelne. Podporuje sa 2D a 3D rendering, kostrová animácia, definovanie grafu renderovania, systém formovania scén, rámec na budovanie používateľského rozhrania a zmeny scén a zdrojov bez potreby reštartovania.
- Bol spustený konzolový textový editor Helix 25.01, napísaný v Rust a rozširujúci myšlienky zakotvené vo vim a neovim. Podporuje integráciu s LSP servermi a Tree-sitter, súčasné označovanie viacerých blokov, používanie viacerých kurzorov pri úpravách, témy zobrazenia, debugovací protokol DAP (Debug Adapter Protocol).
- Do prehliadačového enginu Servo, napísaného v Rust, bola pridaná podpora tmavého režimu zobrazenia. Veľkosť prehliadača ServoShell bola znížená o 20 %. Podpora webových špecifikácií bola rozšírená o možnosť prihlásenia a čítania správ v Discorde (zatiaľ nie je možné odosielať správy).
- Spoločnosť Mozilla predstavila nástroj Uniffi pre React Native na vytváranie modulov pre React Native v jazyku Rust.
- Bol vykonaný test výkonu kodérov obrázkov vo formáte PNG. Dekodéry napísané v Rust (png, zune-png, wuffs) sa ukázali byť rýchlejšie ako dekodéry napísané v C (libpng, spng, stb_image). Napríklad crate balík png (image-rs) prekonal libpng 1,8-krát na systéme x86 a 1,5-krát na systéme ARM. image-rs: 375.401 MP/s (priemer) 318.632 MP/s (geomean) zune-png: 376.649 MP/s (priemer) 302.529 MP/s (geomean) wuffs: 376.205 MP/s (priemer) 287.181 MP/s (geomean) libpng: 208.906 MP/s (priemer) 173.034 MP/s (geomean) spng: 299.515 MP/s (priemer) 235.495 MP/s (geomean) stb_image: 234.353 MP/s (priemer) 171.505 MP/s (geomean)
Zdroj: opennet.ru
