Rust 1.96.0

Objavljen je novi izdanak Rust 1.96.0 — stabilne verzije programskog jezika Rust. Ažuriranje je objavljeno 28. maja 2026. godine; može se instalirati standardnom komandom rustup update stable. Glavne promene su novi tipovi opsega u core::range, stabilizacija makrosova za proveru usklađenosti sa šablonima, strože ponašanje WebAssembly građevina i ispravke dve ranjivosti u Cargo-u.

Glavne promene

  • Novi tipovi opsega core::range::Range*.
    U standardnoj biblioteci stabilizovani su novi varijante opsega: core::range::Range, RangeFrom, RangeInclusive i pripadajući iteratori. Za razliku od starih tipova iz core::ops, novi opsezi ne implementiraju Iterator direktno, već se konvertuju u iteratore preko IntoIterator. Zbog toga ovi opsezi mogu biti Copy, što je praktično, na primer, kada se opseg čuva kao polje strukture. Sintaksa kao 0..1 još uvek stvara stare tipove opsega, ali u budućem izdanju jezika planiraju da je prevede na nove tipove.

  • Dodati su assert_matches! i debug_assert_matches!.
    Novi makrosi omogućavaju proveru da li se vrednost poklapa sa zadatim šablonom. Po svojoj suštini, liči na assert!(matches!(…)), ali u slučaju greške prikazuje se Debug predstava vrednosti, što olakšava dijagnostiku. U prelude, makrosi nisu dodati kako bi se izbegli konflikti sa popularnim spoljnim crate-ovima, pa ih treba eksplicitno uvesti iz core ili std.

  • Promenjeno ponašanje WebAssembly ciljeva.
    Rust više ne prosledijuje linkeru —allow-undefined za WebAssembly građevine. Sada se neodređeni simboli prilikom linkovanja smatraju greškom, a ne pretvaraju se automatski u uvoz iz modula 'env'. Ovo bi trebalo ranije da identifikuje greške ugrađivanja i pogrešna imena simbola. Staro ponašanje se može ponovo aktivirati putem RUSTFLAGS=-Clink-arg=—allow-undefined ili eksplicitnim navođenjem uvoženog wasm-modula preko #[link(wasm_import_module = 'env')].

  • Cargo je dobio ispravke bezbednosti.
    U Rust 1.96.0 zatvorene su dve ranjivosti koje se tiču korisnika spoljnih registrija. CVE-2026-5223 se odnosi na obradu symlink unutar tar arhiva crate: zlonameran paket iz spoljnih registrija mogao je da prepiše keš drugog paketa iz istog registrija. Počevši od Rust 1.96.0 Cargo odbacuje crate-arhive sa symlink-om. CVE-2026-5222 se odnosi na normalizaciju URL sparse registrija i u retkim situacijama mogla je dovesti do slanja Cargo tokena na zlonamerni registr. Korisnici crates.io, prema tvrdnjama tima Rust, nisu pogođeni ovim problemima.

  • Spremembe v jeziku.
    V izdajah so vključeni nekatere točne popravke in razširitve: omogočeno je posredovanje expr-metak spremenljivk makrov v cfg, prilagojeno je pretvarjanje never-type v izrazih-tuple, popravljeni so redki primeri napačnih nasvetov o izhodnih tipih za argumente funkcij, dodana je podpora za vektorske registre s390x v inline assembly, prav tako pa je ponovno dovoljeno uporabljati konstante tipa ManuallyDrop kot predloge — to odpravlja regresijo, ki se je pojavila v Rust 1.94.0.

  • Spremembe v prevajalniku in platformah.
    Za Linux cilje na LoongArch je bila vključena podpora za link relaxation — optimizacijo povezovanja, ki poenostavi nekatere prehode in sklice po nameščanju kode. Za riscv64gc-unknown-fuchsia je bila osnovna konfiguracija posodobljena na profil RVA22 s podporo za vektorske razširitve.

  • Posodobitve standardne knjižnice.
    Dodana je podpora za iteracijo preko razponov NonZero-celega števila. Prav tako je bila popravljena odložena obdelava naslovov gostitelja v SGX preko ToSocketAddr, v dokumentaciji in notranjih pogodbah pa je bilo natančneje opredeljeno, kaj pomeni 'dovoljeno za branje/pisanje': ničelni kazalec je izključen iz splošne opredelitve, izjemi pa sta podani posebej za določene metode.

  • Stabilizirani API-ji.
    Med stabiliziranimi vmesniki so assert_matches!, debug_assert_matches!, implementacije From za AssertUnwindSafe, LazyCell in LazyLock, ter novi tipi in iteratorji razponov iz core::range, vključno z Range, RangeFrom, RangeToInclusive in njihovimi iteratorji.

  • Cargo: spremembe za odvisnosti in dokumentacijo.
    Zdaj lahko odvisnost hkrati označuje Git-repozitorij in alternativni register: lokalno se bo uporabljala Git različica, pri objavljanju pa različica iz registra, podobno obnašanju s crates.io. Prav tako je dodana podpora za target.'cfg(..)'.rustdocflags v konfiguraciji Cargo.

  • Rustdoc je začel bolj natančno obravnavati dokumentacijo.
    Opombe o deprecated API-jih se zdaj prikazujejo kot običajna dokumentacija, brez prejšnje posebne obdelave preko white-space: pre-wrap. Poleg tega rustdoc ne izda več lint missing_doc_code_examples za elemente znotraj impl, metode in asociirane funkcije v stranski vrstici dokumentacije pa so ločene.

  • Možne neskladnosti.
    V izdaji je več sprememb, ki se lahko pojavijo ob nestandardnem kode: razporeditev nekaterih #[repr(Int)] enum je bila popravljenain v skrajnih primerih, prepovedane so nekatere nepotrebne unsize-povezave v Pin, gradnje WebAssembly se zdaj zrušijo ob nedoločnih simbolih, naključno stabiliziran atribut #![reexport_test_harness_main] je spet zaprt za funkcionalna vrata, parameter -Csoft-float je bil odstranjen, minimalna različica zunanjega LLVM pa je dvignjena na 21. Za AVR je bil tip c_double spremenjen v f32, ker je na teh ciljnih platformah C double privzeto 32-bitni.

Izvor: linux.org.ru

Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki 🔥 Kupite zanesljivo gostovanje za spletne strani z zaščito pred DDoS, VPS VDS strežniki | ProHoster