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

Bylo zveřejněno vydání univerzálního programovacího jazyka Rust 1.84, založeného projektem Mozilla, ale nyní vyvíjeného pod záštitou nezávislé neziskové organizace Rust Foundation. Jazyk se soustředí na bezpečnost paměti a poskytuje prostředky k dosažení vysokého paralelismu úloh a zároveň se vyhýbá použití garbage collectoru a runtime (runtime je redukováno na základní inicializaci a údržbu standardní knihovny).

Metody zpracování paměti Rust šetří vývojáře před chybami při manipulaci s ukazateli a chrání před problémy, které vznikají v důsledku nízkoúrovňového zpracování paměti, jako je přístup k oblasti paměti po jejím uvolnění, dereferencování nulových ukazatelů, přetečení vyrovnávací paměti atd. Pro distribuci knihoven, poskytování sestavení a správu závislostí projekt vyvíjí správce balíčků Cargo. Úložiště crates.io je podporováno pro hostování knihoven.

Bezpečnost paměti je v Rustu zajištěna v době kompilace prostřednictvím kontroly referencí, sledování vlastnictví objektů, sledování životnosti objektů (rozsahů) a hodnocení správnosti přístupu do paměti během provádění kódu. Rust také poskytuje 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ě, standardně aplikuje koncept neměnných referencí a proměnných, nabízí silné statické typování pro minimalizaci logických chyb.

Hlavní inovace:

  • Správce balíčků Cargo má stabilizovaný mechanismus zpracování závislostí, který vybírá verze závislých komponent s ohledem na kompatibilitu s verzemi kompilátoru Rust deklarovanými jako minimálně podporované projektem (MSRV, Minimum Supported Rust Version). Nová funkce eliminuje potřebu správců ručně vybírat starší verze každé závislosti v projektech, které zůstávají kompatibilní se staršími verzemi sady nástrojů Rust. Nový režim rozlišení závislostí bude ve výchozím nastavení povolen ve verzi Rust 1.85, ale prozatím je k dispozici jako možnost, kterou lze povolit zadáním 'incompatible-rust-versions = " v části "[resolver]" souboru ". cargo/config.toml" soubor. záložní"'.
  • Začali jsme převádět kompilátor na nový typový řešič, určený ke kontrole hranic použitelnosti vlastností, normalizaci typů a vyhodnocení kompatibility typů. Ve verzi 1.84 je pro kontrolu konzistence implementací vlastností použit nový handler, tzn. posouzení existence nejvýše jednoho znaku pro daný typ, přičemž se vezme v úvahu kód z jiných balení přepravek. Tato kontrola nám umožnila zbavit se problémů ve staré implementaci obslužného programu typu, které by mohly potenciálně vést ke konfliktům kvůli průniku různých implementací typů.
  • Bylo navrženo nové API „Strict Provenance“, které lze použít k převodu ukazatele na celé číslo a zpět, přičemž je třeba vzít v úvahu metadata připojená k ukazateli s informacemi o jeho původu a oblasti použití (kromě k adrese je k ukazateli připojena hodnota „provenance“ s informací o spojení s jinými ukazateli, což umožňuje určit, kde a kdy může ukazatel přistupovat do paměti). Při přetypování ukazatele na celé číslo a zpět dochází k nedefinovanému chování kvůli obtížnosti sledování původu výsledného ukazatele. Nové rozhraní API vám umožňuje provádět operace ukazatele na nízké úrovni, jako je ukládání dalších informací do bitů ukazatele nižšího řádu, aniž byste ukazatel přetypovali na celé číslo.
  • Nová část API byla přesunuta do kategorie stabilní, včetně metod a implementací vlastností byly stabilizovány:
    • Ipv6Addr::is_unique_local
    • Ipv6Addr::is_unicast_link_local
    • core::ptr::with_exposed_provenance
    • core::ptr::with_exposed_provenance_mut
    • ::addr
    • ::expose_provenience
    • ::with_addr
    • ::map_addr
    • ::isqrt
    • ::checked_isqrt
    • ::isqrt
    • NonZero::isqrt
    • core::ptr::without_provenance
    • core::ptr::without_provenance_mut
    • jádro::ptr::visící
    • core::ptr::dangling_mut
    • Pin::as_deref_mut
  • Znak „const“ se používá 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
    • ::je_null
    • ::as_ref
    • ::as_mut
    • Pin::nový
    • Pin::new_unchecked
    • Pin::get_ref
    • Pin::into_ref
    • Pin::get_mut
    • Pin::get_unchecked_mut
    • Pin::static_ref
    • Pin::static_mut
  • Podpora inline insertů assembleru pro architektury s390x a Arm64EC byla stabilizována.
  • Pro cílovou platformu WebAssembly byla stabilizována podpora pro vícehodnotové, referenční typy a funkce tail-call.
  • Byla implementována druhá úroveň podpory pro platformu wasm32v1-none. Druhý stupeň podpory zahrnuje záruku montáže.

Kromě toho lze poznamenat několik projektů souvisejících s Rustem:

  • Bylo zveřejněno vydání operačního systému Tock 2.2, napsaného v jazyce Rust a zaměřeného na použití v mikrokontrolérech. Systém umožňuje současné spouštění více nedůvěryhodných aplikací na vestavěných zařízeních s omezenou velikostí RAM, jako jsou senzory, modul TPM (Trusted Platform Module), autentizační klíčenky a nositelná zařízení. Podporovány jsou platformy s mikrokontroléry založenými na architektuře ARM Cortex-M a RISC-V. Klíčovou vlastností Tocku je izolace vrstev aplikace, jádra a ovladačů a také izolace každé aplikace a ovladače zvlášť. Izolace využívá jak schopnosti jazyka Rust, tak separaci 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 ověřování spustitelných komponent. Pro každou operaci souborového systému, vytvoření procesu a alokaci paměti je generován kryptografický důkaz, který umožňuje ověření operace během provádění (implementace je porovnána s použitím blockchainu k ověření akcí v operačním systému). V souborovém systému VKFS se pro zajištění integrity a ochrany před zpětným zkreslením používá struktura „Merkle Tree“, kde každá větev ověřuje všechny základní větve a uzly díky hašování stromu. Alokace paměti se provádí v režimu COW (Copy-On-Write).
  • Skupina výzkumníků ze společností Microsoft a Inria vyvíjí podmnožinu jazyka C, Mini-C, určenou k automatickému překladu programů C do reprezentace Rust. Na rozdíl od kompilátoru c2rust vám nový projekt umožňuje generovat kód Rust bez použití nebezpečného kódu, ale je zaměřen především na převod projektů v jazyce C, které mají formální důkaz spolehlivosti. Důsledkem je, že bude snazší nejprve převést projekt v C na reprezentaci Mini-C, která neumožňuje aritmetiku ukazatele, než přepsat nebezpečné bloky po přímé kompilaci z C do Rust.

    Implementace kompilátoru je založena na sadě nástrojů KaRaMeL. Mini-C bylo vyvinuto a testováno jako součást projektu přepsání kryptografické knihovny HACL* v Rustu, pro kterou byl poskytnut formální důkaz spolehlivosti. Podobný důkaz byl použit k demonstraci schopnosti generovat bezpečný Rust kód z Mini-C.

  • Daniel Stenberg, autor nástroje curl, oznámil, že projekt Curl již nebude vyvíjet a udržovat alternativní HTTP backend napsaný v Rustu pomocí knihovny Hyper. Jako důvod je uváděn nezájem ze strany vývojářů a uživatelů.
  • Byla oznámena beta verze příkazového shellu Fish 4.0, přepsaného v Rustu. Je třeba poznamenat, že po dvou letech vývoje byla kódová základna Fish kompletně převedena z C++ do Rustu. Přechod na Rust nám umožnil vyřešit problémy s multithreadingem, získat moderní nástroje, které detekují chyby ve fázi kompilace, zlepšují bezpečnost paměti a činí projekt atraktivnějším pro nové vývojáře.
  • Projekt Tor zveřejnil vydání Arti 1.3.2, alternativní implementace klienta Tor v Rustu. Arti poskytuje embeddable knihovnu, kterou mohou používat různé aplikace. Při vytváření Arti byly vzaty v úvahu minulé zkušenosti s vývojem Tor, aby se předešlo známým architektonickým problémům a projekt byl modulárnější a efektivnější. Větev 1.x je označena jako vhodná pro běžné uživatele a poskytuje stejnou úroveň soukromí, použitelnosti a stability jako hlavní implementace C. Nová verze pokračuje ve vývoji RPC, byly provedeny přípravy na implementaci reléové podpory a byla přidána ochrana proti DoS útokům na služby Onion.
  • Vydání herního enginu Bevy 0.15 napsaného v Rustu bylo zveřejněno. Engine používá Data Driven model pro definování herní logiky, postavený na sadě hotových komponent Bevy ECS (Entity Component System), které lze spouštět paralelně. Podporuje 2D a 3D vykreslování, skeletální animaci, definici vykreslovacího grafu, systém generování scén, rámec uživatelského rozhraní, provádění změn ve scénách a zdrojích bez nutnosti restartu.
  • Byl publikován konzolový textový editor Helix 25.01, napsaný v Rustu a rozšiřuje myšlenky obsažené ve vim a neovim. Podporuje integraci se servery LSP a Tree-sitter, současný výběr několika bloků, použití více kurzorů při úpravách, motivy a protokol ladění DAP (Debug Adapter Protocol).
  • Prohlížeč Servo, napsaný v Rustu, přidal podporu pro režim tmavého designu. Velikost prohlížeče ServoShell byla zmenšena o 20 %. Podpora webových specifikací byla rozšířena o možnost přihlášení a čtení zpráv v Discordu (zasílání zpráv zatím není možné).
  • Mozilla představila sadu nástrojů Uniffi for React Native pro vytváření modulů pro React Native v jazyce Rust.
  • Byl testován výkon kodérů obrázků PNG. Dekodéry Rust (png, zune-png, wuffs) se ukázaly být rychlejší než dekodéry C (libpng, spng, stb_image). Například balíček crate png (image-rs) překonal libpng 1.8krát na systému x86 a 1.5krát 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) MP/s (průměr) geomean) libpng: 287.181 MP/s (průměr) 208.906 MP/s (geomean) spng: 173.034 MP/s (průměr) 299.515 MP/s (geomean) stb_image: 235.495 MP/s (průměr) MP/s (průměr) 234.353.

Zdroj: opennet.ru

Přidat komentář