Rust 1.96.0

Lëshimi i një versioni të ri Rust 1.96.0 — një version stabil të gjuhës së programimit Rust. Risdizajni doli më 28 maj 2026; mund ta instaloni me komandën standarde rustup update stable. Ndryshimet kryesore përfshijnë llojet e reja të intervaleve në core::range, stabilizimin e makros për kontrollin e përputhshmërisë me modelet, rreptësimin e sjelljes së ndërtimeve WebAssembly dhe rregullimin e dy vulnerabilitetëve në Cargo.

Ndryshimet kryesore

  • Llojet e reja të intervaleve core::range::Range*.
    Në bibliotekën standarde janë stabilizuar variante të reja të intervaleve: core::range::Range, RangeFrom, RangeInclusive dhe iteratorët përkatës. Ndryshe nga llojet e vjetra të core::ops, intervalet e reja nuk realizojnë direkt Iterator, por transformohen në një iterator përmes IntoIterator. Për këtë arsye, këto intervale mund të jenë Copy, gjë që është e dobishme, për shembull, kur ruani një interval si një fushë strukture. Sintaksa si 0..1 ende krijon llojet e vjetra të intervaleve, por në redaksinë në vijim të gjuhës është planifikuar të kalojë në tipet e reja.

  • Shtuar assert_matches! dhe debug_assert_matches!.
    Makros të reja lejojnë të kontrolloni se vlera përputhet me një model të caktuar. Nënkuptimi është i ngjashëm me assert!(matches!(…)), por në rast gabimi shfaqet përfaqësimi Debug i vlerës, gjë që lehtëson diagnozën. Në prelude makros nuk janë shtuar, për të shmangur konfliktet me crate populare të palëve të treta, prandaj duhet t'i importoni në mënyrë të qartë nga core ose std.

  • Ndryshuar sjelljen e qëllimeve WebAssembly.
    Rust nuk e dërgon më linker-it —allow-undefined për ndërtimet WebAssembly. Tani simbolet e paqartë gjatë linkimit konsiderohen një gabim, jo automatikisht importohen nga moduli "env". Kjo duhet ta zbulojë më herët gabimet e ndërtimit dhe emrat e gabuar të simboleve. Sjellja e vjetër mund të rikthehet nëse nevojitet përmes RUSTFLAGS=-Clink-arg=—allow-undefined ose duke shprehur qartë modulon wasm që importohet përmes #[link(wasm_import_module = "env")].

  • Cargo mori rregullime sigurie.
    Në Rust 1.96.0 u mbyllën dy vulnerabilitete që ndikuan përdoruesit e registrive të palëve të treta. CVE-2026-5223 është e lidhur me trajtimin e symlink brenda arkivave tar të crate: një paketë e dëmshme nga një regsitër i palës së tretë mund të përmbysë keqin e një pakete tjetër nga i njëjti regjistër. Duke filluar nga Rust 1.96.0, Cargo refuzon arkivat e crate me symlink. CVE-2026-5222 është e lidhur me normalizimin e URL sparse registry dhe nën rrethana të rralla mund të sjellë dërgimin e tokenit Cargo në një regjistër të dëmshëm. Përdoruesit e crates.io, sipas ekipit të Rust, nuk janë prekur nga këto probleme.

  • Një ndryshim në gjuhë.
    Në version u përfshirë disa korrigjime dhe zgjerime të punktura: u lejohet transferimi i variablave expr të makrosë në cfg, korrigjimi i konvertimit të never-type në shprehjet-tuples, u korrigjua rastet e rralla të sugjerimeve të gabuara të tipeve për argumentet e funksioneve, shtoi mbështetje për regjistrat vektorë s390x në assembly inline, si dhe u lejua përsëri përdorimi i konstantave të llojit ManuallyDrop si template — kjo korrigjon regresionin e shfaqur në Rust 1.94.0.

  • Ndryshimet në kompilues dhe platforma.
    Për objektivat Linux në LoongArch u aktivizua mbështetje për link relaxation — një optimizim lidhjeje që lejon thjeshtimin e disa kalimeve dhe thirrjeve pas vendosjes së kodit. Për riscv64gc-unknown-fuchsia, konfigurimi bazë u përditësua në profilin RVA22 me mbështetje për zgjerimet vector.

  • Përditësimet e bibliotekës standarde.
    U shtua mbështetje për iterimin në ranges të numrave NonZero-të të plotë. Gjithashtu, u korrigjua trajtimi i vonuar i adresave të hostit në SGX përmes ToSocketAddr, dhe në dokumentacionin dhe kontratat e brendshme u sqarua definicioni i memories, 'të lejuar për lexim/shkrim': pointeri zero përjashtohet nga definicioni i përgjithshëm, dhe përjashtimet specifikohen veçmas për metoda të caktuara.

  • API të stabilizuara.
    Mes API-eve të stabilizuar janë assert_matches!, debug_assert_matches!, implementimet From<T> për AssertUnwindSafe<T>, LazyCell<T, F> dhe LazyLock<T, F>, si dhe tipe të reja dhe iteratorë ranges nga core::range, duke përfshirë Range, RangeFrom, RangeToInclusive dhe iteratorët e tyre.

  • Cargo: ndryshime për varësitë dhe dokumentacionin.
    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 lokal, dhe gjatë publikimit — versioni nga registri, në përputhje me sjelljen me crates.io. Gjithashtu, u shtua mbështetje për target.’cfg(..)’.rustdocflags në konfigurimin e Cargo.

  • Rustdoc tani e trajton dokumentacionin më të kujdesshëm.
    Shënimet për API të braktisura tani renderohen si dokumentacion i zakonshëm, pa përpunimin e mëparshëm të veçantë përmes 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ë panelet anësore të dokumentacionit, metodat dhe funksionet e asociuara ndahen veçmas.

  • Mundësitë e paqartësive.
    Në këtë version ka disa ndryshime që mund të shfaqen në kodin jo tipik: është korrigjuar renditja e disa #[repr(Int)] enum në raste ekstreme, janë të ndaluara disa transformime të padobishme unsize në Pin, ndërtimet WebAssembly tani bien kur ka simbole të paqartë, atributi i stabilizuar rastësisht #![reexport_test_harness_main] është sërish nën një portë funksionale, është eliminuar parametri -Csoft-float, dhe versioni minimal i LLVM të jashtëm është rritur në 21. Për AVR, tipi c_double është ndryshuar në f32, pasi në këto qëllime C double në mënyrë të paracaktuar është 32-bit.

Burimi: linux.org.ru

Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS 🔥 Blini hostim të besueshëm për faqe interneti me mbrojtje DDoS, serverë VPS VDS - ProHoster