Vydání Rust 1.84. Jádra Tock a Vekos napsaná v Rustu. Dialekt Mini-C

Byla vydána nová verze programovacího jazyka Rust 1.84, původně vyvinutého projektem Mozilla, nyní rozvíjeného pod záštitou nezávislé neziskové organizace Rust Foundation. Jazyk se zaměřuje na bezpečné nakládání s pamětí a poskytuje nástroje pro dosažení vysokého paralelismu při vykonávání úloh, přičemž se obejde bez použití garbage collectoru a runtime (runtime se omezuje na základní inicializaci a správu standardní knihovny).

Metody práce s pamětí v Rustu zbavují vývojáře chyb při manipulaci s ukazateli a chrání před problémy, které vznikají z nízkoúrovňové manipulace s pamětí, jako je přístup k oblasti paměti po jejím uvolnění, dereferencování nulových ukazatelů, přetečení bufferu atd. Pro distribuci knihoven, zajištění sestavení a správu závislostí se vyvíjí balíčkový manažer Cargo. Pro hostování knihoven je k dispozici repozitář crates.io.

Bezpečné manipulace s pamětí jsou v Rustu zajištěny během kompilace prostřednictvím kontroly referencí, sledování vlastnictví objektů, zohlednění doby života objektů (viditelnosti) a hodnocení správnosti přístupu k paměti při vykonávání kódu. Rust také poskytuje prostředky pro ochranu proti přetečení celých čísel, vyžaduje povinnou inicializaci hodnot proměnných před použitím, lépe zpracovává chyby ve standardní knihovně, aplikuje koncept neměnnosti (immutable) referencí a proměnných ve výchozím nastavení a nabízí silnou statickou typizaci pro minimalizaci logických chyb.

Hlavní novinky:

  • V balíčkovém správci Cargo byl stabilizován mechanismus zpracování závislostí, který vybírá verze závislých komponent s ohledem na kompatibilitu s verzemi kompilátorů Rust, které jsou projektovány jako minimálně podporované (MSRV, Minimum Supported Rust Version). Nová funkce umožňuje správcům vyhnout se ručnímu výběru starých verzí jednotlivých závislostí v projektech, které zachovávají kompatibilitu se staršími verzemi nástrojů Rust. Nový režim určování závislostí bude ve verzi Rust 1.85 aktivován jako výchozí, zatímco nyní je k dispozici ve formátu volby, jejíž aktivaci je třeba provést v sekci „[resolver]“ v souboru „.cargo/config.toml“ pomocí parametru ‘incompatible-rust-versions = „fallback“‘.
  • Byl zahájen převod kompilátoru na nový zpracovatel typů (trait solver), určený k testování mezí použitelnosti typů, normalizaci typů a vyhodnocení jejich kompatibility. Ve verzi 1.84 je nový zpracovatel nasazen pro kontrolu konzistence implementací typů, tj. pro hodnocení existence maximálně jednoho typu pro daný typ se zohledněním kódu z jiných balíčků crate. Tato kontrola umožnila zbavit se problémů ve staré implementaci zpracovatele typů, které mohly potenciálně vést k konfliktům v důsledku překrývání různých implementací typů.
  • Byl navržen nový API „Strict Provenance“, který lze použít k převodu ukazatele na celé číslo a zpět, přičemž se zohledňují připojené metadata s informacemi o jeho původu a oblasti použití (k ukazateli je připojena hodnota „provenance“ s informacemi o vazbách na jiné ukazatele, což umožňuje určit, kde a kdy může ukazatel přistupovat k paměti). Při převodu ukazatele na celé číslo a zpět se objevuje nedeterminované chování kvůli problémům s sledováním původu výsledného ukazatele. Nové API umožňuje provádět nízkoúrovňové operace s ukazateli, jako je uchovávání další informace v nižších bitech ukazatele, aniž by došlo k převodu ukazatele na celé číslo.
  • Nová sada API byla převedena do stabilního stavu, včetně stabilizovaných metod a implementací typů:
    • 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
  • Příznak „const“ byl použit ve funkcí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
  • Byla stabilizována podpora in-line assemblerových vložení pro architektury s390x a Arm64EC.
  • Pro cílovou platformu WebAssembly byla stabilizována podpora funkčnosti multivalue, reference-types a tail-call.
  • Byla realizována druhá úroveň podpory platformy wasm32v1-none. Druhá úroveň podpory zaručuje úspěšnou kompilaci.

Dále lze zmínit několik projektů spojených s Rustem:

  • Byl zveřejněn release operačního systému Tock 2.2, napsaného v jazyce Rust a zaměřeného na použití v mikrokontrolerech. Systém umožňuje organizovat souběžné provádění několika nedůvěryhodných aplikací na vestavěných zařízeních, která mají omezenou velikost RAM, jako jsou senzory, TPM (Trusted Platform Module), autentizační klíče a nositelná zařízení. Jsou podporovány platformy s mikrokontroléry založenými na architekturách ARM Cortex-M a RISC-V. Klíčovou vlastností Tock je izolace úrovní aplikací, jádra a vrstvy ovladačů, stejně jako izolace každé aplikace a ovladače zvlášť. Pro izolaci se využívají jak možnosti jazyka Rust, tak dělení na úrovni ochrany paměti.
  • Projekt VEKOS (Verified Experimental Kernel OS) vyvíjí jádro operačního systému v jazyce Rust, které zajišťuje verifikaci prováděných komponentů. Při každé operaci se souborovým systémem, vytváření procesu a alokaci paměti se vytváří kryptografické potvrzení, které umožňuje ověřit operaci během jejího provádění (realizace je srovnatelná s použitím blockchainu pro verifikaci akcí v operačním systému). V souborovém systému VKFS je pro zajištění integrity a ochrany před zpětným zkreslením využita struktura „Merkle Tree“, jejíž každá větev ověřuje všechny podřízené větve a uzly díky stromovému hashování. Alokace paměti se provádí v režimu COW (Copy-On-Write).
  • Skupina výzkumníků z Microsoftu a Inria vyvíjí podmnožinu jazyka C — Mini-C, určenou pro automatický překlad programů v jazyce C do reprezentace v jazyce Rust. Na rozdíl od překladače c2rust nový projekt umožňuje generovat Rust-kód bez použití unsafe, avšak je zaměřen především na převod projektů C, které mají formální důkaz spolehlivosti. Předpokládá se, že bude jednodušší nejprve převést projekt C do reprezentace v Mini-C, ve které nejsou povoleny aritmetické operace s ukazateli, než přepisování unsafe bloků po přímém kompilaci z C do Rust.

    Realizace kompilátoru je založena na nástrojích KaRaMeL. Mini-C byl vyvinut a otestován v rámci projektu přepsání kryptografické knihovny HACL* na Rust, pro kterou bylo poskytnuto formální dokazování spolehlivosti. Takové dokazování bylo použito k prokázání možnosti generovat bezpečný kód na Rust z Mini-C.

  • Daniel Stenberg, autor nástroje curl, oznámil ukončení vývoje a podpory alternativního HTTP backendu vyvinutého pro projekt Curl, napsaného v Rust pomocí knihovny Hyper. Jako důvod bylo uvedeno nedostatek zájmu ze strany vývojářů a uživatelů.
  • Bylo oznámeno beta vydání shellu Fish 4.0, přepsaného v programovacím jazyce Rust. Bylo poznamenáno, že po dvou letech vývoje byla celá kódová základna Fish kompletně převedena z C++ na Rust. Přechod na Rust umožnil vyřešit problémy s vícetečným zpracováním, získat moderní nástroje pro odhalování chyb během kompilace, zvýšit bezpečnost při práci s pamětí a učinit projekt atraktivnějším pro nové vývojáře.
  • Projekt Tor zveřejnil verzi Arti 1.3.2, alternativní implementaci Tor klienta napsanou v programovacím jazyce Rust. Arti poskytuje vestavěnou knihovnu, kterou mohou využívat různá aplikace. Při vytváření Arti bylo zohledněno předchozí zkušenosti se vývojem Tor, aby se předešlo známým architektonickým problémům, učinilo projekt modulárnějším a efektivnějším. Větev 1.x je označena jako vhodná pro běžné uživatele a zaručuje stejnou úroveň soukromí, použitelnosti a stability jako hlavní implementace napsaná v C. V nové verzi pokračuje vývoj RPC, byla započata příprava na implementaci podpory pro relé a byla přidána ochrana proti DoS útokům na Onion služby.
  • Bylo vydáno vydání herního enginu Bevy 0.15, napsaného v Rust. V enginu je použita datově řízená (Data Driven) model pro definici herní logiky, postavený na sadě hotových komponent Bevy ECS (Entity Component System), které mohou běžet paralelně. Podporuje se 2D a 3D vykreslování, kostrová animace, definice grafu vykreslování, systém pro formulaci scén, rámec pro vytváření uživatelského rozhraní a provádění změn ve scénách a zdrojích bez potřeby restartu.
  • Byl zveřejněn konzolový textový editor Helix 25.01, napsaný v Rustu, který rozšiřuje myšlenky zakotvené ve vim a neovim. Podporuje integraci s LSP servery a Tree-sitter, současné zvýraznění několika bloků, používání více kurzorů při úpravách, témata a ladicí protokol DAP (Debug Adapter Protocol).
  • Do prohlížečového enginu Servo, napsaného v Rustu, byla přidána podpora tmavého režimu. Velikost prohlížeče ServoShell byla zmenšena o 20 %. Podpora webových standardů byla rozšířena o možnost přihlášení a čtení zpráv v Discordu (odesílání zpráv zatím není možné).
  • Společnost Mozilla představila nástroj Uniffi for React Native pro vytváření modulů pro React Native v jazyce Rust.
  • Bylo provedeno testování výkonu obrazových kodeků ve formátu PNG. Dekodéry v Rustu (png, zune-png, wuffs) se ukázaly být rychlejší než dekodéry v C (libpng, spng, stb_image). Například crate-paket png (image-rs) překonal libpng v 1.8 násobku na systému x86 a v 1.5 násobku na systému ARM. image-rs: 375.401 MP/s (průměr) 318.632 MP/s (geomean) zune-png: 376.649 MP/s (průměr) 302.529 MP/s (geomean) wuffs: 376.205 MP/s (průměr) 287.181 MP/s (geomean) libpng: 208.906 MP/s (průměr) 173.034 MP/s (geomean) spng: 299.515 MP/s (průměr) 235.495 MP/s (geomean) stb_image: 234.353 MP/s (průměr) 171.505 MP/s (geomean)

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster