Rust 1.100 estabiliza el tipo never, la API Allocator y la espera mínima de Cargo

El equipo de lanzamientos de Rust publicó el 12 de noviembre de 2026 la versión 1.100.0 del lenguaje, que estabiliza tres piezas esperadas desde hace años: el tipo never (!), el núcleo de la API Allocator y, en Cargo, una espera mínima configurable para no usar versiones de dependencias recién publicadas. Para los equipos que mantienen herramientas o servicios en Rust, esta última es la novedad con más impacto operativo, porque reduce la exposición a paquetes maliciosos publicados en crates.io. La actualización se instala con rustup update stable.

Las claves de Rust 1.100 en 20 segundos

  • El tipo never (!) ya es estable y Infallible pasa a ser un alias suyo.
  • El trait Allocator funciona en versión estable con Vec y Box.
  • Cargo puede ignorar versiones publicadas hace menos de un plazo dado con global-min-publish-age.
  • Cargo avisa de dependencias sin usar y cambia el hash del directorio de compilación.

Algunos medios, como Programación en Castellano, han descrito la nueva opción de Cargo como una cuarentena de versiones. El anuncio oficial matiza el término: lo que se estabiliza es un tiempo mínimo desde la publicación (min-publish-age), mientras que el soporte de cuarentena propiamente dicho figura como trabajo futuro dentro del objetivo de refuerzo de la cadena de suministro de crates.io.

Cargo: espera mínima para dependencias y avisos de las que sobran

La nueva opción permite que Cargo descarte, al resolver dependencias, las versiones publicadas hace menos tiempo del indicado. Se configura en .cargo/config.toml:

[registry]
global-min-publish-age = "3 days"Lenguaje del código: PHP (php)

Con esa configuración, un cargo update no elegirá una versión subida a crates.io en los últimos tres días. La idea es ganar margen frente a los ataques a la cadena de suministro, en los que una versión comprometida suele detectarse y retirarse en horas o pocos días. Para una actualización concreta, por ejemplo un parche de seguridad urgente, la restricción se puede saltar con la variable de entorno CARGO_RESOLVER_INCOMPATIBLE_PUBLISH_AGE=allow. Hay una excepción importante: cargo install ignora este ajuste, así que no protege la instalación de binarios con ese comando.

Cargo también empieza a avisar de dependencias declaradas que no se usan, dentro del sistema de lints [lints.cargo]. El aviso no cubre las dev-dependencies y solo es fiable cuando se compilan todos los objetivos que podrían usar la dependencia: una compilación parcial como cargo check --bin foo puede no detectarlas. Además, el hash de configuración del directorio de compilación se aplica ahora de forma coherente, lo que reduce colisiones de caché, pero puede romper scripts de CI que dependían de la estructura anterior. Conviene revisarlos antes de actualizar los runners.

El tipo never y la API Allocator

El tipo never representa un valor que no puede existir: el resultado de una función que nunca devuelve o de un error que no puede producirse. Hasta ahora solo podía usarse de forma implícita; desde Rust 1.100 se puede escribir en cualquier sitio, como en Result<T, !>, y std::convert::Infallible pasa a ser un alias de !.

fn leer_valor() -> Result<u32, !> {
    Ok(42)
}Lenguaje del código: HTML, XML (xml)

El cambio tiene una parte incompatible. En las ediciones 2015, 2018 y 2021, el tipo al que el compilador recurre por defecto en ciertos casos (el llamado fallback) pasa de () a !. Según Programación en Castellano, eso puede hacer que el compilador marque más código como inalcanzable, así que merece la pena compilar los proyectos antiguos con la nueva versión antes de fijarla en producción.

La otra gran estabilización es el trait Allocator, que permite usar asignadores de memoria propios con Vec y Box en Rust estable, junto con los asignadores Global y System. Es útil para arenas, asignadores de pool o entornos con restricciones de memoria, y el proyecto mantiene más trabajo pendiente bajo el objetivo Allocators 1.0.

La biblioteca estándar suma core::mem::DropGuard, un tipo que ejecuta un cierre al destruirse y cuya función dismiss devuelve el valor sin ejecutarlo, pensado para lógica de deshacer cambios si algo falla a mitad. También llega la función insegura std::mem::conjure_zst para crear valores de tipos de tamaño cero. Entre las API estabilizadas figuran Vec::from_fn, Box::take, Box::map, Rc::map, Arc::map, bool::toggle, los métodos trim_prefix y trim_suffix para cadenas, slices y rutas, y CommandExt::show_window en Windows.

Preguntas frecuentes

¿Cómo actualizo a Rust 1.100?

Con rustup: rustup update stable.

¿Qué hace global-min-publish-age en Cargo?

Hace que Cargo no elija versiones de dependencias publicadas hace menos del plazo configurado. Se puede saltar con una variable de entorno y cargo install lo ignora.

¿Rust 1.100 puede romper código existente?

Sí en algunos casos: cambia el fallback del tipo never en las ediciones 2015, 2018 y 2021, y la estructura del directorio de compilación puede afectar a scripts que dependían de ella.

Fuentes:

Suscríbete al boletín SysAdmin

Este es tu recurso para las últimas noticias y consejos sobre administración de sistemas, Linux, Windows, cloud computing, seguridad de la nube, etc. Lo enviamos 2 días a la semana. Recuerda revisar tu email para confirmar la suscripción.

Scroll al inicio
×