Se ha publicado el lanzamiento del lenguaje de programación Rust 1.94, originalmente desarrollado por Mozilla, pero ahora está siendo mantenido bajo los auspicios de la organización independiente sin fines de lucro Rust Foundation. El lenguaje se enfoca en el manejo seguro de la memoria y proporciona herramientas para lograr un alto paralelismo en la ejecución de tareas, todo ello sin el uso de un recolector de basura y con un runtime reducido a la inicialización básica y el mantenimiento de la biblioteca estándar.
Los métodos de manejo de memoria en Rust están diseñados para eliminar errores al manipular punteros y protegerse de problemas que surgen del trabajo de bajo nivel con la memoria, como acceder a la memoria después de que se ha liberado, desreferenciar punteros nulos, desbordar búferes, etc. Para la distribución de bibliotecas, la construcción y la gestión de dependencias, se desarrolla el gestor de paquetes Cargo. Para el alojamiento de 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 añadido el método array_windows al tipo slice, que crea un iterador para recorrer cortes (slices) en «ventanas» de tamaño fijo, desplazándose un elemento a la vez. A diferencia del método windows anteriormente disponible, el método array_windows opera con un tamaño de ventana fijo y devuelve en cada iteración una referencia a un array de tamaño fijo (&[T; N]) en lugar de un slice de tamaño indefinido (&[T]). Dado que el tamaño del array es conocido de antemano por el compilador, se puede omitir la verificación de límites del array en cada etapa de la iteración. let slice = [0, 1, 2, 3]; let mut iter = slice.array_windows(); assert_eq!(iter.next().unwrap(), &[0, 1]); assert_eq!(iter.next().unwrap(), &[1, 2]); assert_eq!(iter.next().unwrap(), &[2, 3]); assert!(iter.next().is_none());
- En los archivos de configuración del gestor de paquetes Cargo (.cargo/config.toml) se ha implementado la directiva «include», que permite incrustar el contenido de otros archivos en su lugar. include = [ «frodo.toml», «samwise.toml», ] include = [ { path = «required.toml» }, { path = «optional.toml», optional = true }, ]
- Se ha añadido soporte para la nueva versión del lenguaje de marcado TOML 1.1 en los archivos de manifiesto y de configuración, en la que se ha introducido soporte para tablas incrustadas de múltiples líneas, secuencias de escape «\xHH» para insertar la representación hexadecimal de bytes y «\e» para reemplazar «\u001B», además de la capacidad de dejar una coma al final del último elemento y de omitir la indicación de segundos en los valores de tiempo. serde = { version = «1.0», features = [«derive»] } ahora se puede reemplazar con serde = { version = «1.0», features = [«derive»], }
- Se ha trasladado un nuevo lote de API a la categoría estable, incluyendo la estabilización de métodos e implementaciones de traits:
- ::array_windows
- ::element_offset
- LazyCell::get
- LazyCell::get_mut
- LazyCell::force_mut
- LazyLock::get
- LazyLock::get_mut
- LazyLock::force_mut
- impl TryFrom<char> for usize
- std::iter::Peekable::next_if_map
- std::iter::Peekable::next_if_map_mut
- Funciones integradas para instrucciones x86 avx512fp16
- Funciones integradas para instrucciones AArch64 NEON fp16
- f32::consts::EULER_GAMMA
- f64::consts::EULER_GAMMA
- f32::consts::GOLDEN_RATIO
- f64::consts::GOLDEN_RATIO
- El atributo «const» se aplica en las funciones:
- f32::mul_add
- f64::mul_add
- La plataforma riscv64im-unknown-none-elf ha sido trasladada al tercer nivel de soporte. Este nivel incluye soporte básico, pero carece de pruebas automatizadas, publicación de versiones oficiales y verificación de la capacidad de compilación del código.
También se pueden señalar proyectos y eventos recientemente anunciados relacionados con Rust:
- Ayrton Muñoz, quien implementó el soporte para la plataforma Sony PlayStation 1 en el compilador Rust y trabajó en el puerto de FreeBSD a computadoras con chips Apple Silicon, ha habilitado en FreeBSD la creación de componentes del núcleo y controladores de dispositivos en el lenguaje Rust. Se ha propuesto un conjunto de envoltorios KPI (Kernel Programming Interface) para probar, que permite utilizar código en Rust en el núcleo de FreeBSD, así como un controlador de sonido virtio (virtio_snd) y un controlador HID para el canal Dock para el teclado en el MacBook M2, así como varios controladores de bajo nivel para subsistemas en computadoras Mac con chips Apple Silicon.
Se destaca que el trabajo en las envolturas de Rust comenzó a finales de 2024. En las envolturas se ha implementado solo una parte de C-KPI y se consideran inestables por el momento, pero con el tiempo se busca aumentar su estabilidad a la par de la interfaz correspondiente al lenguaje C. El controlador virtio_snd propuesto como ejemplo es adecuado para reproducir música en QEMU. Se prevé que en 2026 las envolturas de Rust estén lo suficientemente estabilizadas para que los desarrolladores interesados puedan comenzar a utilizarlas para escribir código.
- Benny Siegert, que está participando en el desarrollo de NetBSD, ha intentado justificar las razones por las cuales no habrá soporte para el lenguaje Rust en el núcleo de NetBSD: NetBSD soporta arquitecturas para las que Rust no está disponible; mantener las herramientas de Rust existentes en pkgsrc requiere un gran esfuerzo y cuenta solo con unos pocos desarrolladores; el soporte de Rust en el núcleo requiere incluir el compilador Rust en el sistema base; durante el arranque de Rust en NetBSD se utiliza una versión anterior del paquete binario, lo cual es inaceptable para distribuciones autosuficientes que se distribuyen en código fuente; los ciclos de lanzamiento de Rust son incompatibles con el ciclo de desarrollo de NetBSD y el soporte de versiones anteriores (por ejemplo, la rama NetBSD 9 lanzada en 2020 continúa siendo soportada, por lo que sería necesario proporcionar y mantener un compilador Rust de seis años de antigüedad).
- Se ha publicado la versión 0.5 de la base de datos Turso incorporada en aplicaciones, escrita en Rust y compatible con SQLite a nivel de dialecto SQL, formato de archivos de base de datos y API en C. Entre las características avanzadas se destaca el mecanismo CDC (Change Data Capture) para rastrear cambios en la base de datos en tiempo real, el uso de io_uring para entrada/salida asíncrona en Linux, soporte para búsqueda vectorial, la expresión ALTER para modificar esquemas de base de datos, la posibilidad de cifrado de datos en la base de datos, el modo de cálculos incrementales y la construcción "BEGIN CONCURRENT".
- Un proyecto para permitir el uso de la biblioteca estándar de Rust en programas que se ejecutan en el lado de la GPU.
- Emuko es un emulador de RISC-V, escrito en Rust, capaz de cargar Linux, soportando la compilación JIT, y capaz de guardar y restaurar instantáneas de estado.
- RustConn (flatpak) es una interfaz gráfica para gestionar conexiones de red externas a otros hosts, que soporta SSH, RDP, VNC, SPICE, Telnet, Serial, Kubernetes, Zero Trust y SFTP. El código está escrito en Rust utilizando GTK4 y Wayland.
- Se ha presentado una nueva rama del proyecto zlib-rs 0.6, marcada como la primera versión estable completamente compatible con el API de C de zlib y adecuada para una sustitución transparente. El proyecto se centra en crear un análogo seguro de la biblioteca de compresión de datos zlib. El desarrollo se lleva a cabo con la mirada puesta en el proyecto zlib-ng, que desarrolla una versión de zlib de alto rendimiento.
- Se ha presentado el proyecto vcad, que desarrolla un sistema paramétrico de diseño asistido por computadora (CAD) escrito en Rust e integrable con agentes de IA a través del protocolo MCP. Se soporta modelado en 3D, simulación, trabajo con bocetos en 2D, ensamblaje de componentes, importación en formato STEP y exportación en formatos STL/GLB/STEP/DXF.
- Se ha publicado un sistema de reconocimiento de voz, escrito en Rust y que utiliza el modelo AI Mistral Voxtral Mini 4B Realtime y el marco de aprendizaje automático Burn. El proyecto está orientado al reconocimiento de voz en tiempo real para la generación de transcripciones durante la transmisión en vivo.
- Se ha lanzado la herramienta c2rust 0.22, diseñada para traducir código C (C99) a una representación unsafe en Rust, cercana en su estructura al código original en C. El marco de trabajo resultante se puede utilizar posteriormente para migrar gradualmente a un Rust idiomático y eliminar bloques unsafe.
Fuente: opennet.ru
