Rust 1.96.0

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ë.
    Në Rust 1.96.0, janë adresuar dy vulnerabilitete që prekin përdoruesit e registry të palëve të treta. CVE-2026-5223 lidhur me menaxhimin e symlink brenda arkivave tar të crate: një paketë e dëmshme nga registry i palëve të treta mund të shkruajë mbi cache të një pakete tjetër nga e njëjta registry. Duke filluar nga Rust 1.96.0, Cargo refuzon arkivat e crate me symlink. CVE-2026-5222 ka lidhur me normalizimin e URL regjistrit sparse dhe në raste të rralla mund të kishte çuar në dërgimin e një Cargo-token në një regjistër keqdashës. Përdoruesit e crates.io, sipas ekipit Rust, nuk janë prekur nga këto probleme.

  • 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

Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS 🔥 Bleni hostim të besueshëm për faqe me mbrojtje nga DDoS, serverë VPS VDS | ProHoster