Rust 1.100 estabiliza el tipo never, la API Allocator y las cuarentenas de dependencias en Cargo

El equipo de Rust ha publicado la versión 1.100.0 del lenguaje, con dos estabilizaciones que llevaban años en nightly: el tipo never (!) y el núcleo de la API de asignadores. Cargo, por su parte, incorpora avisos de dependencias sin usar y una opción para no instalar versiones recién publicadas.

El tipo never ya se puede nombrar

El tipo ! es estable y puede escribirse en cualquier posición, por ejemplo Result<T, !> para expresar que un error es imposible. Infallible pasa a ser un alias de !. Hay una nota de compatibilidad: en las ediciones 2015, 2018 y 2021 el tipo de reserva (fallback) del never type cambia de () a !. Rara vez se nota, pero el compilador puede marcar más código como inalcanzable.

API Allocator estable

Se estabiliza el núcleo de allocator_api: el trait Allocator y los asignadores Global y System, con métodos como Vec::new_in, Vec::with_capacity_in o Box::new_in, y con soporte en Box, Rc y Arc. Forma parte del objetivo «Allocators 1.0» y abre la puerta a usar arenas o asignadores propios en Rust estable.

DropGuard y conjure_zst

core::mem::DropGuard ejecuta un cierre cuando se destruye, implementa Deref y DerefMut y ofrece DropGuard::dismiss para recuperar el valor sin lanzar el cierre; resulta útil para deshacer cambios (rollback) si algo falla a mitad. Además llega std::mem::conjure_zst, una función unsafe que pasa a ser la vía recomendada para crear un valor de un tipo de tamaño cero.

Novedades en Cargo

  • Dependencias sin usar: Cargo avisa de unused dependency, configurable con cargo::unused_dependencies en la nueva tabla [lints.cargo]. Solo avisa si se compilan todos los destinos que podrían usar la dependencia, y no se aplica a dev-dependencies.
  • Directorio de compilación: el hash de configuración de la compilación se aplica ahora de forma coherente, lo que reduce colisiones de caché. Los procesos o pruebas que dependan del comportamiento anterior pueden romperse.
  • Cuarentena de versiones: con global-min-publish-age = "3 days" en la sección [registry] de .cargo/config.toml, Cargo omite versiones publicadas hace poco, una defensa útil frente a ataques a la cadena de suministro. Se puede saltar en una actualización con CARGO_RESOLVER_INCOMPATIBLE_PUBLISH_AGE=allow; cargo install ignora el mínimo.

APIs estabilizadas

Entre las nuevas APIs estables están Vec::from_fn, Box::take y Box::map, Rc::map y Arc::map, str::trim_prefix y str::trim_suffix (también para slices y Path::trim_prefix), bool::toggle, impl Default for Once, métodos nuevos de UnsafeCell y, en Windows, CommandExt::show_window y Child::main_thread_handle.

Para actualizar basta con ejecutar rustup update stable. Si quieres ver hacia dónde va el lenguaje en el ecosistema, tienes en programacion.net por qué medio ecosistema de software se está pasando a Rust y los traits de Rust que de verdad vas a usar todos los días.

Fuente: Rust 1.100.0 (blog oficial de Rust).

Imagen: Pexels / Optical Chemist

COMPARTE ESTA NOTICIA

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP