Rust 1.96.0

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.
    U Rust 1.96.0 ispravljene su dvije ranjivosti koje pogađaju korisnike vanjskih registry. CVE-2026-5223 je povezana s obradom symlink unutar tar-arhiva crate: zloćudni paket iz vanjskog registry mogao je prebrisati predmemoriju drugog paketa iz istog registry. Počevši od Rust 1.96.0, Cargo odbacuje crate-arhive s symlink. CVE-2026-5222 je povezana s normalizacijom URL sparse registry i u rijetkim uvjetima mogla dovesti do slanja Cargo tokena na zloćudni registry. Korisnici crates.io, tvrdi Rust tim, nisu pogođeni tim problemima.

  • 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

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster