Rust 1.100 llega con el tipo never, asignadores y lints de Cargo
Rust 1.100.0 salió el 12 de noviembre. En una prueba de Tech AI Wire, el código que silenciaba el lint del tipo never en Rust 1.99 ya no compila en 1.100.
Por Claire Whitmore
4 min de lectura
Traducido automáticamente del original en inglés, que Claire Whitmore verificó y editó. Prevalece la versión en inglés. Cómo trabajamos

En cifras
- fecha de lanzamiento de Rust 1.100.0
- 12 nov. 2026
- pasó el tipo never como inestable antes de esta versión
- 10 años
- de antigüedad mínima de publicación en la configuración de ejemplo del propio Cargo
- 3 días
El proyecto Rust lanzó Rust 1.100.0 el 12 de noviembre de 2026. La versión estabiliza el tipo never, abre el núcleo de la API de asignadores personalizados y enseña a Cargo a avisar de las dependencias sin usar. El cambio del tipo never también rompe la compatibilidad, y las notas de la versión lo incluyen en "Compatibility Notes". Proyectos de cualquier edición pueden ahora fallar al compilar donde antes compilaban.
El anuncio en el Rust Blog dice que el tipo never tardó 10 años y 5 intentos fallidos en llegar a estable. LWN.net abrió con los mismos tres cambios: el tipo never, el núcleo de la Allocator API y el informe de Cargo sobre dependencias sin usar. Los usuarios de Rust actualizan con rustup update stable.
Qué hay de nuevo en Rust 1.100
El tipo never, escrito !, es el tipo del código que nunca termina, como un panic! o un bucle infinito. Hasta ahora solo podía aparecer como tipo de retorno de una función. Nuestra guía sobre el tipo never de Rust lo explica a fondo, y nuestra noticia de agosto cubrió el pull request que lo hizo estable.
La tabla siguiente se basa en la entrada del blog, las notas de la versión en GitHub y el registro de cambios de Cargo.
| Cambio | Qué hace | Quién lo nota |
|---|---|---|
Tipo never ! | Se puede usar en cualquier parte, como en Result<T, !>; Infallible pasa a ser un alias de ! | El código que dependía del antiguo fallback |
| Fallback de tipos | Un tipo desconocido en una rama divergente ahora pasa a ser !, no (), en todas las ediciones | Crates antiguos que nunca pasaron a la edición 2024 |
| Allocator API | Allocator, Global, System, y Vec::new_in, Box::new_in y métodos similares | El código que gestiona su propia memoria |
cargo::unused_dependencies | Avisa cuando una dependencia de Cargo.toml nunca se usa | Todos los proyectos de Cargo |
| Antigüedad mínima de publicación | Cargo puede saltarse versiones de crates más nuevas que una antigüedad fijada | Equipos preocupados por los ataques a la cadena de suministro |
| Estructura del directorio de compilación | Los archivos intermedios de compilación cambian de sitio | Scripts que leen directamente la carpeta target de Cargo |
i686-pc-windows-gnu | Ahora es Tier 2 sin herramientas de host | Usuarios de Windows de 32 bits |
El cambio para Windows de 32 bits se anunció en octubre, como explica nuestra noticia sobre los targets i686. La versión también estabiliza utilidades más pequeñas, como bool::toggle, Vec::from_fn y str::trim_prefix.
Prueba de Tech AI Wire: Rust 1.99.1 frente a 1.100.0
En una prueba de Tech AI Wire en macOS 26.6.2, los mismos proyectos pequeños se ejecutaron en las imágenes oficiales de Docker rust:1.99-slim y rust:1.100-slim. Ambas son Debian 13 sobre arm64. Las imágenes indicaron rustc 1.99.1 y rustc 1.100.0.
El primer proyecto usaba la edición 2021 y este código:
fn make<T: Default>() -> Result<T, ()> {
Ok(T::default())
}
fn main() -> Result<(), ()> {
make()?;
Ok(())
}
Nada le dice al compilador qué es T, así que recurre a un tipo por defecto. Esto hizo cada versión:
| Código | Rust 1.99.1 | Rust 1.100.0 |
|---|---|---|
| Tal cual | Error del lint dependency_on_unit_never_type_fallback | Error E0277: "the trait bound !: Default is not satisfied" (no se cumple el límite de trait !: Default) |
Con #![allow(dependency_on_unit_never_type_fallback)] | Compila y se ejecuta | Sigue el error E0277; el lint "has been removed" (se ha eliminado) |
Con make::<()>()? | Compila y se ejecuta | Compila y se ejecuta |
La fila del medio es la trampa. Un crate que silenciaba el aviso en 1.99 compila allí y luego falla en 1.100. Rust 1.100 explica que el lint se eliminó porque "the code warned by this lint no longer compiles" (el código sobre el que avisaba este lint ya no compila). Solo se arregla indicando el tipo.
La prueba del asignador personalizado envolvía el asignador global para contar las peticiones. En 1.99.1 falló con el error E0658, "use of unstable library feature allocator_api". En 1.100.0 funcionó en stable. Un Vec de 1.000 números más un Box hicieron 10 llamadas de asignación por 16.356 bytes.
Prueba de Tech AI Wire: los dos nuevos controles de seguridad de Cargo
Un crate (un paquete de Rust) declaraba itoa y memchr como dependencias, pero solo usaba itoa. En 1.100, cargo build mostró "warning: unused dependency memchr". Poner unused_dependencies = "deny" bajo [lints.cargo] lo convirtió en un error, y la compilación se detuvo. Una dev-dependency que nunca se usó no recibió ningún aviso. Tampoco cargo check --bin unused, que revisa un solo target. Ambos casos coinciden con exenciones que enumera la entrada del blog. Rust 1.99.1 ignoró la tabla [lints.cargo] con un aviso "unused manifest key".
La antigüedad mínima de publicación retrasa las versiones de crates recién publicadas, lo que la entrada del blog llama "dependency cooldowns". La espera da tiempo a otros para detectar una mala versión antes de que tu compilación la incorpore. Con global-min-publish-age = "3 days" bajo [registry], Cargo fijó cc en 1.11.1. Mostró "available: v1.11.2, published 2 hours ago". Sin el ajuste, Cargo eligió 1.11.2. Con 30 días, la resolución falló, porque cargo add ya había escrito 1.11.1 como versión mínima. Cargo sugirió bajar el requisito a "1.8.0" o definir CARGO_RESOLVER_INCOMPATIBLE_PUBLISH_AGE=allow.
Qué significa para los desarrolladores
- Compila cada crate con 1.100 antes de actualizar la CI. El código de ediciones antiguas es el que más probablemente se rompa. Busca
allow(dependency_on_unit_never_type_fallback), porque ese código falla en 1.100. - Corrige los errores de fallback indicando el tipo. La propia sugerencia del compilador, como
make::<()>(), funcionó en ambas versiones durante la prueba. - Activa ya la antigüedad mínima de publicación. Tres días de
global-min-publish-ageen.cargo/config.tomlcuestan poco. Configúrala antes de ejecutarcargo add, ya que ese comando escribe enCargo.tomlla versión que elige. - Limpia las dependencias sin usar antes de prohibirlas. Empieza con el nivel por defecto
warn, elimina lo que encuentre y luego cambia adenyen la CI. - Lee las Compatibility Notes. También incluyen la eliminación de los patrones
box, Unicode 18.0.0 y comprobaciones más estrictas de target features de ARM. - Deja de leer directamente las carpetas de compilación de Cargo. Su estructura cambió en 1.100, y el registro de cambios de Cargo dice que las herramientas deben usar en su lugar los mensajes JSON de Cargo.
Fuentes
- Announcing Rust 1.100.0 - Rust Blog
- Rust 1.100.0 release notes - GitHub - rust-lang/rust
- Cargo changelog: Cargo 1.100 - The Cargo Book
- Rust 1.100.0 released - LWN.net
Artículos relacionados

Rust 1.99.1 corrige una compilación errónea de bool en FFI y dos fallos de enlazado
Rust 1.99.1 corrige tres regresiones de 1.99.0, entre ellas funciones FFI en x86_64 que podían devolver valores bool distintos de 0 o 1. Actualiza con rustup.

Rust 1.100 elimina las herramientas de host para Windows de 32 bits
Rust 1.100 deja de distribuir el compilador para Windows de 32 bits. Los objetivos i686 conservan la biblioteca estándar, así que la compilación cruzada desde Windows de 64 bits sigue funcionando.

Rust 1.99 estabiliza la definición de funciones C-variadic
Rust 1.99.0, publicado el 1 de octubre de 2026, permite a Rust estable definir funciones C-variadic como printf, pasa a LLVM 23 y convierte no_mangle en genéricos en un error.