Rust 1.96.0

Utgivelsen er publisert Rust 1.96.0 — den nyeste stabile versjonen av programmeringsspråket Rust. Oppdateringen er utgitt. 28 May 2026 år; den kan installeres ved hjelp av standardkommandoen rustup update stable. De viktigste endringene inkluderer nye områdetyper i core::range, stabilisering av mønstermatchingsmakroer, strammere WebAssembly-byggeoppførsel og rettelser for to sårbarheter i Cargo.

Store endringer

  • Nye områdetyper core::range::Range*.
    Nye områdetyper har blitt stabilisert i standardbiblioteket: core::range::Range, RangeFrom, RangeInclusive og deres tilhørende iteratorer. I motsetning til de gamle typene fra core::ops, implementerer ikke de nye områdene Iterator direkte, men konverteres til en iterator via IntoIterator. Dette gjør at disse områdene kan kopieres, noe som er praktisk når man for eksempel lagrer et område som et strukturfelt. Syntaks som 0..1 oppretter for øyeblikket de gamle områdetypene, men det er planlagt at det skal migreres til de nye typene i en fremtidig versjon av språket.

  • La til assert_matches! og debug_assert_matches!.
    Nye makroer lar deg sjekke at en verdi samsvarer med et gitt mønster. Dette ligner i konsept på assert!(matches!(…)), men i tilfelle en feil skrives det ut en feilsøkingsrepresentasjon av verdien, noe som forenkler diagnostikken. Disse makroene ble ikke lagt til i Prelude for å unngå konflikter med populære tredjeparts crates, så de må importeres eksplisitt fra core eller std.

  • Endret oppførselen til WebAssembly-mål.
    Rust sender ikke lenger --allow-undefined til lenkeren for WebAssembly-bygg. Udefinerte symboler behandles nå som feil under lenking, i stedet for automatisk å bli konvertert til import fra "env"-modulen. Dette burde fange opp byggefeil og ugyldige symbolnavn tidligere. Den gamle oppførselen kan om nødvendig reverseres ved å bruke RUSTFLAGS=-Clink-arg=--allow-undefined eller ved å eksplisitt spesifisere den importerte wasm-modulen ved å bruke #[link(wasm_import_module = "env")].

  • Cargo har mottatt sikkerhetsrettinger.
    Rust 1.96.0 retter opp to sårbarheter som påvirker brukere av tredjepartsregister. CVE-2026-5223 Relatert til håndtering av symbolske lenker i crate-tarballer: en skadelig pakke fra et tredjepartsregister kan overskrive hurtigbufferen til en annen pakke fra samme register. Fra og med Rust 1.96.0 avviser Cargo crate-arkiver som inneholder symbolske lenker. CVE-2026-5222 Dette problemet er knyttet til URL-normalisering i det sparse registeret, og kan under sjeldne omstendigheter føre til at et Cargo-token sendes til et skadelig register. Ifølge Rust-teamet er ikke crates.io-brukere berørt av disse problemene.

  • Endringer i språket.
    Utgivelsen inkluderer: Flere mindre rettelser og forbedringer: Tillot overføring av expr-metavariabler fra makroer til cfg, korrigerte never-type-konvertering i tupleuttrykk, fikset sjeldne tilfeller av feil typeinferansehint for funksjonsargumenter, la til støtte for s390x-vektorregistre i innebygd montering, og tillot ManuallyDrop-konstanter som maler igjen – dette fikser en regresjon introdusert i Rust 1.94.0.

  • Endringer i kompilator og plattformer.
    For LinuxStøtte for lenkeavslapning er aktivert for LoongArch-mål – en lenkeoptimalisering som forenkler noen overganger og kall etter kodedistribusjon. For riscv64gc-unknown-fuchsia er basiskonfigurasjonen oppdatert til RVA22-profilen med støtte for vektorutvidelser.

  • Standard bibliotekoppdateringer.
    Støtte for iterering over ikke-null heltallsområder er lagt til. Lat håndtering av vertsadresser i SGX via ToSocketAddr er også fikset, og definisjonen av "lesbart/skrivbart" minne er avklart i dokumentasjonen og interne kontrakter: nullpekeren er fjernet fra den generelle definisjonen, og unntak er nå spesifisert separat for spesifikke metoder.

  • Stabiliserte API-er.
    Blant de stabiliserte grensesnittene er assert_matches!, debug_assert_matches!, implementeringer av From for AssertUnwindSafe , LazyCell og LazyLock , samt nye områdetyper og iteratorer fra core::range, inkludert Range, RangeFrom, RangeToInclusive og deres iteratorer.

  • Cargo: Endringer i avhengigheter og dokumentasjon.
    En avhengighet kan nå spesifisere både et Git-repository og et alternativt register: Git-versjonen vil bli brukt lokalt, og registerversjonen vil bli brukt under publisering, på samme måte som med crates.io. Støtte for target.'cfg(..)'.rustdocflags i Cargo-konfigurasjonen er også lagt til.

  • Rustdoc håndterer nå dokumentasjon mer nøyaktig.
    Utdaterte API-notater gjengis nå som vanlig dokumentasjon, uten den tidligere spesialbehandlingen via white-space: pre-wrap. I tillegg henter ikke rustdoc lenger frem missing_doc_code_examples for elementer i impl, og metoder og tilhørende funksjoner er nå atskilt i dokumentasjonssidefeltet.

  • Mulige uforenligheter.
    Utgivelsen inneholder flere endringer som kan dukke opp i ikke-standard kode: oppsettet til noen #[repr(Int)]-enums har blitt fikset i ekstreme tilfeller, og noen ubrukelige ustørrelseskonverteringer i Pin har blitt deaktivert. , WebAssembly-bygg krasjer nå på udefinerte symboler, det utilsiktet stabiliserte #![reexport_test_harness_main]-attributtet har blitt funksjonsbegrenset igjen, -Csoft-float-alternativet er fjernet, og minimumsversjonen av den eksterne LLVM-en er økt til 21. For AVR er c_double-typen endret til f32, siden C-doubles er 32-bit som standard på disse målene.

Kilde: linux.org.ru

Kjøp pålitelig hosting for nettsteder med DDoS-beskyttelse, VPS VDS-servere 🔥 Kjøp pålitelig webhotell med DDoS-beskyttelse, VPS VDS-servere | ProHoster