Byl zveřejněn nový vydání Rust 1.96.0 — další stabilní verze programovacího jazyka Rust. Aktualizace byla vydána 28. května 2026; nainstalovat ji lze standardním příkazem rustup update stable. Hlavními změnami jsou nové typy rozsahů v core::range, stabilizace makra pro kontrolu shody s šablonami, zpřísnění chování WebAssembly sestavení a opravy dvou zranitelností v Cargo.
Hlavní změny
Nové typy rozsahů core::range::Range*.
Ve standardní knihovně byly stabilizovány nové varianty rozsahů: core::range::Range, RangeFrom, RangeInclusive a s nimi související iterátory. Na rozdíl od starých typů z core::ops, nové rozsahy neimplementují Iterator přímo, ale přetvářejí se na iterátor pomocí IntoIterator. Díky tomu mohou být takové rozsahy Copy, což je pohodlné například při uchovávání rozsahu jako pole struktury. Syntaxe jako 0..1 zatím vytváří staré typy rozsahů, ale v budoucí revizi jazyka se plánuje jejich převod na nové typy.Byly přidány assert_matches! a debug_assert_matches!.
Nové makra umožňují kontrolovat, zda hodnota odpovídá dané šabloně. V tomto smyslu je to podobné jako assert!(matches!(…)), ale při chybě se zobrazuje Debug reprezentace hodnoty, což usnadňuje diagnostiku. Do prelude nebyly makra přidány, aby nedošlo ke konfliktu s populárními externími crate, proto je nutné je dovézt explicitně z core nebo std.Bylo změněno chování WebAssembly cílů.
Rust již nepředává linkeru —allow-undefined pro sestavení WebAssembly. Nyní se neznámé symboly při linkování považují za chybu, a neprovádějí se automaticky jako importy z modulu "env". To by mělo dříve odhalit chyby sestavení a nesprávné názvy symbolů. Staré chování lze v případě potřeby vrátit pomocí RUSTFLAGS=-Clink-arg=—allow-undefined nebo explicitně určit importovaný wasm modul pomocí #[link(wasm_import_module = "env")].Cargo získal opravné aktualizace zabezpečení.
Změny v jazyce.
Do uvolnění byly zahrnuty několik drobných oprav a rozšíření: povoleno předávání expr-metaproměnných makrosů do cfg, upraveno přetypování never-typů ve vícesložkových výrazech, opraveny vzácné případy nesprávných návrhů typů pro argumenty funkcí, přidána podpora vektorových registrů s390x v inline assembleru, a také je opět povoleno používat konstanty typu ManuallyDrop jako šablony — to opravuje regresi, která se objevila v Rust 1.94.0.Změny v kompilátorech a platformách.
Pro linuxové cíle na LoongArch byla povolena podpora link relaxation — optimalizace linkování, která umožňuje zjednodušit některé přechody a volání po umístění kódu. Pro riscv64gc-unknown-fuchsia byla základní konfigurace aktualizována na profil RVA22 s podporou vektorových rozšíření.Aktualizace standardní knihovny.
Přidána podpora iterace přes intervaly konkrétních čísel NonZero. Rovněž byla opravena odložená manipulace s adresami hostitelů v SGX přes ToSocketAddr, a v dokumentaci a interních kontraktech bylo upřesněno definování paměti, "povolené pro čtení/zápis": nulový ukazatel byl vyloučen z obecného definování, a výjimky jsou uvedeny zvlášť pro konkrétní metody.Stabilizované API.
Mezi stabilizovanými rozhraními se nacházejí assert_matches!, debug_assert_matches!, implementace From pro AssertUnwindSafe, LazyCell a LazyLock, a také nové typy a iterátory intervalů z core::range, včetně Range, RangeFrom, RangeToInclusive a jejich iterátorů.Cargo: změny pro závislosti a dokumentaci.
Nyní může závislost současně uvádět Git-repozitář a alternativní registr: lokálně se bude používat Git-verze, a při publikaci verze z registru, podobně jako chování s crates.io. Také byla přidána podpora target.’cfg(..)’.rustdocflags v konfiguraci Cargo.Rustdoc se stal pečlivějším při zpracovávání dokumentace.
Poznámky o deprecated API nyní renderují jako běžná dokumentace, bez předchozí speciální manipulace přes white-space: pre-wrap. Kromě toho rustdoc více než nevydává lint missing_doc_code_examples pro prvky uvnitř impl, a v bočním panelu dokumentace metody a asociované funkce jsou odděleny.Možné neslučitelnosti.
Vydání obsahuje několik změn, které se mohou projevit na netypickém kódu: byla opravena rozložení některých #[repr(Int)] enum v krajních případech, byla zakázána některá bezvýznamná unsize převádění v Pin, WebAssembly sestavení nyní padají při neurčitých symbolech, náhodně stabilizovaný atribut #![reexport_test_harness_main] je opět uzavřen feature gate, byl odstraněn parametr -Csoft-float a minimální verze externího LLVM byla zvýšena na 21. Pro AVR byl změněn typ c_double na f32, protože na těchto cílech je C double standardně 32-bitový.
Zdroj: linux.org.ru
