El comunicat s'ha publicat Rovell 1.96.0 — la darrera versió estable del llenguatge de programació Rust. L'actualització ja s'ha publicat. 28 maig de l'any 2026; es pot instal·lar amb l'ordre estàndard rustup update stable. Els principals canvis inclouen nous tipus de rang a core::range, estabilització de les macros de coincidència de patrons, enduriment del comportament de compilació de WebAssembly i correccions per a dues vulnerabilitats a Cargo.
Canvis importants
Nous tipus d'interval core::range::Range*.
Els nous tipus de rang s'han estabilitzat a la biblioteca estàndard: core::range::Range, RangeFrom, RangeInclusive i els seus iteradors associats. A diferència dels tipus antics de core::ops, els nous rangs no implementen Iterator directament, sinó que es converteixen en un iterador mitjançant IntoIterator. Això permet que aquests rangs siguin copiables, cosa que és convenient, per exemple, quan s'emmagatzema un rang com a camp d'estructura. Una sintaxi com 0..1 actualment crea els tipus de rang antics, però es preveu migrar-los als nous tipus en una versió futura del llenguatge.S'han afegit assert_matches! i debug_assert_matches!.
Les noves macros permeten comprovar que un valor coincideixi amb un patró determinat. Això és similar en concepte a assert!(matches!(…)), però en cas d'error, s'imprimeix una representació de depuració del valor, cosa que simplifica els diagnòstics. Aquestes macros no s'han afegit a Prelude per evitar conflictes amb crates populars de tercers, per la qual cosa s'han d'importar explícitament des del nucli o std.S'ha canviat el comportament dels objectius de WebAssembly.
Rust ja no passa --allow-undefined a l'enllaçador per a les compilacions de WebAssembly. Els símbols no definits ara es tracten com a errors durant l'enllaç, en lloc de convertir-se automàticament en importacions des del mòdul "env". Això hauria de detectar els errors de compilació i els noms de símbols no vàlids abans. El comportament antic es pot revertir, si cal, utilitzant RUSTFLAGS=-Clink-arg=--allow-undefined o especificant explícitament el mòdul wasm importat utilitzant #[link(wasm_import_module = "env")].La càrrega ha rebut correccions de seguretat.
Canvis en el llenguatge.
El llançament inclou: Diverses correccions i millores menors: S'han permès passar metavariables expr de macros a cfg, s'ha corregit la conversió de tipus que no s'havia convertit mai en expressions de tupla, s'han corregit casos rars de pistes d'inferència de tipus incorrectes per als arguments de funció, s'ha afegit compatibilitat amb els registres vectorials s390x en l'assemblador en línia i s'han tornat a permetre les constants ManuallyDrop com a plantilles; això corregeix una regressió introduïda a Rust 1.94.0.Canvis en el compilador i les plataformes.
Per LinuxS'ha habilitat la compatibilitat amb la relaxació d'enllaços per a les destinacions de LoongArch, una optimització d'enllaços que simplifica algunes transicions i crides després del desplegament del codi. Per a riscv64gc-unknown-fuchsia, la configuració base s'ha actualitzat al perfil RVA22 amb compatibilitat amb extensions vectorials.Actualitzacions estàndard de la biblioteca.
S'ha afegit compatibilitat amb la iteració sobre rangs d'enters diferents de zero. També s'ha corregit la gestió diferida de les adreces d'amfitrió a SGX mitjançant ToSocketAddr i s'ha aclarit la definició de memòria "llegible/escrivible" a la documentació i als contractes interns: s'ha eliminat el punter nul de la definició general i ara s'especifiquen les excepcions per separat per a mètodes específics.API estabilitzades.
Entre les interfícies estabilitzades hi ha assert_matches!, debug_assert_matches!, implementacions de From per AssertUnwindSafe , LazyCell i LazyLock , així com nous tipus de rang i iteradors de core::range, incloent-hi Range, RangeFrom, RangeToInclusive i els seus iteradors.Càrrega: Canvis a les dependències i la documentació.
Una dependència ara pot especificar tant un repositori Git com un registre alternatiu: la versió de Git s'utilitzarà localment i la versió del registre s'utilitzarà durant la publicació, de manera similar al comportament amb crates.io. També s'ha afegit compatibilitat amb target.'cfg(..)'.rustdocflags a la configuració de Cargo.Rustdoc ara gestiona la documentació amb més precisió.
Les notes de l'API obsoletes ara es representen com a documentació normal, sense el processament especial anterior mitjançant white-space: pre-wrap. A més, rustdoc ja no elimina els missing_doc_code_examples per als elements dins d'impl, i els mètodes i les funcions associades ara estan separats a la barra lateral de documentació.Possibles incompatibilitats.
La versió conté diversos canvis que poden aparèixer en codi no estàndard: s'ha corregit el disseny d'alguns enums #[repr(Int)] en casos extrems i s'han desactivat algunes conversions inútils de "unsize" a Pin. , Les compilacions de WebAssembly ara es bloquegen en símbols no definits, l'atribut #![reexport_test_harness_main] estabilitzat accidentalment s'ha tornat a limitar per funcions, s'ha eliminat l'opció -Csoft-float i la versió mínima externa de LLVM s'ha augmentat a 21. Per a AVR, el tipus c_double s'ha canviat a f32, ja que els C doubles són de 32 bits per defecte en aquests objectius.
Font: linux.org.ru
