Bylo zveřejněno vydání univerzálního programovacího jazyka Rust 1.76, 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:
- Do dokumentace byla přidána samostatná sekce popisující kompatibilitu různých typů argumentů a návratových typů funkcí na úrovni ABI. Oproti předchozím verzím je nyní kompatibilita s ABI zaručena pro typy „char“ a „u32“, které mají shodné velikosti a zarovnání.
- Kromě dříve dostupného volání "any::type_name:: Funkce `()`, která vrací řetězcový popis pro typ zadaný v parametru `T`, byla doplněna funkcí `type_name_of_val(&T)`, která umožňuje získat informace o typu na základě libovolného nepojmenovaného odkazu. fn get_iter() -> impl Iterator { [1, 2, 3].into_iter() } fn main() { let iter = get_iter(); let iter_name = std::any::type_name_of_val(&iter); let sum: i32 = iter.sum(); println!("Součet `{iter_name}` je {sum}."); } Výstup je: Součet `core::array::iter::IntoIter ` je 6.
- Nová část API byla přesunuta do kategorie stabilní, včetně metod a implementací vlastností byly stabilizovány:
- Arc::unwrap_or_clone
- Rc::unwrap_or_clone
- Výsledek::inspect
- Výsledek::inspect_err
- Možnost::inspect
- název_typu_hodnoty
- std::hash::{DefaultHasher, RandomState}
- ptr::{from_ref, from_mut}
- ptr::addr_eq
- Pro platformy {x86_64,i686}-win7-windows-msvc, aarch64-apple-watchos, arm64e-apple-ios a arm64e-apple-darwin byla implementována podpora úrovně 3. Úroveň 3 poskytuje základní podporu, ale bez automatizovaného testování, oficiálních verzí sestavení nebo ověřování sestavení.
Za zmínku stojí i demonstrace experimentálního plánovače úloh scx_rustland, napsaného v Rustu a spuštěného v uživatelském prostoru. Logika plánování úloh je přesunuta z jádra do uživatelského prostoru pomocí sady nástrojů sched-ext, která používá BPF. Plánovač je optimalizován tak, aby upřednostňoval interaktivní úlohy před úlohami náročnými na CPU. Například v testu spouštění herní aplikace během sestavování jádra dosáhl plánovač scx_rustland ve hře vyššího FPS než standardní plánovač EEVDF.
Zdroj: opennet.ru
