Se ha lanzado el lenguaje de programación Rust 1.92, fundado por el proyecto Mozilla, pero ahora desarrollado bajo el auspicio de la Fundación Rust, una organización independiente sin ánimo de lucro. El lenguaje se centra en la seguridad de la memoria y proporciona herramientas para lograr un alto paralelismo en la ejecución de tareas, sin necesidad de un recolector de basura ni de tiempo de ejecución (el tiempo de ejecución se limita a la inicialización y el mantenimiento básicos de la biblioteca estándar).
Los métodos de manejo de memoria de Rust salvan al desarrollador de errores al manipular punteros y protegen contra los problemas que surgen debido al manejo de memoria de bajo nivel, como acceder a un área de memoria después de haberla liberado, desreferenciar punteros nulos, desbordamientos de búfer, etc. Para distribuir bibliotecas, proporcionar compilaciones y administrar dependencias, el proyecto desarrolla el administrador de paquetes Cargo. El repositorio crates.io es compatible con el alojamiento de bibliotecas.
La seguridad de la memoria se proporciona en Rust en tiempo de compilación a través de la verificación de referencias, el seguimiento de la propiedad de los objetos, el seguimiento de la vida útil de los objetos (alcances) y la evaluación de la corrección del acceso a la memoria durante la ejecución del código. Rust también brinda protección contra desbordamientos de enteros, requiere la inicialización obligatoria de los valores de las variables antes de su uso, maneja mejor los errores en la biblioteca estándar, aplica el concepto de referencias y variables inmutables de forma predeterminada, ofrece tipado estático fuerte para minimizar los errores lógicos.
Principales novedades:
- El tipo "never", denotado por el símbolo "!" y que define cálculos que nunca retornan (por ejemplo, la función "exits", la macro "panic!" y los bucles infinitos que nunca retornan), se ha mantenido estable. En la nueva versión, las comprobaciones de lint "never_type_fallback_flowing_into_unsafe" y "dependency_on_unit_never_type_fallback" han pasado de emitir advertencias a generar errores de compilación de forma predeterminada. Estas comprobaciones se activan cuando se detectan problemas en el código al usar el tipo "never".
Según estimaciones preliminares, existen problemas similares en aproximadamente 500 paquetes crate. Habilitar las comprobaciones de pelusa ayudará a preparar el terreno para la estabilización del tipo "nunca", que actualmente se considera una función experimental. Las comprobaciones de pelusa solo se activan al compilar paquetes directamente y no afectan las compilaciones de dependencias. También se pueden deshabilitar mediante el atributo "#[allow]".
- Se ha modificado el comportamiento de la comprobación de pelusa "unused_must_use", que se activa cuando se ignora el valor de retorno de una función si la función o el tipo de retorno está marcado con el atributo "#[must_use]". La nueva versión ya no genera advertencias sobre la omisión de valores de retorno para los tipos Result y ControlFlow, donde el estado de error se determina por un tipo sin valores ("!" o "Infallible"). Por ejemplo, "fn can_never_fail() -> Result<(), Infallible> {…}".
- Se ha modificado el comportamiento del indicador "-Cpanic=abort", que, al especificarse, habilita la generación predeterminada de tablas de desenrollado para el seguimiento inverso. La opción "-Cforce-unwind-tables=no" está disponible para revertir al comportamiento anterior.
- Se ha mejorado la validación de los argumentos del atributo "#[macro_export]". Especificar atributos no válidos ahora generará un error en lugar de una advertencia. Los problemas con "#[macro_export]" se comprobarán no solo durante la compilación directa de paquetes, sino también durante la compilación de dependencias.
- En el código seguro, se permite obtener punteros sin procesar ("&raw [mut | const]") a campos en tipos de unión.
- Se ha implementado soporte de enlace dinámico para la plataforma de destino mips64el-unknown-linux-muslabi64.
- La versión mínima compatible de la cadena de herramientas externa LLVM se ha elevado a la rama LLVM 20.
- Una nueva parte de la API se ha movido a la categoría de estable, incluidos los métodos y las implementaciones de rasgos que se han estabilizado:
- No cero ::div_ceil
- Ubicación::archivo_como_c_str
- RwLockWriteGuard::degradar
- Caja::nueva_puesta_a_cero
- Caja::nueva porción puesta a cero
- Rc::nuevo_puesto_a_cero
- Rc::nueva porción puesta a cero
- Arco::nuevo_puesto_a_cero
- Arc::new_zeroed_slice
- btree_map::Entrada::insertar_entrada
- btree_map::EntradaVacante::insertar_entrada
- impl Extend para proc_macro::TokenStream
- impl Extend para proc_macro::TokenStream
- impl Extend para proc_macro::TokenStream
- impl Extend para proc_macro::TokenStream
- El signo "const" se utiliza en funciones:
- <[_]>::rotar_a_la_izquierda
- <[_]>::rotar_a_la_derecha
- El gestor de paquetes Cargo ahora reintenta la ejecución de "git fetch" si la primera solicitud falla. Se han añadido componentes para la integración con el emulador de terminal Ghostty. Se ha añadido al manual un nuevo capítulo sobre la optimización del proceso de compilación.
Además, nos gustaría destacar proyectos y eventos recientemente anunciados relacionados con Rust:
- Ferrocene anunció la certificación IEC 61508 (SIL 2) para su biblioteca libcore, que incluye un subconjunto de llamadas de la biblioteca principal estándar de Rust. Esta certificación confirma el cumplimiento de la biblioteca con los requisitos para sistemas industriales críticos. Ferrocene es conocida por crear kits de herramientas para el desarrollo de aplicaciones Rust para Sistemas Críticos de Seguridad (SCS) y por mantener la Especificación del Lenguaje Ferrocene (FLS), que sirve de base para la especificación de referencia de Rust.
- Se ha publicado Iced 0.14, una biblioteca para crear interfaces gráficas de usuario mediante un modelo de programación reactiva. Iced implementa una arquitectura familiar para los desarrolladores familiarizados con el lenguaje de interfaz declarativo Elm. Ofrece un conjunto de widgets preconfigurados con la capacidad de crear controladores asíncronos y aplicar un diseño adaptable a los elementos de la interfaz según el tamaño de la ventana y la pantalla. Se proporcionan varios motores de renderizado compatibles con Vulkan, Metal y DX12. Entre los principales proyectos que utilizan Iced se encuentra el entorno de escritorio COSMIC.
La nueva versión añade los widgets "tabla", "cuadrícula", "sensor", "flotante" y "pin", así como funciones ampliadas para trabajar con Markdown. Se han implementado las siguientes características: modo de renderizado reactivo; barras de desplazamiento que aparecen cuando se necesitan; una API de animación; compatibilidad con métodos de entrada; modo sin interfaz gráfica; posibilidad de realizar cambios sin detener la aplicación (recarga en caliente); decodificación de imágenes en paralelo; y herramientas de depuración y generación de perfiles de rendimiento.
- El proyecto Ribir desarrolla una biblioteca para crear aplicaciones GUI multiplataforma, lo que permite usar un código base común para crear aplicaciones GUI para diferentes plataformas (Linux, Windows, macOS y planes para Android e iOS). Dispone de un lenguaje de interfaz declarativo basado en macros de Rust, más de 20 widgets, temas y un renderizador basado en wGPU.
- Se presenta Island, una utilidad diseñada para la ejecución de aplicaciones en entornos aislados. Utiliza el mecanismo Landlock para el sandbox. Island permite crear reglas en formato TOML y aplicarlas a los ejecutables existentes de Landlock sin necesidad de modificar el código. A diferencia de Firejail, Island no requiere privilegios de root ni permisos especiales.
- Google ha presentado Wasefire, un kit de herramientas basado en Rust para desarrollar firmware seguro. La idea principal es ejecutar controladores (applets) separados y aislados sobre el entorno de firmware subyacente (plataforma). El desarrollo de firmware es independiente del lenguaje: los componentes de firmware pueden entregarse como WebAssembly con extensiones WASI (Interfaz del Sistema WebAssembly) y ejecutarse con Wasmtime.
- Ya se lanzó Patina 18, un firmware UEFI escrito en Rust. Patina reemplaza los componentes principales del firmware UEFI y permite migrar gradualmente el firmware existente escrito en C a Rust.
- El proyecto Brimstone está desarrollando un nuevo motor JavaScript, escrito desde cero en Rust. Su versión actual ya es compatible con más del 97 % de las características de ECMAScript 2026. La máquina virtual para ejecutar bytecode se basa en la arquitectura del motor V8.
- El proyecto Catten desarrolla un kernel para el sistema operativo experimental CharlotteOS, escrito en Rust. El kernel admite control de acceso basado en capacidades (similar a Fuchsia) y utiliza una jerarquía de recursos distribuidos similar a Plan 9, con rutas de archivo direccionadas mediante URI.
- Se ha lanzado el shell interactivo Fish 4.2.0 (un shell interactivo fácil de usar). La rama 4.x destaca por la migración completa de su código base de C++ a Rust.
- Soundflare ha hecho de código abierto la biblioteca Rust tokio-quiche para integrar soporte QUIC y HTTP/3 en aplicaciones asincrónicas basadas en el marco Tokyo.
- El Proyecto Tor ha lanzado Arti 1.7 y 1.8, una implementación en Rust de la cadena de herramientas Tor. Una vez que el código base de Arti alcance un nivel capaz de reemplazar por completo la implementación en C, los desarrolladores de Tor pretenden convertir Arti en la implementación principal de Tor y eliminar gradualmente el mantenimiento de la implementación en C.
La nueva versión estabiliza la implementación del descubrimiento restringido para servicios Onion mediante autorización de cliente ("restricted-discovery"). Además de los proxies SOCKS, se ha añadido compatibilidad con proxies HTTP mediante el método CONNECT. Se han implementado tiempos de espera adaptables según la carga. Se ha añadido compatibilidad experimental con tokio-console. Se ha continuado el desarrollo de la funcionalidad para relés y servidores de directorio (Directory Authority). Se ha añadido el comando "arti hsc ctor-migrate" para migrar claves desde un cliente C al almacén de claves Arti. Se han añadido ajustes para gestionar el lanzamiento de servicios Onion.
- RustDB, un sistema de gestión de bases de datos (SGBD) inspirado en PostgreSQL y escrito en Rust, ya está disponible. Admite operaciones SQL básicas (CREATE/DROP TABLE/VIEW, INSERT, SELECT, UPDATE, DELETE, SHOW TABLES, EXPLAIN, VACUUM), transacciones, MVCC, WAL (Write-Ahead Log), índices y conectividad mediante un protocolo compatible con PostgreSQL. RustDB se desarrolló con IA.
Fuente: opennet.ru
