Rust 1.96.0

Udgivet en ny version Rust 1.96.0 — den seneste stabile version af programmeringssproget Rust. Opdateringen blev udgivet 28. maj 2026; den kan installeres med den standard kommando rustup update stable. De vigtigste ændringer omfatter nye række typer i core::range, stabilisering af makroer til mønstergodkendelse, stramning af opførsel ved WebAssembly-kompilering og rettelser af to sårbarheder i Cargo.

Vigtige ændringer

  • Nye række typer core::range::Range*.
    Der er blevet stabiliseret nye varianter af række i standardbiblioteket: core::range::Range, RangeFrom, RangeInclusive og de tilknyttede iteratorer. I modsætning til de gamle typer fra core::ops, implementerer de nye rækker ikke Iterator direkte, men konverteres til en iterator via IntoIterator. Dette gør det muligt for sådanne rækker at være Copy, hvilket er praktisk, fx ved at gemme en række som et felt i en struktur. Syntaksen som 0..1 skaber stadig de gamle række typer, men i en fremtidig version af sproget planlægges det at ændre den til de nye typer.

  • assert_matches! og debug_assert_matches! er tilføjet.
    De nye makroer tillader at kontrollere, at en værdi matcher et givet mønster. Det ligner assert!(matches!(…)), men ved fejl vises Debug-repræsentationen af værdien, hvilket forenkler diagnosticeringen. Makroerne er ikke tilføjet til prelude for at undgå konflikter med populære tredjeparts crate'er, så de skal importeres eksplicit fra core eller std.

  • WebAssembly-mål opførsel er ændret.
    Rust sender ikke længere —allow-undefined til linker for WebAssembly-kompileringer. Nu betragtes udefinerede symboler ved linking som en fejl i stedet for automatisk at blive omdannet til importer fra modulet "env". Dette bør tidligere identificere bindefejl og forkerte symbolnavne. Det gamle adfærd kan genoprettes om nødvendigt via RUSTFLAGS=-Clink-arg=—allow-undefined eller ved eksplicit at angive det importerede wasm-modul via #[link(wasm_import_module = "env")].

  • Cargo har fået sikkerhedsrettelser.
    I Rust 1.96.0 er to sårbarheder blevet lukket, som påvirker brugere af tredjeparts registries. CVE-2026-5223 relaterer til håndtering af symlink inden i tar-arkiver for crates: en ondsindet pakke fra en tredjeparts registry kunne overskrive cachen for en anden pakke fra samme registry. Fra og med Rust 1.96.0 afviser Cargo crate-arkiver med symlink. CVE-2026-5222 relaterer til normaliseringen af URL sparse registry og kunne i sjældne tilfælde føre til udsendelse af Cargo-token til en ondsindet registry. Ifølge Rust-holdet er brugere af crates.io ikke berørt af disse problemer.

  • Ændringer i sproget.
    Udgaven indeholder flere punktfejl og udvidelser: variabeloverførsel af expr-makrovariabler til cfg er blevet tilladt, never-typen er blevet justeret i tuple-udtryk, sjældne tilfælde af forkert typeudgangsforudsigelser for funktionsargumenter er blevet rettet, understøttelse af vektorregistre s390x er tilføjet i inline assembly, og brug af konstanter af typen ManuallyDrop som skabeloner er igen tilladt — dette løser et regressionsproblem, der opstod i Rust 1.94.0.

  • Ændringer i compilere og platforme.
    For Linux-mål på LoongArch er understøttelse af link relaxation inkluderet — en linkoptimering, der forenkler nogle overgange og opkald efter kodeplacering. For riscv64gc-unknown-fuchsia er den grundlæggende konfiguration opdateret til profilen RVA22 med understøttelse af vektorudvidelser.

  • Opdateringer af standardbiblioteket.
    Understøttelse af iteration over intervaller af NonZero-heltal er blevet tilføjet. Derudover er den forsinkede behandling af værtens adresser i SGX via ToSocketAddr blevet rettet, og i dokumentationen og interne kontrakter er definitionen af 'læse/skrive-godkendt' hukommelse blevet præciseret: nulpeger er udelukket fra den generelle definition, og undtagelser angives отдельно for specifikke metoder.

  • Stabiliserede API'er.
    Blandt de stabiliserede interfaces er assert_matches!, debug_assert_matches!, implementationer af From for AssertUnwindSafe, LazyCell og LazyLock, samt nye typer og intervaller fra core::range, inklusive Range, RangeFrom, RangeToInclusive og deres iteratorer.

  • Cargo: ændringer for afhængigheder og dokumentation.
    Nu kan en afhængighed samtidig angive et Git-repositorium og et alternativt registry: den lokale Git-version vil blive brugt, mens registreringsversionen bliver brugt ved publicering, ligesom adfærden med crates.io. Derudover er understøttelse af target.'cfg(..)'.rustdocflags blevet tilføjet i Cargo-konfigurationen.

  • Rustdoc er blevet mere omhyggelig med at behandle dokumentationen.
    Noter om deprecated API'er renderes nu som almindelig dokumentation uden tidligere specialbehandling gennem white-space: pre-wrap. Derudover udløser rustdoc ikke længere lint missing_doc_code_examples for elementer inden for impl, og metoder og associerede funktioner adskilles separat i dokumentationens sidemenu.

  • Mulige inkompatibiliteter.
    Udgivelsen har flere ændringer, der kan påvirke usædvanlig kode: layoutet af nogle #[repr(Int)] enum er blevet rettet i ekstreme tilfælde, visse unødvendige unsize-casting til Pin er blevet forbudt, WebAssembly-builds fejler nu ved udefinerede symboler, den tilfældigt stabiliserede attribut #![reexport_test_harness_main] er igen lukket inde i en feature gate, parameteren -Csoft-float er blevet fjernet, og den minimum version af det eksterne LLVM er hævet til 21. For AVR er typen c_double ændret til f32, da C double som standard er 32-bit på disse mål.

Kilde: linux.org.ru

Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere 🔥 Køb pålidelig webhosting med DDoS-beskyttelse, VPS VDS-servere | ProHoster