- La versión estable Rust 1.97.0 cambia la forma en que se generan los símbolos de los artefactos de compilación y el flujo de manejo de advertencias de build, y se puede actualizar con
rustup update stable
- symbol mangling v0 pasa a ser el valor predeterminado estable, cambiando a un esquema de nombres de símbolos propio de Rust, mientras que el método anterior basado en Itanium ABI avanza hacia su eliminación
- Cargo permite controlar las advertencias como
allow, warn o deny mediante CARGO_BUILD_WARNINGS en lugar de RUSTFLAGS=-Dwarnings, lo que facilita separar las políticas de CI y builds locales
- rustc muestra la salida del linker incluso cuando el enlace fue exitoso, como advertencias
linker_messages; este lint actualmente no se ve afectado por el grupo de lints warnings
- La biblioteca estándar incluye la estabilización de
Default para RepeatN, Send para std::fs::File en UEFI, métodos de bits para enteros y NonZero, y char::is_control en const context
Actualización a Rust 1.97.0
- Rust 1.97.0 es una versión estable, y quienes ya hayan instalado Rust con
rustup pueden actualizar con el siguiente comando
rustup update stable
- Si no tienes
rustup, puedes obtenerlo en la página de instalación de rustup del sitio web de Rust
- Los cambios detallados están resumidos en las detailed release notes for 1.97.0
- Si quieres participar en las pruebas de futuros lanzamientos, puedes usar los canales beta/nightly con
rustup default beta o rustup default nightly, y reportar los bugs que encuentres en el Rust issue tracker
Cambios en el comportamiento de compilación y build en stable
-
symbol mangling v0 activado por defecto
- Cuando Rust se compila a archivos objeto o binarios, cada elemento, como funciones o
static, debe tener un símbolo único a nivel global
- Para evitar colisiones al enlazar distintos programas Rust entre sí, Rust aplica mangling al nombre original de los elementos incorporando contexto como la ruta del módulo, el crate donde se define y genéricos
- El mangling anterior se basaba en Itanium ABI, que también se usa en algunos casos en C++
- El nuevo método preserva los valores de instanciación de parámetros genéricos y reduce el problema de que siguiera siendo necesario un demangling personalizado debido a inconsistencias por usar solo parcialmente Itanium ABI
- Desde Rust 1.59 era posible elegir el esquema de mangling propio de Rust con
-Csymbol-mangling-version=v0, y desde noviembre de 2025 se aplica como valor predeterminado en nightly
- En Rust 1.97, este método pasa a ser el valor predeterminado de Rust estable, y el mangling legacy solo puede activarse en nightly
- El plan actual es eliminar por completo el mangling legacy
- Puedes ver más detalles en el artículo anterior switching to v0 mangling on nightly
-
Control de advertencias en Cargo
- Tratar las advertencias como fallas de build en CI es una práctica común, y antes normalmente se usaba
RUSTFLAGS=-Dwarnings
- Desde Rust 1.97, Cargo controla directamente la relación entre advertencias y éxito del build
allow: oculta las advertencias
warn: valor predeterminado que las muestra sin hacer fallar el build
deny: rechaza las advertencias y las trata como una falla de build
- Como esta función determina el comportamiento mediante la configuración de Cargo, no invalida la caché de build predeterminada
- Si después de un refactor quieres reducir temporalmente el ruido de advertencias mientras corriges errores, puedes ejecutarlo así
CARGO_BUILD_WARNINGS=allow cargo check
- En CI se puede configurar
CARGO_BUILD_WARNINGS=deny para rechazar advertencias
- Si se usa junto con
--keep-going, se pueden recopilar todos los errores y advertencias sin detenerse en el primer package que falle
- La configuración detallada está en la
build.warnings documentation de Cargo
-
Visualización predeterminada de la salida del linker
- rustc invoca el linker en nombre del usuario, y antes ocultaba por defecto la salida del linker si el link era exitoso
- Desde Rust 1.97, los mensajes del linker se muestran por defecto y se emiten como un warning lint como el siguiente
warning: linker stderr: ignoring deprecated linker optimization setting '1'
|
= note: `#[warn(linker_messages)]` on by default
- rustc filtra mensajes comunes del linker que se diagnostican como falsos positivos o comportamiento intencional
- Tras dejar de ocultar esta salida en nightly, se corrigieron varios defectos
- Actualmente
linker_messages es un lint especial, y no se ve afectado por el grupo de lints warnings
- Es común que rustc no pueda controlar con precisión la salida del linker, y la salida podría aparecer solo en algunas plataformas
- Si parece una salida falsa positiva del linker, puedes enviar un issue
- Para ocultar la advertencia, puedes configurar el nivel del lint como
allow, y agregar la siguiente sección lints a Cargo.toml
[lints.rust]
linker_messages = "allow"
API estabilizadas
- En Rust 1.97, las siguientes API se estabilizaron como stable
char::is_control, que ya era stable, ahora también es stable en const context
Changelogs relacionados
- Los cambios completos pueden consultarse en los changelogs de Rust, Cargo y Clippy
1 comentarios
Opiniones en Lobste.rs
Que en Rust 1.97 Cargo ahora pueda controlar la relación entre las advertencias y si la compilación fue exitosa es una nueva función muy buena.
Si después de una refactorización las advertencias estorban mientras corriges errores, puedes ocultarlas temporalmente con
CARGO_BUILD_WARNINGS=allow cargo check, y en CI puedes hacer que las advertencias cuenten como fallas conCARGO_BUILD_WARNINGS=deny. Si lo usas junto con--keep-going, puedes reunir todos los errores y advertencias sin detenerte en el primer paquete que falle.Quizá convenga posponer la actualización por un momento. Parece que hay un bug de compilación incorrecta.
https://github.com/rust-lang/rust/issues/159035
https://github.com/llvm/llvm-project/pull/208683
Genial. Me pregunto si alguien podría resumir el avance en la implementación de los tipos de patrón.
Lamentablemente, el never type tampoco se estabilizó esta vez. Espero el próximo release.