Lanzamiento de Rust 1.92. Proyectos de Rust para GUI, aislamiento sandbox y creación de firmwares

Se ha publicado la versión del lenguaje de programación Rust 1.92, que fue creada por el proyecto Mozilla, pero que ahora es desarrollada bajo la tutela de la organización no lucrativa independiente Rust Foundation. El lenguaje se enfoca en un manejo seguro de la memoria y proporciona herramientas para lograr un alto paralelismo en la ejecución de tareas, evitando el uso de un recolector de basura y un runtime (el runtime se limita a la inicialización básica y al soporte de la biblioteca estándar).

Los métodos de manejo de memoria en Rust eliminan los errores del desarrollador al manipular punteros y protegen contra problemas que surgen del trabajo de bajo nivel con la memoria, como el acceso a áreas de memoria después de su liberación, desreferenciación de punteros nulos, desbordamientos de búfer, etc. Para la distribución de bibliotecas, la gestión de dependencias y la construcción de proyectos, se está desarrollando el administrador de paquetes Cargo. Para alojar bibliotecas, se soporta el repositorio crates.io.

La seguridad en el manejo de la memoria se garantiza en Rust en tiempo de compilación a través de la verificación de referencias, el seguimiento de la propiedad de los objetos, la gestión de tiempos de vida de objetos (ámbitos) y la evaluación de la corrección del acceso a la memoria durante la ejecución del código. Rust también ofrece herramientas para protegerse contra desbordamientos 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 inmutabilidad de referencias y variables por defecto, y ofrece una fuerte tipificación estática para minimizar errores lógicos.

Novedades principales:

  • Se ha continuado la estabilización del tipo «never», representado por el símbolo «!», que define cálculos que nunca devuelven valores (por ejemplo, la función «exits», el macro «panic!» y los bucles infinitos nunca retornan el control). En la nueva versión, las comprobaciones Lint «never_type_fallback_flowing_into_unsafe» y «dependency_on_unit_never_type_fallback» han cambiado por defecto de emitir advertencias a generar errores de compilación. Estas verificaciones se activan cuando hay problemas en el código que se manifiestan al usar el tipo «never».

    Se estima que existen problemas similares en aproximadamente 500 paquetes crate. La inclusión de comprobaciones lint permitirá prepararse para la estabilización del tipo «never», que actualmente se considera una funcionalidad experimental. Las comprobaciones lint solo se activan durante la construcción directa de paquetes y no se manifiestan durante la construcción de dependencias. También se pueden desactivar a través del atributo «#[allow]».

  • Se ha modificado el comportamiento de la verificación lint «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án marcados con el atributo «#[must_use]». En la nueva versión, se ha dejado de emitir advertencias sobre la ignorancia de los valores devueltos de 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 {…}».
  • Se ha modificado el comportamiento de la bandera «-Cpanic=abort», que habilita de manera predeterminada la generación de tablas unwind para la ejecución de trazas de retroceso (backtrace). Para volver al comportamiento anterior, existe la opción «-Cforce-unwind-tables=no».
  • Se ha endurecido la verificación de los argumentos del atributo «#[macro_export]». Al especificar atributos no válidos, ahora se emitirá un error en lugar de una advertencia. Los problemas con «#[macro_export]» se comprobarán no solo durante la construcción directa del paquete crate, sino también al construir dependencias.
  • En safe-code se permite la obtención de punteros raw («&raw [mut | const]») a campos en tipos union.
  • Se ha implementado soporte para vinculación dinámica en la plataforma objetivo mips64el-unknown-linux-muslabi64.
  • La versión mínima compatible del toolkit externo LLVM se ha elevado a la rama LLVM 20.
  • Se ha trasladado un nuevo lote de API a la categoría estable, incluyendo la estabilización de métodos e implementaciones de traits:
    • NonZero::div_ceil
    • Location::file_as_c_str
    • RwLockWriteGuard::downgrade
    • Box::new_zeroed
    • Box::new_zeroed_slice
    • Rc::new_zeroed
    • Rc::new_zeroed_slice
    • Arc::new_zeroed
    • Arc::new_zeroed_slice
    • btree_map::Entry::insert_entry
    • btree_map::VacantEntry::insert_entry
    • impl Extend for proc_macro::TokenStream
    • impl Extend for proc_macro::TokenStream
    • impl Extend for proc_macro::TokenStream
    • impl Extend for proc_macro::TokenStream
  • El atributo «const» se aplica en las funciones:
    • ::rotate_left
    • ::rotate_right
  • En el gestor de paquetes Cargo se ha implementado la repetición de la operación «git fetch» en caso de fallo en la ejecución de la primera solicitud. Se han añadido componentes para la integración con el emulador de terminal Ghostty. Se ha agregado un nuevo capítulo en la guía sobre la optimización del proceso de construcción.

También se pueden señalar proyectos y eventos recientemente anunciados relacionados con Rust:

  • La empresa Ferrocene ha anunciado la obtención de la certificación IEC 61508 (SIL 2) para la biblioteca libcore, que incluye un subconjunto de llamadas de la biblioteca estándar base de Rust. La certificación confirma que la biblioteca cumple con los requisitos para sistemas industriales críticos. Ferrocene es conocida por desarrollar herramientas para la creación de aplicaciones en Rust para sistemas críticos (Safety-Critical Systems), así como por mantener la especificación FLS (Ferrocene Language Specification), sobre la cual se desarrolla la especificación de referencia para el lenguaje Rust.
  • Se ha publicado la versión 0.14 de la biblioteca Iced para la creación de interfaces gráficas de usuario utilizando el modelo de programación reactiva. Iced implementa una arquitectura familiar para desarrolladores que conocen el lenguaje de construcción de interfaces declarativas Elm. Se ofrece un conjunto completo de widgets con la posibilidad de crear manejadores asíncronos y aplicar una disposición adaptable de los elementos de la interfaz según el tamaño de la ventana y la pantalla. Se proporcionan varios motores de renderizado que soportan Vulkan, Metal y DX12. Entre los grandes proyectos que utilizan Iced se encuentra el entorno de escritorio COSMIC.

    En la nueva versión se han añadido los widgets «table», «grid», «sensor», «float» y «pin», así como se han ampliado las capacidades del widget para trabajar con Markdown. Se han implementado: modo de renderización reactiva; barras de desplazamiento que aparecen cuando es necesario; API para trabajar con animaciones; soporte de métodos de entrada; modo headless; posibilidad de realizar cambios sin detener la aplicación (hot reloading); paralelización de la decodificación de imágenes; herramientas para la depuración y el perfilado del rendimiento.

  • El proyecto Ribir está desarrollando una biblioteca para crear aplicaciones multiplataforma con interfaz gráfica, que permite utilizar una base de código común para generar aplicaciones gráficas para diferentes plataformas (Linux, Windows, macOS, con planes para Android e iOS). Se disponen de un lenguaje declarativo para construir interfaces basado en macros de Rust, más de 20 widgets, temas y un renderizador basado en wgpu.
  • Se ha presentado la herramienta Island, diseñada para la ejecución aislada de aplicaciones. Para la aislamiento en sandbox se utiliza el mecanismo Landlock. Island permite crear reglas en formato TOML y aplicarlas para aislar ejecutables existentes mediante Landlock, sin necesidad de realizar modificaciones en el código. A diferencia de Firejail, la herramienta Island no requiere permisos de root ni privilegios especiales.
  • Google ha presentado un conjunto de herramientas Wasefire, escrito en Rust, para desarrollar firmware seguro. La idea principal es ejecutar, sobre el entorno básico del firmware (plataforma), controladores aislados (applet). El desarrollo de firmware no está atado a lenguajes de programación: los componentes del firmware pueden proporcionarse en formato WebAssembly con extensiones WASI (WebAssembly System Interface) y ejecutarse mediante Wasmtime.
  • Se ha publicado la versión del firmware UEFI Patina 18, escrito en Rust. Patina proporciona un reemplazo para los componentes básicos del firmware UEFI y se puede utilizar para la transición gradual de firmware existentes, escritos en C, hacia el uso del lenguaje Rust.
  • El proyecto Brimstone está desarrollando un nuevo motor JavaScript, escrito desde cero en Rust. En su estado actual, ya soporta más del 97% de las capacidades de ECMAScript 2026. La máquina virtual para ejecutar el bytecode ha sido creada teniendo en cuenta la arquitectura del motor V8.
  • El proyecto Catten desarrolla el núcleo para el sistema operativo experimental CharlotteOS, escrito en Rust. El núcleo soporta el control de acceso basado en «capabilidad» (similar a Fuchsia) y utiliza una jerarquía de recursos distribuida, parecida a Plan 9, con direccionamiento de rutas de archivos a través de URI.
  • Se ha publicado la versión 4.2.0 del intérprete de comandos interactivo Fish (friendly interactive shell). La rama 4.x se destaca por la traducción completa de la base de código del C++ a Rust.
  • La empresa Cloudflare ha abierto el código de la biblioteca Rust tokio-quiche, para integrar el soporte de los protocolos QUIC y HTTP/3 en aplicaciones asincrónicas basadas en el marco Tokio.
  • El proyecto Tor ha publicado las versiones 1.7 y 1.8 de Arti, una implementación del conjunto de herramientas Tor, escrita en Rust. Cuando el código de Arti alcance un nivel que pueda reemplazar completamente la versión en C, los desarrolladores de Tor planean otorgarle a Arti el estatus de implementación principal de Tor y gradualmente descontinuar el soporte de la implementación en C.

    En la nueva versión se ha estabilizado la implementación de la definición limitada de servicios onion utilizando autorización de cliente («restricted-discovery»). Además del proxy SOCKS, se ha añadido soporte para un proxy HTTP que utiliza el método CONNECT. Se ha implementado la programación adaptable de tiempos de espera según la carga. Se ha añadido soporte experimental para tokio-console. Se ha continuado desarrollando la funcionalidad para los relés y servidores las autoridades de directorio (Directory Authority). Se ha añadido el comando «arti hsc ctor-migrate» para transferir claves del cliente en C al almacén de claves de Arti. Se han añadido configuraciones para gestionar el lanzamiento de servicios onion.

  • Se ha publicado la base de datos RustDB, creada en Rust inspirada en PostgreSQL. Soporta operaciones SQL básicas (CREATE/DROP TABLE/VIEW, INSERT, SELECT, UPDATE, DELETE, SHOW TABLES, EXPLAIN, VACUUM), transacciones, MVCC, WAL (Write-Ahead Log), índices, conexión a través de un protocolo compatible con PostgreSQL. En la creación de RustDB se utilizó IA.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster