Avalikustatud versioon Rust 1.96.0 — uus stabiilne versioon programmeerimiskeelest Rust. Uuendus ilmus 28. mai 2026; selle võib installida tavalise käsuga rustup update stable. Peamised muudatused on uued vahemik tüübid core::range, makrode stabiliseerimine mustrite kontrollimiseks, WebAssembly süsteemide käitumise karmistamine ja kaks haavatavuse parandust Cargo's.
Olulised muudatused
Uued vahemik tüübid core::range::Range*.
Standardteegis on stabiliseeritud uued vahemiku variandid: core::range::Range, RangeFrom, RangeInclusive ja nendega seotud итераторid. Erinevalt vanadest tüüpide core::ops-i, ei rakenda uued vahemikud Iteratorit otse, vaid muudetakse Iteratoriks läbi IntoIterator. Tänu sellele võivad sellised vahemikud olla Copy, mis on mugav näiteks, kui salvestada vahemik struktuuri väljana. Süntaks, nagu 0..1, genereerib endiselt vanad vahemiku tüübid, kuid keele tulevases redaktsioonis plaanitakse see üle viia uutele tüüpidele.Lisatud assert_matches! ja debug_assert_matches!.
Uued makrod võimaldavad kontrollida, kas väärtus vastab antud mustrile. Tähenduse poolest sarnaneb see assert!(matches!(…)), kuid vigade korral kuvatakse väärtuse Debug-esitus, mis lihtsustab tõrkeotsingut. Prelude makrode lisamine vältis populaarsete kolmandate osapoolte crate'ide konfliktide vältimiseks, seega tuleb neid selgelt importida core'ist või std'ist.WebAssembly sihtmärkide käitumist on muudetud.
Rust ei edasta enam linkijale —allow-undefined WebAssembly kogumite jaoks. Nüüd loetakse linkimise ajal määramata sümbolid veaks, mitte ei muudetud automaatselt imporditeks, mis on moodul "env". See peaks varakult tuvastama koostamisvead ja vale sümbolite nimed. Vana käitumise saab vajadusel taastada, kasutades RUSTFLAGS=-Clink-arg=—allow-undefined, või selgelt määrata imporditava wasm-mooduli kaudu #[link(wasm_import_module = "env")]Cargo sai turvaparandusi.
Muutused keeles.
Väljalaskesse kuuluvad mitmed punktiga parandused ja laiendused: macrode expr-metamuutujate edastamine cfg-sse on lubatud, never-type viimine tuple väljendites on korrigeeritud, parandatud on haruldased juhtumid vale tüübi väljastamise vihjeid funktsioonide argumentide jaoks, s390x vektori registeride toetus on lisatud inline assemblys, samuti on taas lubatud kasutada ManuallyDrop tüüpi konstante mallidena — see parandab regressiooni, mis tekkis Rust 1.94.0-s.Muutused kompilaatoris ja platvormides.
Linuxi sihtmärkide jaoks LoongArchil on sisse lülitatud linkide lõdvendamise tugi — linkimistootmine, mis võimaldab lihtsustada teatud üleminekuid ja viiteid pärast koodi paigutamist. riscv64gc-unknown-fuchsia jaoks on aluseks olev konfiguratsioon uuendatud profiilile RVA22 vektorite laienduste toega.Standardbiblioteka uuendused.
Lisatud tugi NonZero-täisarvude vahemike iteratsiooniks. Samuti on parandatud hosti aadresside laisk töötlemine SGX-i kaudu ToSocketAddr, ning dokumentatsioonis ja sisemistes lepingutes on täpsustatud mälu määratlemist, mis on "lugemiseks/kirjutamiseks lubatud": nullviide on üldmääratlemisest välja jäetud, erandid on spetsiifiliselt toodud konkreetsete meetodite jaoks.Stabiliseeritud API-d.
Stabiliseeritud liideste seas on assert_matches!, debug_assert_matches!, Implementatsioonid From<T> jaoks AssertUnwindSafe<T>, LazyCell<T, F> ja LazyLock<T, F>, ning uued tüübid ja vahemiku iteratoorid core::range'ist, sealhulgas Range, RangeFrom, RangeToInclusive ja nende iteratoorid.Cargo: muudatused sõltuvustes ja dokumentatsioonis.
Nüüd võib sõltuvus korraga viidata nii Git-i hoidlarile kui alternatiivsele registry'le: kohaliku töötamise korral kasutatakse Git-i versiooni ja avaldamise korral registry versiooni, sarnaselt crates.io käitumisele. Samuti on lisatud tugi target.’cfg(..)’.rustdocflags Cargo konfiguratsioonis.Rustdoc on hakanud dokumentatsiooni hoolikamalt töötlema.
Deprekeeritud API märkmed renderdatakse nüüd tavalise dokumentatsioonina, ilma varasema erilise töötlemiseta läbi white-space: pre-wrap. Lisaks ei teata rustdoc enam lint missing_doc_code_examples elementide kohta impl sees ning dokumentatsiooni külgpaneelis jagunevad meetodid ja seotud funktsioonid eraldi.Võimalikud ühilduvuse probleemid.
Väljal on mitmeid muudatusi, mis võivad ilmneda ebatüüpilises koodis: mõned #[repr(Int)] enum'i paigutused on äärmuslikes olukordades parandatud, mõned kasutu unsize-konversioonid Pin<Foo>'s on keelatud, WebAssembly kogud kukuvad nüüd määramatute sümbolite korral kokku, juhuslikult stabiliseeritud atribuut #![reexport_test_harness_main] on taas sulgunud feature gate'iga, parameeter -Csoft-float on eemaldatud ja väline LLVM minimaalne versioon on tõstetud 21-le. AVR-i jaoks on c_double tüüp muudetud f32-ks, kuna nende jaoks on C double vaikimisi 32-bitine.
Allikas: linux.org.ru
