Rost 1.96.0

Utgåvan har publicerats Rost 1.96.0 — den senaste stabila versionen av programmeringsspråket Rust. Uppdateringen har släppts. 28 maj 2026 år; det kan installeras med standardkommandot rustup update stable. De viktigaste ändringarna inkluderar nya intervalltyper i core::range, stabilisering av mönstermatchningsmakron, skärpning av WebAssembly-byggbeteende och korrigeringar för två sårbarheter i Cargo.

Stora förändringar

  • Nya intervalltyper core::range::Range*.
    Nya intervalltyper har stabiliserats i standardbiblioteket: core::range::Range, RangeFrom, RangeInclusive och deras tillhörande iteratorer. Till skillnad från de gamla typerna från core::ops implementerar de nya intervallen inte Iterator direkt, utan konverteras till en iterator via IntoIterator. Detta gör att dessa intervall kan kopieras, vilket är praktiskt när man till exempel lagrar ett intervall som ett strukturfält. Syntax som 0..1 skapar för närvarande de gamla intervalltyperna, men det är planerat att migreras till de nya typerna i en framtida version av språket.

  • Lade till assert_matches! och debug_assert_matches!.
    Nya makron låter dig kontrollera att ett värde matchar ett givet mönster. Detta liknar konceptet assert!(matches!(…)), men i händelse av ett fel skrivs en felsökningsrepresentation av värdet ut, vilket förenklar diagnostiken. Dessa makron lades inte till i Prelude för att undvika konflikter med populära tredjepartspaket, så de måste importeras explicit från core eller std.

  • Ändrade beteendet hos WebAssembly-mål.
    Rust skickar inte längre --allow-undefined till länkaren för WebAssembly-byggen. Odefinierade symboler behandlas nu som fel under länkning, snarare än att automatiskt konverteras till importer från modulen "env". Detta bör fånga upp byggfel och ogiltiga symbolnamn tidigare. Det gamla beteendet kan återställas, om det behövs, med hjälp av RUSTFLAGS=-Clink-arg=--allow-undefined eller genom att explicit ange den importerade wasm-modulen med #[link(wasm_import_module = "env")].

  • Cargo har fått säkerhetskorrigeringar.
    Rust 1.96.0 åtgärdar två sårbarheter som påverkar användare av tredjepartsregister. CVE-2026-5223 Relaterat till hanteringen av symboliska länkar i crate-tarballar: ett skadligt paket från ett tredjepartsregister kan skriva över cachen för ett annat paket från samma register. Från och med Rust 1.96.0 avvisar Cargo crate-arkiv som innehåller symboliska länkar. CVE-2026-5222 Det här problemet rör URL-normalisering i det glesregistrerade registret och kan under sällsynta omständigheter resultera i att en Cargo-token skickas till ett skadligt register. Enligt Rust-teamet påverkas inte crates.io-användare av dessa problem.

  • Språkförändringar.
    Utgåvan inkluderar: Flera mindre korrigeringar och förbättringar: Tillåtet att skicka expr-metavariabler från makron till cfg, korrigerat never-type-omvandling i tupeluttryck, åtgärdat sällsynta fall av felaktiga typinferenshintar för funktionsargument, lagt till stöd för s390x-vektorregister i inline-assembling och återtillåtet ManuallyDrop-konstanter som mallar – detta åtgärdar en regression som introducerades i Rust 1.94.0.

  • Förändringar i kompilator och plattformar.
    för LinuxStöd för länkavslappning har aktiverats för LoongArch-mål – en länkningsoptimering som förenklar vissa övergångar och anrop efter koddistribution. För riscv64gc-unknown-fuchsia har baskonfigurationen uppdaterats till RVA22-profilen med stöd för vektortillägg.

  • Standarduppdateringar för biblioteket.
    Stöd för iterering över icke-noll heltalsområden har lagts till. Lat hantering av värdadresser i SGX via ToSocketAddr har också åtgärdats, och definitionen av "läsbart/skrivbart" minne har förtydligats i dokumentationen och interna kontrakt: nullpekaren har tagits bort från den allmänna definitionen, och undantag specificeras nu separat för specifika metoder.

  • Stabiliserade API:er.
    Bland de stabiliserade gränssnitten finns assert_matches!, debug_assert_matches!, implementeringar av From för AssertUnwindSafe , LazyCell och LazyLock , såväl som nya intervalltyper och iteratorer från core::range, inklusive Range, RangeFrom, RangeToInclusive och deras iteratorer.

  • Cargo: Ändringar av beroenden och dokumentation.
    Ett beroende kan nu ange både ett Git-arkiv och ett alternativt register: Git-versionen kommer att användas lokalt och registerversionen kommer att användas under publicering, liknande beteendet med crates.io. Stöd för target.'cfg(..)'.rustdocflags i Cargo-konfigurationen har också lagts till.

  • Rustdoc hanterar nu dokumentation mer exakt.
    Föråldrade API-anteckningar renderas nu som vanlig dokumentation, utan den tidigare specialbehandlingen via white-space: pre-wrap. Dessutom lintar rustdoc inte längre missing_doc_code_examples för element inuti impl, och metoder och tillhörande funktioner är nu separerade i dokumentationssidofältet.

  • Möjliga inkompatibiliteter.
    Versionen innehåller flera ändringar som kan dyka upp i icke-standardkod: layouten för vissa #[repr(Int)]-uppräkningar har åtgärdats i extrema fall, och vissa onödiga ostorlekskonverteringar i Pin har inaktiverats. , WebAssembly-byggen kraschar nu på odefinierade symboler, det oavsiktligt stabiliserade attributet #![reexport_test_harness_main] har funktionsgränsats igen, alternativet -Csoft-float har tagits bort och den lägsta externa LLVM-versionen har ökats till 21. För AVR har typen c_double ändrats till f32, eftersom C doubles är 32-bitars som standard på dessa mål.

Källa: linux.org.ru

Köp pålitlig hosting för webbplatser med DDoS-skydd, VPS VDS-servrar 🔥 Köp pålitlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster