Publikuar lëshimi Rust 1.96.0 — versioni tjetër stabil i gjuhës së programimit Rust. Përditësimi doli 28 maj 2026; mund ta instaloni me komandën standarde rustup update stable. Ndryshimet kryesore përfshijnë lloje të reja të intervaleve në core::range, stabilizimin e makros për kontrollin e ndeshjeve të shabllonëve, forcimin e sjelljes së ndërtimëve WebAssembly dhe rregullimet e dy vulnerabiliteteve në Cargo.
Ndryshimet kryesore
Llojet e reja të intervaleve core::range::Range*.
Në bibliotekën standarde janë stabilizuar variante të reja intervalesh: core::range::Range, RangeFrom, RangeInclusive dhe iteratorët përkatës. Ndryshe nga llojet e vjetra nga core::ops, intervalet e reja nuk e realizojnë drejtpërdrejt Iterator, por konvertohen në një iterator përmes IntoIterator. Falë kësaj, këto intervale mund të jenë Copy, që është e përshtatshme, për shembull, kur ruani një interval si fushë të një strukture. Sintaksa si 0..1 ende krijon llojet e vjetra të intervaleve, por në redaksinë e ardhshme të gjuhës planifikojnë ta kalojnë në llojet e reja.Janë shtuar assert_matches! dhe debug_assert_matches!.
Makros të reja lejojnë të kontrolloni se vlera përputhet me një model të caktuar. Në kuptim, kjo ngjan me assert!(matches!(…)), por në rast gabimi jepet një paraqitje Debug e vlerës, duke e bërë diagnostikimin më të lehtë. Në prelude, makros nuk u shtuan për të mos e komplikur me crate të njohura të palëve të treta, kështu që duhet t'i importoni qartë nga core ose std.Përgjigjja e platformave WebAssembly është ndryshuar.
Rust tani nuk i dërgon linker-it —allow-undefined për ndërtimet WebAssembly. Tani simbolet e paqarta gjatë lidhjes konsiderohen si gabim dhe nuk kthehen automatikisht në importe nga moduli "env". Kjo duhet ta zbulojë më herët ndonjë gabim ndërtimi dhe emra të gabuar simbolet. Sjellja e vjetër mund të rikthehet nëse është e nevojshme përmes RUSTFLAGS=-Clink-arg=—allow-undefined ose duke specifikuar qartë modulin e importuar wasm përmes #[link(wasm_import_module = "env")]Cargo mori rregullime për sigurinë.
Ndryshime në gjuhë.
Në lëshim janë përfshirë disa korrigjime dhe zgjerime të detajuara: është lejuar kalimi i metaparametrave expr të makros në cfg, është korrigjuar konvertimi i never-type në shprehjet-taksa, janë rregulluar raste të rralla të njoftimeve të gabuara për tipet e argumenteve të funksioneve, është shtuar mbështetje për regjistrat vektor të s390x në montimin inline, si dhe është lejuar përsëri përdorimi i konstantave të tipit ManuallyDrop si shabllone — kjo korrigon regresionin që u shfaq në Rust 1.94.0.Ndryshime në kompilator dhe platforma.
Për qëllimet Linux në LoongArch është aktivizuar mbështetje për relaksimin e lidhjeve — një optimizim lidhjeje që lejon thjeshtimin e disa kalimeve dhe thirrjeve pas vendosjes së kodit. Për riscv64gc-unknown-fuchsia është përditësuar konfigurimi bazë në profilin RVA22 me mbështetje për zgjerimet vektoriale.Përditësime të bibliotekës standarde.
Shtuar mbështetje për iterimin në intervale të numrave të plotë NonZero. Gjithashtu, është rregulluar përpunimi i vonuar i adresave të hostit në SGX përmes ToSocketAddr, ndërsa në dokumentacion dhe kontratat e brendshme është sqaruar përkufizimi i memories "të lejuar për lexim/shkrim": pika zero është përjashtuar nga përkufizimi i përgjithshëm, ndërsa përjashtimet përmenden veçmas për metoda të caktuara.API të stabilizuara.
Në mesin e interfaceve të stabilizuara janë assert_matches!, debug_assert_matches!, implementimet From për AssertUnwindSafe, LazyCell dhe LazyLock, si dhe lloje të reja dhe iteratorë të intervaleve nga core::range, duke përfshirë Range, RangeFrom, RangeToInclusive dhe iteratorët e tyre.Cargo: ndryshime për varësi dhe dokumentacion.
Tani një varësi mund të tregojë një depo Git dhe një registri alternativ në të njëjtën kohë: versioni Git do të përdoret lokalisht dhe gjatë publikimit do të përdoret versioni nga registri, në përputhje me sjelljen në crates.io. Gjithashtu, është shtuar mbështetje për target.’cfg(..)’.rustdocflags në konfigurimin e Cargo.Rustdoc tani e trajton më me kujdes dokumentacionin.
Shënimet për API të vazhduara tani renderizohen si dokumentacion i zakonshëm, pa përpunimin e mëparshëm nëpërmjet white-space: pre-wrap. Për më tepër, rustdoc nuk jep më lint missing_doc_code_examples për elementet brenda impl, dhe në panelin anësor të dokumentacionit metodat dhe funksionet e asociuara ndahet veçmas.Përputhshmëritë e mundshme.
Në lëshimin e ri ka disa ndryshime që mund të shfaqen në kodin jo tipik: janë korrigjuar format e disa #[repr(Int)] enum në rastet ekstreme, janë ndaluar disa konvertime të panevojshme të unsize në Pin, ndërtimet e WebAssembly tani krijojnë gabime nëse simbolet janë të pacaktuara, atributi aksidental i stabilizuar #![reexport_test_harness_main] është mbyllur përsëri nën një portë funsionale, është hequr parametri -Csoft-float, dhe versione minimale e LLVM të jashtme është rritur në 21. Për AVR, tipi c_double është ndryshuar në f32, pasi në këto qëllime C double është automatikisht 32-bit.
Burimi: linux.org.ru
