Publicouse o comunicado Ferruxe 1.96.0 — a última versión estable da linguaxe de programación Rust. Publicouse a actualización. 28 maio 2026 anos; pódese instalar usando o comando estándar rustup update stable. As principais modificacións inclúen novos tipos de rango en core::range, estabilización das macros de coincidencia de patróns, axuste do comportamento de compilación de WebAssembly e correccións para dúas vulnerabilidades en Cargo.
Cambios importantes
Novos tipos de rango core::range::Range*.
Os novos tipos de rango foron estabilizados na biblioteca estándar: core::range::Range, RangeFrom, RangeInclusive e os seus iteradores asociados. A diferenza dos tipos antigos de core::ops, os novos rangos non implementan Iterator directamente, senón que se converten nun iterador mediante IntoIterator. Isto permite que estes rangos sexan copiables, o que é conveniente, por exemplo, ao almacenar un rango como un campo de estrutura. Unha sintaxe como 0..1 crea actualmente os tipos de rango antigos, pero está previsto migrar aos novos tipos nunha versión futura da linguaxe.Engadíronse assert_matches! e debug_assert_matches!.
As novas macros permiten comprobar que un valor coincide cun patrón determinado. Isto é similar en concepto a assert!(matches!(…)), pero en caso de erro, imprímese unha representación de depuración do valor, o que simplifica os diagnósticos. Estas macros non se engadiron a Prelude para evitar conflitos con caixas populares de terceiros, polo que deben importarse explicitamente desde core ou std.Modificouse o comportamento dos obxectivos de WebAssembly.
Rust xa non pasa --allow-undefined ao linker para as compilacións de WebAssembly. Os símbolos non definidos agora trátanse como erros durante a vinculación, en lugar de converterse automaticamente en importacións desde o módulo "env". Isto debería detectar erros de compilación e nomes de símbolos non válidos antes. O comportamento antigo pódese reverter, se é necesario, usando RUSTFLAGS=-Clink-arg=--allow-undefined ou especificando explicitamente o módulo wasm importado usando #[link(wasm_import_module = "env")].A carga recibiu correccións de seguridade.
Cambios na linguaxe.
O lanzamento inclúe: Varias correccións e melloras menores: permitiuse pasar metavariables expr de macros a cfg, corrixiuse a conversión de tipo nunca antes definido en expresións de tuplas, corrixíronse casos pouco frecuentes de suxestións de inferencia de tipo incorrectas para argumentos de funcións, engadiuse compatibilidade con rexistros vectoriais s390x en ensamblaxe en liña e volveuse permitir as constantes ManuallyDrop como modelos; isto corrixe unha regresión introducida en Rust 1.94.0.Cambios no compilador e nas plataformas.
Para LinuxActivouse a compatibilidade coa relaxación de ligazóns para os obxectivos de LoongArch, unha optimización de ligazóns que simplifica algunhas transicións e chamadas despois da implementación do código. Para riscv64gc-unknown-fuchsia, a configuración base actualizouse ao perfil RVA22 con compatibilidade con extensións vectoriais.Actualizacións estándar da biblioteca.
Engadiuse compatibilidade coa iteración sobre rangos de enteiros distintos de cero. Tamén se corrixiu a xestión preguiceira dos enderezos de host en SGX a través de ToSocketAddr e clarificouse a definición de memoria "lexible/escribible" na documentación e nos contratos internos: eliminouse o punteiro nulo da definición xeral e as excepcións agora especifícanse por separado para métodos específicos.API estabilizadas.
Entre as interfaces estabilizadas están assert_matches!, debug_assert_matches!, implementacións de From para AssertUnwindSafe , LazyCell e LazyLock , así como novos tipos de rango e iteradores de core::range, incluíndo Range, RangeFrom, RangeToInclusive e os seus iteradores.Carga: Cambios nas dependencias e na documentación.
Unha dependencia agora pode especificar tanto un repositorio Git como un rexistro alternativo: a versión de Git usarase localmente e a versión do rexistro usarase durante a publicación, de xeito similar ao comportamento con crates.io. Tamén se engadiu compatibilidade con target.'cfg(..)'.rustdocflags na configuración de Cargo.Rustdoc agora xestiona a documentación con maior precisión.
As notas da API obsoletas agora represéntanse como documentación normal, sen o procesamento especial anterior mediante white-space: pre-wrap. Ademais, rustdoc xa non elimina missing_doc_code_examples para os elementos dentro de impl, e os métodos e as funcións asociadas agora sepáranse na barra lateral da documentación.Posibles incompatibilidades.
A versión contén varios cambios que poden aparecer en código non estándar: corrixiuse a disposición dalgunhas enumeracións #[repr(Int)] en casos extremos e desactiváronse algunhas conversións de tamaño inútiles en Pin. , as compilacións de WebAssembly agora fallan en símbolos non definidos, o atributo #![reexport_test_harness_main] estabilizado accidentalmente volveu ser limitado por funcionalidades, a opción -Csoft-float eliminouse e a versión mínima de LLVM externa aumentouse a 21. Para AVR, o tipo c_double cambiouse a f32, xa que os dobres de C son de 32 bits por defecto nestes destinos.
Fonte: linux.org.ru
