Se ha publicado el lanzamiento Rust 1.96.0 — otra versión estable del lenguaje de programación Rust. La actualización ha sido lanzada 28 de mayo de 2026; se puede instalar con el comando estándar rustup update stable. Los principales cambios incluyen nuevos tipos de rangos en core::range, estabilización de macros para la verificación de patrones, un endurecimiento del comportamiento de las compilaciones de WebAssembly y la corrección de dos vulnerabilidades en Cargo.
Principales cambios
Nuevos tipos de rangos core::range::Range*.
En la biblioteca estándar se han estabilizado nuevas variantes de rangos: core::range::Range, RangeFrom, RangeInclusive y sus iteradores relacionados. A diferencia de los viejos tipos de core::ops, los nuevos rangos no implementan Iterator directamente, sino que se convierten en un iterador a través de IntoIterator. Esto permite que tales rangos puedan ser Copy, lo cual es conveniente, por ejemplo, al almacenar un rango como un campo de una estructura. La sintaxis como 0..1 todavía crea los viejos tipos de rangos, pero en una futura edición del lenguaje se planea convertirla en nuevos tipos.Se han añadido assert_matches! y debug_assert_matches!.
Los nuevos macros permiten verificar que un valor coincide con un patrón dado. Conceptualmente es similar a assert!(matches!(…)), pero en caso de error, se muestra la representación Debug del valor, lo que facilita el diagnóstico. No se han añadido los macros al prelude para evitar conflictos con crates populares de terceros, por lo que deben ser importados explícitamente desde core o std.Se ha cambiado el comportamiento de los objetivos de WebAssembly.
Rust ya no pasa al enlazador —allow-undefined para las compilaciones de WebAssembly. Ahora los símbolos indefinidos al enlazar se consideran un error, y no se convierten automáticamente en importaciones del módulo "env". Esto debería detectar errores de compilación y nombres de símbolos incorrectos más rápidamente. El comportamiento antiguo se puede restaurar si es necesario usando RUSTFLAGS=-Clink-arg=—allow-undefined o especificando explícitamente el módulo wasm importado a través de #[link(wasm_import_module = "env")].Cargo ha recibido correcciones de seguridad.
Cambios en el lenguaje.
La versión incluye Varios ajustes puntuales y extensiones: se ha permitido la transmisión de las metavariables expr de macros en cfg, ajustada la conversión de never-type en expresiones de tuplas, corregidos casos raros de sugerencias incorrectas sobre los tipos de salida para los argumentos de funciones, se ha añadido soporte para registros vectoriales s390x en ensamblaje en línea, así como también se ha vuelto a permitir el uso de constantes del tipo ManuallyDrop como plantillas: esto corrige una regresión que apareció en Rust 1.94.0.Cambios en el compilador y plataformas.
Para los objetivos de Linux en LoongArch, se ha incluido el soporte para la relajación del enlace: una optimización de enlace que permite simplificar algunas transferencias y llamadas después de la colocación del código. Para riscv64gc-unknown-fuchsia, se ha actualizado la configuración base al perfil RVA22 con soporte para extensiones vectoriales.Actualizaciones de la biblioteca estándar.
Se ha añadido soporte para la iteración sobre rangos de números enteros NonZero. También se ha corregido el procesamiento diferido de direcciones de host en SGX a través de ToSocketAddr, y en la documentación y contratos internos se ha precisado la definición de memoria, "permitida para lectura/escritura": se excluye el puntero nulo de la definición general, y se indican excepciones por separado para métodos específicos.APIs estabilizadas.
Entre las interfaces estabilizadas se encuentran assert_matches!, debug_assert_matches!, implementaciones de From para AssertUnwindSafe, LazyCell y LazyLock, así como nuevos tipos e iteradores de rangos de core::range, incluyendo Range, RangeFrom, RangeToInclusive y sus iteradores.Cargo: cambios para dependencias y documentación.
Ahora una dependencia puede especificar simultáneamente un repositorio de Git y un registro alternativo: se utilizará la versión de Git de manera local, y al publicarse, la versión del registro, similar al comportamiento con crates.io. También se ha añadido soporte para target.’cfg(..)’.rustdocflags en la configuración de Cargo.Rustdoc se ha vuelto más cuidadoso al manejar la documentación.
Las notas sobre API obsoletas ahora se renderizan como documentación normal, sin el procesamiento especial anterior a través de white-space: pre-wrap. Además, rustdoc ya no emite lint missing_doc_code_examples para elementos dentro de impl, y en la barra lateral de la documentación, los métodos y funciones asociadas se separan de manera distinta.Posibles incompatibilidades.
En la nueva versión hay algunos cambios que pueden manifestarse en código no típico: se ha corregido la disposición de algunos #[repr(Int)] enums en casos extremos, se han prohibido algunas conversiones unsize innecesarias en Pin, las compilaciones de WebAssembly ahora fallan al encontrar símbolos indefinidos, el atributo aleatorizado #![reexport_test_harness_main] vuelve a estar cerrado por un feature gate, se ha eliminado el parámetro -Csoft-float y la versión mínima de LLVM externo se ha elevado a 21. Para AVR, el tipo c_double se ha cambiado a f32, ya que en estos objetivos C double por defecto es de 32 bits.
Fuente: linux.org.ru
