Objavljen je novi izdanja Rust 1.96.0 — nova stabilna verzija programskog jezika Rust. Ažuriranje je objavljeno 28. svibnja 2026. godine; može se instalirati uobičajenim naredbom rustup update stable. Glavne promjene uključuju nove vrste raspona u core::range, stabilizaciju makrona za provjeru usklađenosti s obrascima, stroži postupak za WebAssembly gradnje i ispravke dviju ranjivosti u Cargo.
Glavne promjene
Nove vrste raspona core::range::Range*.
U standardnoj biblioteci stabilizirane su nove varijante raspona: core::range::Range, RangeFrom, RangeInclusive i povezani iteratori. Za razliku od starih tipova iz core::ops, nove vrste raspona ne implementiraju Iterator izravno, već se pretvaraju u iterator putem IntoIterator. Zbog toga takvi rasponi mogu biti Copy, što je korisno, na primjer, pri pohranjivanju raspona kao polja strukture. Sintaksa poput 0..1 trenutno stvara stare tipove raspona, ali u budućoj verziji jezika planiraju je prevesti na nove tipove.Dodane su assert_matches! i debug_assert_matches!.
Novi makronaredbe omogućuju provjeru da li se vrijednost podudara s određenim obrascem. U biti, to je slično assert!(matches!(…)), ali u slučaju pogreške ispisuje se Debug prikaz vrijednosti, što olakšava dijagnostiku. U prelude nisu dodani makronaredbe kako bi se izbjegla sukoba s popularnim vanjskim crate-ovima, pa ih je potrebno izričito uvoziti iz core ili std.Promijenjeno ponašanje WebAssembly ciljeva.
Rust više ne prosljeđuje linkeru —allow-undefined za WebAssembly gradnje. Sada se neodređeni simboli tijekom povezivanja smatraju greškom, a ne pretvaraju se automatski u uvoze iz modula "env". To bi trebalo ranije otkriti greške u izgradnji i netočna imena simbola. Staro ponašanje može se ponovo aktivirati putem RUSTFLAGS=-Clink-arg=—allow-undefined ili izričito navesti uvezenu wasm-modul preko #[link(wasm_import_module = "env")] .Cargo je dobio ispravke sigurnosti.
Promjene u jeziku.
U izdanje su uključeni nekoliko sitnih ispravki i proširenja: dopuštena je prenosa expr-metak varijabli makroa u cfg, prilagođeno je prevođenje never-type u izrazima-torkama, ispravljeni su rijetki slučajevi netočnog sugeriranja izlaznih tipova za argumente funkcija, dodana je podrška za vektorske registre s390x u inline assembly, a također je ponovno dopušteno korištenje konstanti tipa ManuallyDrop kao predložaka — ovo ispravlja regresiju koja se pojavila u Rust 1.94.0.Promjene u prevoditelju i platformama.
Za Linux ciljeve na LoongArch uključena je podrška za link relaxation — optimizaciju povezivanja koja pojednostavljuje neke prijelaze i pozive nakon smještaja koda. Za riscv64gc-unknown-fuchsia ažurirana je osnovna konfiguracija na profil RVA22 s podrškom za vektorska proširenja.Ažuriranja standardne biblioteke.
Dodana je podrška za iteraciju preko raspona NonZero-cjelobrojnih brojeva. Također je ispravljena odložena obrada adresa hosta u SGX putem ToSocketAddr, a u dokumentaciji i unutarnjim ugovorima pojašnjena je definicija memorije koja je 'dozvoljena za čitanje/pisanje': nulti pokazivač isključen je iz općeg definicije, a iznimke su navedene odvojeno za određene metode.Stabilizirani API.
Među stabiliziranim su sučeljima — assert_matches!, debug_assert_matches!, implementacije From za AssertUnwindSafe, LazyCell i LazyLock, kao i nove vrste i iteratori raspona iz core::range, uključujući Range, RangeFrom, RangeToInclusive i njihove iteratore.Cargo: promjene za ovisnosti i dokumentaciju.
Sada ovisnost može istovremeno označavati Git-repozitorij i alternativni registry: lokalno će se koristiti Git-verzija, a pri objavljivanju — verzija iz registry, slično ponašanju s crates.io. Također je dodana podrška za target.’cfg(..)’.rustdocflags u Cargo konfiguraciji.Rustdoc je postao pažljiviji u obradi dokumentacije.
Bilješke o deprecated API sada se prikazuju kao uobičajena dokumentacija, bez prethodne posebne obrade putem white-space: pre-wrap. Osim toga, rustdoc više ne javlja lint missing_doc_code_examples za elemente unutar impl, a u bočnoj traci dokumentacije metode i povezane funkcije se odvajaju odvojeno.Moguće nespojivosti.
U izdanju su napravljene neke izmjene koje se mogu očitovati na neobičnom kodu: ispravljena je raspodjela nekih #[repr(Int)] enum u ekstremnim slučajevima, zabranjena su neka beskorisna unsize prebacivanja u Pin, WebAssembly kompilacije sada padaju zbog neodređenih simbola, slučajno stabilizirani atribut #![reexport_test_harness_main] ponovno je zatvoren feature gate-om, uklonjen je parametar -Csoft-float, a minimalna verzija vanjskog LLVM-a podignuta je na 21. Za AVR je promijenjen tip c_double u f32, budući da je na tim ciljevima C double po defaultu 32-bitni.
Izvor: linux.org.ru
