A fost publicat un nou release Rust 1.96.0 — o nouă versiune stabilă a limbajului de programare Rust. Actualizarea a fost lansată 28 mai 2026; poate fi instalată cu comanda standard rustup update stable. Cele mai importante schimbări sunt noile tipuri de intervale în core::range, stabilizarea macros pentru verificarea conformității cu șabloanele, întărirea comportamentului construcțiilor WebAssembly și remedieri pentru două vulnerabilități în Cargo.
Principalele modificări
Noile tipuri de intervale core::range::Range*.
În biblioteca standard, au fost stabilizate noi variante de intervale: core::range::Range, RangeFrom, RangeInclusive și iterațiile corespunzătoare. Spre deosebire de vechile tipuri din core::ops, noile intervale nu implementează direct Iterator, ci sunt transformate într-un iterator prin IntoIterator. Datorită acestui fapt, astfel de intervale pot fi Copy, ceea ce este convenabil, de exemplu, când se stochează un interval ca un câmp al unei structuri. Sintaxa de tipul 0..1 creează până acum vechile tipuri de intervale, dar în viitoarea ediție a limbajului se preconizează trecerea la noile tipuri.Au fost adăugate assert_matches! și debug_assert_matches!.
Noile macros permit verificarea faptului că o valoare corespunde unui anumit șablon. Semnificația este similară cu assert!(matches!(…)), dar în caz de eroare, se afișează reprezentarea Debug a valorii, ceea ce simplifică diagnosticul. În prelude, macros-urile nu au fost adăugate pentru a nu crea conflict cu crate-urile populare de terță parte, așa că trebuie importate explicit din core sau std.Comportamentul obiectivelor WebAssembly a fost modificat.
Rust nu mai trimite linker-ului —allow-undefined pentru construcțiile WebAssembly. Acum, simbolurile nedefinite în timpul linkage-ului sunt considerate o eroare, în loc să fie transformate automat în importuri din modulul "env". Acest lucru ar trebui să identifice erorile de construcție mai devreme și numele incorecte ale simbolurilor. Comportamentul vechi poate fi restaurat, dacă este necesar, folosind RUSTFLAGS=-Clink-arg=—allow-undefined sau specificând explicit modulul wasm importat prin #[link(wasm_import_module = "env")] .Cargo a primit remedieri de securitate.
Modificări în limbaj.
În lansare au fost incluse Câteva corecții și extensii punctuale: s-a permis trecerea expresiilor variabilelor de metaprogramare în cfg, s-a corectat conversia never-type în expresiile-tuple, s-au rezolvat cazuri rare de sugestii eronate referitoare la tipurile de ieșire pentru argumentele funcțiilor, s-a adăugat suport pentru registre vectoriale s390x în asamblarea inline, iar din nou s-a permis utilizarea constantelor de tip ManuallyDrop ca șabloane — aceasta repară o regresie apărută în Rust 1.94.0.Modificări în compiler și platforme.
Pentru țintele Linux pe LoongArch s-a inclus suport pentru link relaxation — o optimizare a legării care permite simplificarea anumitor salturi și apeluri după amplasarea codului. Pentru riscv64gc-unknown-fuchsia s-a actualizat configurația de bază la profilul RVA22 cu suport pentru extensii vectoriale.Actualizări ale bibliotecii standard.
S-a adăugat suport pentru iterația peste intervale de numere întregi NonZero. De asemenea, s-a corectat procesarea întârziată a adreselor gazdelor în SGX prin ToSocketAddr, iar în documentație și contractele interne s-a clarificat definiția memoriei, «validă pentru citire/scriere»: pointerul nul este exclus din definiția generală, iar excepțiile sunt indicate separat pentru metodele specifice.API-uri stabilizate.
Printre interfețele stabilizate se numără assert_matches!, debug_assert_matches!, implementări From pentru AssertUnwindSafe, LazyCell și LazyLock, precum și noi tipuri și iteratoare de intervale din core::range, inclusiv Range, RangeFrom, RangeToInclusive și iteratoarele lor.Cargo: modificări pentru dependențe și documentație.
Acum o dependență poate specifica simultan un depozit Git și un registry alternativ: versiunea Git va fi utilizată local, iar la publicare — versiunea din registry, similar comportamentului cu crates.io. De asemenea, s-a adăugat suport pentru target.’cfg(..)’.rustdocflags în configurația Cargo.Rustdoc a devenit mai atent în procesarea documentației.
Notițele despre API-urile depreciate sunt acum redimensionate ca documentație obișnuită, fără tratamentul special anterior prin white-space: pre-wrap. În plus, rustdoc nu mai generează lint missing_doc_code_examples pentru elementele din interiorul impl, iar în bara laterală a documentației, metodele și funcțiile asociate sunt separate.Posibile incompatibilități.
În această versiune există câteva modificări care pot apărea în coduri atipice: s-a corectat aranjarea unor enum #[repr(Int)] în cazuri extreme, au fost interzise anumite conversii inutile unsize în Pin, modulele WebAssembly acum se blochează la simboluri nedefinite, atributul stabilizat accidental #![reexport_test_harness_main] este din nou închis sub un feature gate, parametrul -Csoft-float a fost eliminat, iar versiunea minimă a LLVM extern a fost ridicată la 21. Pentru AVR, tipul c_double a fost schimbat în f32, deoarece pe aceste Ținte, C double este în mod implicit de 32 de biți.
Sursa: linux.org.ru
