Udgivelsen er blevet offentliggjort Rust 1.96.0 — den seneste stabile version af programmeringssproget Rust. Opdateringen er blevet udgivet. 28 May 2026 år; den kan installeres ved hjælp af standardkommandoen rustup update stable. De vigtigste ændringer inkluderer nye range-typer i core::range, stabilisering af mønstermatchningsmakroer, stramning af WebAssembly-byggeadfærd og rettelser til to sårbarheder i Cargo.
Store ændringer
Nye områdetyper core::range::Range*.
Nye områdetyper er blevet stabiliseret i standardbiblioteket: core::range::Range, RangeFrom, RangeInclusive og deres tilhørende iteratorer. I modsætning til de gamle typer fra core::ops implementerer de nye områder ikke Iterator direkte, men konverteres til en iterator via IntoIterator. Dette gør det muligt at kopiere disse områder, hvilket er praktisk, for eksempel når man gemmer et område som et strukturfelt. Syntaks som 0..1 opretter i øjeblikket de gamle områdetyper, men det er planlagt at migrere det til de nye typer i en fremtidig version af sproget.Tilføjede assert_matches! og debug_assert_matches!.
Nye makroer giver dig mulighed for at kontrollere, om en værdi matcher et givet mønster. Dette minder i koncept om assert!(matches!(…)), men i tilfælde af en fejl udskrives en fejlfindingsrepræsentation af værdien, hvilket forenkler diagnosticeringen. Disse makroer blev ikke tilføjet til Prelude for at undgå konflikter med populære tredjeparts-crates, så de skal eksplicit importeres fra core eller std.Ændrede WebAssembly-målenes opførsel.
Rust sender ikke længere --allow-undefined til linkeren for WebAssembly-builds. Udefinerede symboler behandles nu som fejl under linkning i stedet for automatisk at blive konverteret til import fra "env"-modulet. Dette burde fange build-fejl og ugyldige symbolnavne tidligere. Den gamle adfærd kan om nødvendigt vendes tilbage ved hjælp af RUSTFLAGS=-Clink-arg=--allow-undefined eller ved eksplicit at angive det importerede wasm-modul ved hjælp af #[link(wasm_import_module = "env")].Cargo har modtaget sikkerhedsrettelser.
Ændringer i sproget.
Udgivelsen inkluderer: Adskillige mindre rettelser og forbedringer: Tilladte overførsel af expr-metavariabler fra makroer til cfg, rettet never-type-casting i tuple-udtryk, rettet sjældne tilfælde af forkerte typeinferenshints til funktionsargumenter, tilføjede understøttelse af s390x-vektorregistre i inline-assembling og gentillod ManuallyDrop-konstanter som skabeloner - dette retter en regression introduceret i Rust 1.94.0.Ændringer i compiler og platforme.
for LinuxUnderstøttelse af linkafslapning er blevet aktiveret for LoongArch-mål – en linkoptimering, der forenkler nogle overgange og kald efter kodeimplementering. For riscv64gc-unknown-fuchsia er basiskonfigurationen blevet opdateret til RVA22-profilen med understøttelse af vektorudvidelser.Standard biblioteksopdateringer.
Understøttelse af iteration over ikke-nul heltalsområder er blevet tilføjet. Lazy håndtering af værtsadresser i SGX via ToSocketAddr er også blevet rettet, og definitionen af "læsbar/skrivbar" hukommelse er blevet præciseret i dokumentationen og interne kontrakter: null-pointeren er blevet fjernet fra den generelle definition, og undtagelser er nu angivet separat for specifikke metoder.Stabiliserede API'er.
Blandt de stabiliserede grænseflader er assert_matches!, debug_assert_matches!, implementeringer af From til AssertUnwindSafe , LazyCell og LazyLock , samt nye områdetyper og iteratorer fra core::range, herunder Range, RangeFrom, RangeToInclusive og deres iteratorer.Cargo: Ændringer i afhængigheder og dokumentation.
En afhængighed kan nu angive både et Git-arkiv og et alternativt register: Git-versionen vil blive brugt lokalt, og registerversionen vil blive brugt under publicering, svarende til adfærden med crates.io. Understøttelse af target.'cfg(..)'.rustdocflags i Cargo-konfigurationen er også blevet tilføjet.Rustdoc håndterer nu dokumentation mere præcist.
Forældede API-noter gengives nu som almindelig dokumentation uden den tidligere særlige behandling via white-space: pre-wrap. Derudover gendanner rustdoc ikke længere missing_doc_code_examples for elementer i impl, og metoder og tilhørende funktioner er nu adskilt i dokumentationssidebjælken.Mulige uforeneligheder.
Udgivelsen indeholder adskillige ændringer, der kan forekomme i ikke-standardkode: layoutet af nogle #[repr(Int)] enums er blevet rettet i ekstreme tilfælde, og nogle ubrugelige unsize-casts i Pin er blevet deaktiveret. , WebAssembly-builds går nu ned på udefinerede symboler, den utilsigtet stabiliserede #![reexport_test_harness_main]-attribut er blevet funktionsgated igen, -Csoft-float-indstillingen er blevet fjernet, og den minimale eksterne LLVM-version er blevet øget til 21. For AVR er c_double-typen blevet ændret til f32, da C doubles som standard er 32-bit på disse mål.
Kilde: linux.org.ru
