Byl zveřejněn nový vydání programovacího jazyka Rust 1.94, který byl původně vyvinut projektem Mozilla, ale nyní je spravován nezávislou neziskovou organizací Rust Foundation. Jazyk se zaměřuje na bezpečné manipulace s pamětí a poskytuje prostředky pro dosažení vysokého paralelismu při vykonávání úkolů, přičemž se obejde bez 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:
- Do typu slice byla přidána metoda array_windows, která vytváří iterátor pro procházení slices "okny" pevné velikosti, posouvajícími se po jednom prvku. Na rozdíl od dříve dostupné metody windows, metoda array_windows pracuje se stálou velikostí okna a při každé iteraci vrací odkaz na pole pevné velikosti (&[T; N]) namísto slice neznámé velikosti (&[T]). Jelikož je velikost pole od začátku známa kompilátoru, je možné se vyhnout kontrole hranic pole v každé fázi iterace. let slice = [0, 1, 2, 3]; let mut iter = slice.array_windows(); assert_eq!(iter.next().unwrap(), &[0, 1]); assert_eq!(iter.next().unwrap(), &[1, 2]); assert_eq!(iter.next().unwrap(), &[2, 3]); assert!(iter.next().is_none());
- Do konfiguračních souborů správce balíčků Cargo (.cargo/config.toml) byla implementována direktiva "include", která umožňuje vkládat obsah jiných souborů na konkrétním místě. include = [ "frodo.toml", "samwise.toml", ] include = [ { path = "required.toml" }, { path = "optional.toml", optional = true }, ]
- Do súborů s manifesty a konfiguračních souborů byla přidána podpora nové verze značkovacího jazyka TOML 1.1, která přináší podporu pro vícerozměrné zabudované tabulky, escape sekvence "\xHH" pro vkládání hexadecimálního zobrazení bajtů a "\e" pro nahrazení "\u001B", možnost ponechat čárku na konci posledního prvku a vynechat určení sekund ve vyjádřeních času. serde = { version = "1.0", features = ["derive"] } nyní může být nahrazeno serde = { version = "1.0", features = ["derive"], }
- Nová sada API byla převedena do stabilního stavu, včetně stabilizovaných metod a implementací typů:
- ::array_windows
- ::element_offset
- LazyCell::get
- LazyCell::get_mut
- LazyCell::force_mut
- LazyLock::get
- LazyLock::get_mut
- LazyLock::force_mut
- impl TryFrom for usize
- std::iter::Peekable::next_if_map
- std::iter::Peekable::next_if_map_mut
- Vestavěné funkce pro instrukce x86 avx512fp16
- Vestavěné funkce pro instrukce AArch64 NEON fp16
- f32::consts::EULER_GAMMA
- f64::consts::EULER_GAMMA
- f32::consts::GOLDEN_RATIO
- f64::consts::GOLDEN_RATIO
- Příznak „const“ byl použit ve funkcích:
- f32::mul_add
- f64::mul_add
- Platforma riscv64im-unknown-none-elf byla převedena na třetí úroveň podpory. Třetí úroveň zahrnuje základní podporu, ale bez automatizovaného testování, publikování oficiálních sestavení a ověřování schopnosti sestavení kódu.
Dodatečně lze zmínit nedávno oznámené projekty a akce spojené s Rust:
- Ayrton Muñoz, který se dříve podílel na podpoře platformy Sony PlayStation 1 v kompilátoru Rust a pracoval na portu FreeBSD pro počítače s čipy Apple Silicon, zrealizoval pro FreeBSD možnost vytváření komponent jádra a ovladačů zařízení v jazyce Rust. Pro testování byl navržen balíček KPI obálek (Kernel Programming Interface), který umožňuje využívat kód v Rustu v jádře FreeBSD, a byly vytvořeny zvukový ovladač virtio (virtio_snd), HID ovladač DockChannel pro klávesnici v M2 MacBook a několik nízkoúrovňových ovladačů pro subsystémy počítačů Mac s čipy Apple Silicon.
Upozorňuje se, že práce na Rust obálkách se provádí od konce roku 2024. V obálkách je prozatím realizována pouze část C-KPI a jsou prezentovány jako nestabilní, ale časem se plánuje zvýšení úrovně stability na úroveň srovnatelnou s rozhraním pro jazyk C. Navrhovaný jako příklad ovladač virtio_snd je vhodný pro přehrávání hudby v QEMU. Předpokládá se, že v roce 2026 budou Rust obálky dostatečně stabilizovány, aby je zainteresovaní vývojáři mohli začít používat pro psaní kódu.
- Benny Siegert, který se podílí na vývoji NetBSD, se pokusil zdůvodnit, proč podpora jazyka Rust nebude v jádru NetBSD: NetBSD podporuje architektury, pro které Rust není dostupný; udržování stávajícího nástroje Rust v pkgsrc vyžaduje velké úsilí a je spojeno pouze s několika vývojáři; podpora Rust v jádru vyžaduje zahrnutí kompilátoru Rust do základního systému; při bootstrapování Rustu v NetBSD se používá starší verze binárního balíčku, což není akceptovatelné pro samostatné distribuce, které se šíří v zdrojovém kódu; cykly vydávání Rustu nejsou kompatibilní s cyklem vývoje NetBSD a udržování starších větví (například pokračuje podpora větve NetBSD 9 vydané v roce 2020, v těchto podmínkách by bylo nutné dodávání a podpora šest let starého kompilátoru Rust).
- Byl publikován vydání vestavěné databázové SDB Turso 0.5, napsané v jazyce Rust a kompatibilní se SQLite na úrovni dialektu SQL, formátu souborů DB a C API. Z rozšířených funkcí se vyznačuje mechanismem CDC (Change data capture) pro sledování změn v databázi v reálném čase, použitím io_uring pro asynchronní vstup/výstup v Linuxu, podporou vektorového vyhledávání, přítomností příkazu ALTER pro změnu schématu databáze, možností šifrování dat v databázi, režimem inkrementálních výpočtů a konstrukcí „BEGIN CONCURRENT“.
- Projekt na poskytování možnosti využití standardní knihovny Rust v programech běžících na straně GPU.
- Emuko — emulátor RISC-V, napsaný v Rustu, schopný načítat Linux, podporující JIT-kompilaci a schopný ukládat a obnovovat snímky stavu.
- RustConn (flatpak) — grafické rozhraní pro správu externích síťových připojení k ostatním hostitelům, podporující SSH, RDP, VNC, SPICE, Telnet, Serial, Kubernetes, Zero Trust a SFTP. Kód je napsán v Rustu s využitím GTK4 a Wayland.
- Byla představena nová větev projektu zlib-rs 0.6, označená jako první stabilní verze, plně kompatibilní se zlib C API a vhodná pro průhlednou výměnu zlib. Projekt cílí na vytvoření zabezpečené alternativy knihovny pro kompresi dat zlib. Vývoj se odráží od projektu zlib-ng, který rozvíjí vysoce výkonnou variantu zlib.
- Byl představen projekt vcad, vyvíjející parametrický systém automatizovaného projektování (CAD), napsaný v Rusku a integrovány s AI-agenty pomocí protokolu MCP. Je podporováno 3D modelování, simulace, práce s 2D skicami, komponentní montáž, import ve formátu STEP a export ve formátech STL/GLB/STEP/DXF.
- Byla publikována systém rozpoznávání řeči, napsaný v Rustu a používající AI model Mistral Voxtral Mini 4B Realtime a framework strojového učení Burn. Projekt je zaměřen na rozpoznávání řeči naživo pro vytváření transkripcí při streamování.
- Bylo vydáno nástroje c2rust 0.22, určené pro překlad C kódu (C99) do unsafe-reprezentace na Rustu, blízké svým zpracováním původnímu C kódu. Získaná pracovní kostra může být dále využita pro postupný převod na idiomatický Rust a odstranění unsafe-bloků.
Zdroj: opennet.ru
