Verze Rust 1.99.0. Microsoft zařadil Rust mezi primární jazyky

Byl vydán nový jazyk pro programování Rust 1.99, původně vyvinutý projektem Mozilla, nyní však rozvíjený pod záštitou nezávislé neziskové organizace Rust Foundation. Jazyk se zaměřuje na bezpečnou manipulaci s pamětí a poskytuje prostředky pro dosažení vysokého paralelismu vykonávání úloh, přičemž se obejde bez použití garbage collectoru a runtime (runtime se omezuje na základní inicializaci a údržbu standardní knihovny).

Metody manipulace s pamětí v Rustu se zaměřují na eliminaci chyb při manipulaci s ukazateli a poskytují ochranu proti problémům vyplývajícím z nízkoúrovňové práce s pamětí, jako je přístup k uvolněné oblasti paměti, dereference 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 ukládání knihoven je podporován 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:

  • Byla umožněna tvorba funkcí v jazyce Rust s variabilním počtem argumentů (variadic), které lze exportovat pro volání z projektů v jazyce C (C ABI). Jako poslední prvek seznamu parametrů v takových funkcích může být použita konstrukce „…“, která je v Rustu zpracovávána pomocí speciálního typu VaList, fungujícího obdobně jako va_list v C. unsafe extern "C" fn sum(mut args: …) -> i32 { let a = unsafe { args.next_arg::() }; let b = unsafe { args.next_arg::() }; a + b } fn foo() -> i32 { unsafe { sum(0i32, 2i32) } }
  • Byly stabilizovány funkce Layout::for_value_raw, mem::size_of_val_raw a mem::align_of_val_raw, které umožňují bezpečně určení velikosti a zarovnání podle surových ukazatelů (raw pointer), včetně použití typů s dynamickou velikostí, jako jsou řezy, bez nutnosti vytvářet odkazy na data.
  • Do dokumentace byla přidána doporučení vyhnout se uvolnění paměti, na kterou byla získána statická reference s neomezenou dobou životnosti (&'static) prostřednictvím volání Box::leak (round-trip unleaking), neboť takový krok může potenciálně vést k problémům kvůli nekompatibilitě s budoucími optimalizacemi kompilátoru a připojovanými mechanismy alokace paměti. Místo vytváření statické reference pro dočasný převod vlastnictví se doporučuje používat syrové ukazatele, například prostřednictvím volání Box::into_non_null.
  • Nová sada API byla převedena do stabilního stavu, včetně stabilizovaných metod a implementací typů:
    • IntoIterator pro Box<[T; N]>
    • IntoIterator pro &Box<[T; N]>
    • IntoIterator pro &mut Box<[T; N]>
    • VecDeque::retain_back
    • core::ffi::VaList
    • Box::into_non_null
    • Box::from_non_null
    • Vec::into_parts
    • Vec::from_parts
    • core::mem::size_of_val_raw
    • core::mem::align_of_val_raw
    • core::alloc::Layout::for_value_raw
    • String::from_utf8_lossy_owned
    • string::FromUtf8Error::into_utf8_lossy
    • FusedIterator pro StepBy<I>
    • std::fs::set_times
    • std::fs::set_times_nofollow
  • V balíčkovém správci cargo byl implementován nový integrovaný profil „debug“, který je obdobný profilu „dev“ (v budoucnu se plánuje oddělení možností pro ladění a vývoj). Při sestavení v CI je ve výchozím nastavení zakázána inkrementální kompilace.
  • Cílová platforma riscv64-unknown-linux-musl byla převedena na druhou úroveň podpory, která zaručuje sestavení, ale ne záruky při procházení testovací sady.

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

  • Společnost Microsoft převedla Rust mezi jazyky první úrovně a zajistí jeho plnou podporu ve všech fázích vývoje uvnitř společnosti. Předtím byla první úroveň podpory uvnitř společnosti poskytována pro jazyky C++, C# a TypeScript. Bylo zmíněno, že Rust je již používán ve více než 100 repozitářích Microsoft. Mimo jiné jsou komponenty napsané v Rustu již aplikovány v takových produktech, jako je Microsoft 365 a Copilot, a pro kompilátor MSVC byl připraven samostatný backend rustc_codegen_utc pro Rust, založený na kompilátoru rustc.

    Jako hlavní cíl použití Rustu v Microsoftu se uvádí zvýšení bezpečnosti kódu, který je kritický z hlediska zabezpečení. Podle technického ředitele Microsoft Azure je přibližně 70 % všech zranitelností ve Windows způsobeno problémy při práci s pamětí, kterým by se dalo předejít použitím Rustu.

  • Společnost Google odstranila ze systému Linux starou implementaci mechanismu meziprocesní komunikace Binder, napsanou v jazyce C, ve prospěch nového ovladače Binder IPC, přepsaného v jazyce Rust. Uvádí se, že za 15 let existence starého ovladače se nahromadilo značné technické dluhy a množství složitostí, které ztěžovaly hledání chyb, údržbu a přidávání nových funkcí. Ovladač Binder IPC na Rust je nyní považován za hlavní a již není prezentován jako experimentální vývoj.
  • Byla vydána verze Arti 2.7.0, implementace nástroje Tor, napsaná v jazyce Rust. Jakmile kód Arti dosáhne úrovně, která bude schopna plně nahradit variantu v C, vývojáři Tor mají v úmyslu udělit Arti status hlavní implementace Tor a postupně přestat s údržbou implementace v C. V nové verzi bylo zavedeno rozšíření funkcionality pro relay a servery adresáře (Directory Authority), související s parsováním dokumentů, podporou zrcadlení serverů adresářů a zpracováním DNS provozu. Byla přidána implementace RPC pro změnu a kontrolu konfigurace. Bylo odstraněno několik zranitelností — administrátorům onion služeb se doporučuje naléhavě aktualizovat své systémy.

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