Vydání Rust 1.92. Rust projekty pro GUI, sandboxovou izolaci a vytváření firmware

Byl zveřejněn nový jazyk programování Rust 1.92, který byl původně vyvinut projektem Mozilla, ale nyní je rozvíjen pod záštitou nezávislé neziskové organizace Rust Foundation. Jazyk je zaměřen na bezpečné zacházení s pamětí a poskytuje prostředky pro dosažení vysokého paralelismu vykonávání úloh, a to vše bez použití garbage collectoru a runtime (runtime se omezuje na základní inicializaci a podporu 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:

  • Pokračuje stabilizace typu „never“, označovaného symbolem „!“, který určuje výpočty, které nikdy nevracejí hodnoty (například funkce „exits“, makro „panic!“ a nekonečné cykly nikdy nevracejí kontrolu). V nové verzi lintování byly kontroly „never_type_fallback_flowing_into_unsafe“ a „dependency_on_unit_never_type_fallback“ ve výchozím nastavení přepnuty z výstupu varování na generaci chyb při kompilaci. Tyto kontroly se spustí při výskytu problémů v kódu, které se projevují při použití typu „never“.

    Podle předběžných odhadů mají podobné problémy přibližně 500 crate balíčků. Zapnutí lintových kontrol umožní připravit se na stabilizaci typu „never“, který je zatím klasifikován jako experimentální funkce. Lintové kontroly fungují pouze při přímém sestavení balíčků a neprojevují se při sestavování závislostí. Kontroly mohou být také vypnuty pomocí atributu „#[allow]“.

  • Bylo změněno chování lintové kontroly „unused_must_use“, která se spouští při ignorování návratové hodnoty funkce, pokud je funkce nebo návratový typ označen atributem „#[must_use]“. V nové verzi bylo ukončeno výstup varování o ignorování návratových hodnot s typy Result a ControlFlow, kde je stav chyby určen typem bez hodnot („!“ nebo „Infallible“). Například „fn can_never_fail() -> Result {…}“.
  • Bylo změněno chování vlajky „-Cpanic=abort“, při jejímž uvedení se po výchozím nastavení zahrnují unwind tabulky pro provádění zpětného sledování (backtrace). Pro vrácení starého chování je k dispozici možnost „-Cforce-unwind-tables=no“.
  • Byla zpřísněna kontrola argumentů atributu „#[macro_export]“. Při uvedení neplatných atributů se nyní vyprodukuje chyba a nevarování. Problémy s „#[macro_export]“ budou kontrolovány nejen při přímém sestavení crate balíčku, ale také při sestavování závislostí.
  • V safe-kódu je povoleno získávání raw-poukazatelů („&raw [mut | const]“) na pole v union-typech.
  • Pro cílovou platformu mips64el-unknown-linux-muslabi64 byla implementována podpora dynamického vazby.
  • Minimálně podporovaná verze externího nástroje LLVM byla zvýšena na větev LLVM 20.
  • Nová sada API byla převedena do stabilního stavu, včetně stabilizovaných metod a implementací typů:
    • 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
  • Příznak „const“ byl použit ve funkcích:
    • ::rotate_left
    • ::rotate_right
  • V balíčkovém správci Cargo byla zajištěna opakovaná operace „git fetch“ v případě selhání prvního požadavku. Byly přidány komponenty pro integraci s emulátorem terminálu Ghostty. Do příručky byla přidána nová kapitola o optimalizaci procesu sestavení.

Dodatečně lze zmínit nedávno oznámené projekty a akce spojené s Rust:

  • Společnost Ferrocene oznámila úspěšné dokončení certifikace IEC 61508 (SIL 2) pro knihovnu libcore, která zahrnuje podmnožinu volání ze standardní základní knihovny Rust. Certifikace potvrzuje shodu knihovny s požadavky pro kritické průmyslové systémy. Společnost Ferrocene je známá vytvářením nástrojů pro vývoj aplikací v jazyce Rust pro kritické systémy (Safety-Critical Systems) a také udržováním specifikace FLS (Ferrocene Language Specification), na základě které se vyvíjí referenční specifikace jazyka Rust.
  • Byla vydána verze knihovny Iced 0.14 pro vytváření grafických uživatelských rozhraní pomocí modelu reaktivního programování. V Iced byla implementována architektura, která je známá pro vývojáře, kteří znají jazyk deklarativního stavění rozhraní Elm. Nabízí hotovou sadu widgetů s možností vytváření asynchronních zpracovatelů a aplikace adaptivního uspořádání prvků rozhraní v závislosti na velikosti okna a obrazovky. Je poskytnuto několik vykreslovacích motorů, které podporují Vulkan, Metal a DX12. Mezi většími projekty, které využívají Iced, můžeme zmínit desktopové prostředí COSMIC.

    V nové verzi byly přidány widgety „table“, „grid“, „sensor“, „float“ a „pin“, a také byly rozšířeny možnosti widgetu pro práci s markupem Markdown. Implementovány byly: reaktivní vykreslovací režim; objevující se pokud je to nutné posuvné lišty; API pro práci s animacemi; podpora vstupních metod; headless režim; možnost provádění změn bez zastavení aplikace (hot reloading); paralelní dekódování obrázků; nástroje pro ladění a profilování výkonu.

  • Projekt Ribir rozvíjí knihovnu pro vytváření multiplatformních aplikací s grafickým uživatelským rozhraním, která umožňuje používat jednu společnou kódovou základnu aplikace k vytváření grafických aplikací pro různé platformy (Linux, Windows, macOS, plánováno pro Android a iOS). K dispozici je deklarativní jazyk pro konstrukci rozhraní založený na Rust makrech, více než 20 widgetů, motivy a renderování založené na wgpu.
  • Byl představen nástroj Island, určený pro izolované spouštění aplikací. Pro sandboxovou izolaci je použit mechanismus Landlock. Island umožňuje vytvářet pravidla ve formátu TOML a aplikovat je pro izolaci pomocí Landlock stávajících spustitelných souborů, bez nutnosti měnit kód. Na rozdíl od Firejail nástroj Island nevyžaduje práva root a speciální oprávnění.
  • Společnost Google představila nástroj Wasefire napsaný v Rustu pro vývoj zabezpečených firmware. Hlavní myšlenkou je spouštění samostatných izolovaných handlerů (appletů) nad základním firmwarem (platformou). Vývoj firmware není vázán na programovací jazyky — komponenty firmware mohou být dodávány ve formátu WebAssembly s rozšířeními WASI (WebAssembly System Interface) a mohou být prováděny pomocí Wasmtime.
  • Byla publikována verze UEFI firmware Patina 18, napsaná v Rustu. Patina poskytuje náhradu základním komponentům firmware UEFI a může být použita pro postupný převod stávajícího firmware, napsaného v C, na použití jazyka Rust.
  • Projekt Brimstone vyvíjí nový JavaScript engine, který byl napsán od základu v jazyce Rust. V současné podobě již podporuje více než 97 % schopností ECMAScript 2026. Virtuální stroj pro vykonávání bytecode byl vytvořen s ohledem na architekturu motoru V8.
  • Projekt Catten vyvíjí jádro pro experimentální operační systém CharlotteOS, napsané v Rustu. Jádro podporuje řízení přístupu na základě „capability“ (podobně jako Fuchsia) a využívá distribuovanou hierarchii zdrojů podobnou systému Plan 9 s adresací souborových cest podle URI.
  • Byl vydán nový interaktivní příkazový shell Fish 4.2.0 (přátelský interaktivní shell). Větev 4.x se vyznačuje plným překladem kódu z jazyka C++ do Rustu.
  • Společnost Cloudflare zveřejnila kód Rust knihovny tokio-quiche, pro vestavěnou podporu protokolů QUIC a HTTP/3 v asynchronních aplikacích na základě frameworku Tokio.
  • Projekt Tor zveřejnil verze Arti 1.7 a 1.8, implementace nástrojů Tor napsaných v jazyce Rust. Jakmile kód Arti dosáhne úrovně, která bude schopna plně nahradit verzi v C, plánují vývojáři Tor povýšit Arti na hlavní implementaci Tor a postupně ukončit údržbu verze v C.

    V nové verzi byla stabilizována implementace omezeného definování onion služeb s využitím autorizace klienta („restricted-discovery“). K SOCKS proxy byla přidána podpora HTTP proxy využívající metodu CONNECT. Bylo implementováno adaptivní nastavení časových prodlev na základě zátěže. Byla přidána experimentální podpora tokio-console. Pokračovala se vývoj funkcionality pro relé a servery adresáře (Directory Authority). Byla přidána příkaz „arti hsc ctor-migrate“ pro přenos klíčů z C klienta do úložiště klíčů Arti. Byla přidána nastavení pro správu spouštění onion služeb.

  • Byla zveřejněna databáze RustDB, vytvořená v jazyce Rust pod vlivem PostgreSQL. Podporovány jsou základní SQL operace (CREATE/DROP TABLE/VIEW, INSERT, SELECT, UPDATE, DELETE, SHOW TABLES, EXPLAIN, VACUUM), transakce, MVCC, WAL (Write-Ahead Log), indexy, připojení prostřednictvím PostgreSQL kompatibilního protokolu. Při psaní RustDB byl použit AI.

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