Se ha publicado la versión del lenguaje de programación de propósito general Rust 1.88, originalmente desarrollado por Mozilla, pero ahora mantenido bajo la dirección de la organización no lucrativa independiente Rust Foundation. El lenguaje está enfocado en la seguridad de la gestión de memoria y proporciona herramientas para lograr un alto paralelismo en la ejecución de tareas, evitando el uso de recolección de basura y runtime (el runtime se limita a la inicialización básica y al mantenimiento 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 añadido la posibilidad de especificar múltiples expresiones «let» dentro de bloques condicionales «if» y «while» utilizando para su combinación el operador «&&» (AND lógico). Las expresiones «let» pueden combinarse con expresiones condicionales booleanas. Las variables declaradas en expresiones let pueden utilizarse en las siguientes expresiones condicionales, así como dentro de bloques «if» y «while». if let Channel::Stable(v) = release_info() && let Semver { major, minor, .. } = v && major == 1 && minor == 88 {
- Se ha añadido soporte para la escritura de funciones «naked» marcadas con el atributo «#[unsafe(naked)]» que contienen una única llamada a «naked_asm!». Las funciones creadas de esta manera carecen de epílogo y prólogo generados por el compilador, lo que permite al desarrollador tener control total sobre el código ensamblador auxiliar que se adjunta a la función (una función «naked» contiene únicamente las instrucciones de ensamblador especificadas por el desarrollador y no incluye manejadores especiales para argumentos y valores devueltos, añadidos por el compilador). Las funciones «naked» se consideran una alternativa más conveniente a las funciones definidas en el bloque «global_asm!». #[unsafe(naked)] pub unsafe extern «sysv64» fn wrapping_add(a: u64, b: u64) -> u64 { core::arch::naked_asm!( «add rax, rdi, rsi», «ret» ); }
- Se ha añadido soporte para literales booleanos «true» y «false» en el lenguaje de predicados, utilizado en los atributos de compilación condicional «cfg» y «cfg_attr» (que permiten incluir o excluir partes del código según las condiciones dadas), los cuales se identifican con configuraciones que siempre están habilitadas o siempre están deshabilitadas. Estos literales también pueden ser utilizados en el macro «cfg!» y en las tablas «[target]» en los manifiestos y configuraciones para Cargo. Las expresiones cfg(true) y cfg(false) pueden utilizarse en lugar de cfg(all()) y cfg(any()) para expresar sus intenciones de forma más clara.
- En el gestor de paquetes Cargo se incluye el inicio automático del recolector de basura para limpiar la caché en el directorio personal del usuario. Anteriormente, los paquetes guardados en la caché con las dependencias descargadas no se eliminaban, lo que conducía a un crecimiento constante del consumo de espacio en disco. El mecanismo de recolección de basura habilitado eliminará automáticamente los archivos crate descargados externamente que no hayan sido accedidos durante más de 3 meses, y los archivos crate instalados localmente que no hayan sido accedidos durante más de un mes. La limpieza de la caché no se activa al usar las opciones «—offline» o «—frozen» en cargo.
- Se ha trasladado un nuevo lote de API a la categoría estable, incluyendo la estabilización de métodos e implementaciones de traits:
- Cell::update
- impl Default for *const T
- impl Default for *mut T
- mod ffi::c_str
- HashMap::extract_if
- HashSet::extract_if
- hint::select_unpredictable
- proc_macro::Span::line
- proc_macro::Span::column
- proc_macro::Span::start
- proc_macro::Span::end
- proc_macro::Span::file
- proc_macro::Span::local_file
- ::as_chunks
- ::as_rchunks
- ::as_chunks_unchecked
- ::as_chunks_mut
- ::as_rchunks_mut
- ::as_chunks_unchecked_mut
- El atributo «const» se aplica en las funciones:
- NonNull::replace
- ::replace
- std::ptr::swap_nonoverlapping
- Cell::replace
- Cell::get
- Cell::get_mut
- Cell::from_mut
- Cell::as_slice_of_cells
- Se eliminó el primer nivel de soporte para la plataforma objetivo i686-pc-windows-gnu.
También se pueden mencionar eventos relacionados con Rust:
- El proyecto Munal OS desarrolla un sistema operativo experimental, escrito en Rust y basado en el concepto de unikernel. En Munal OS no se utiliza la multitarea por eliminación, el mapeo de páginas de memoria ni el espacio de direcciones virtual. Se utiliza un esquema de memoria de UEFI. El núcleo y las aplicaciones se ejecutan en un mismo espacio de direcciones utilizando un modelo de seguridad basado en el aislamiento sandbox de WASM (incluye un motor wasmi para ejecutar aplicaciones en forma de código de bytes de WebAssembly).
El sistema operativo cuenta con una interfaz gráfica y soporta el manejo a través del teclado y el ratón. Para el desarrollo de aplicaciones gráficas se utiliza un toolkit propio con una biblioteca de widgets. Para la interacción en red se ofrecen una pila TCP y un controlador de dispositivo de red. Entre las aplicaciones disponibles para Munal OS se encuentran: un navegador web con soporte básico para HTML y HTTPS, un editor de texto y un terminal para ejecutar código en Python. El código es abierto bajo la licencia MIT.

- Se ha lanzado el núcleo Asterinas 0.15.2, desarrollado en Rust y que proporciona un ABI compatible con el núcleo de Linux. El núcleo soporta arquitecturas x86-64 y RISC-V, y implementa 206 de 368 llamadas al sistema de Linux. En el desarrollo del núcleo participan 45 desarrolladores, principalmente de diversas universidades chinas. El núcleo está construido usando la arquitectura 'framekernel', donde los componentes del núcleo se colocan en un espacio de direcciones común, y la seguridad se logra a través de la separación lógica del código seguro y del código en el que pueden surgir problemas de seguridad. Todas las llamadas al sistema, sistemas de archivos y controladores se implementan en el nivel de Servicios del SO y no pueden incluir bloques unsafe. El código se distribuye bajo la licencia MPL 2.0.
- Se ha preparado una herramienta rsched para el núcleo de Linux, que permite analizar estadísticas sobre el funcionamiento del planificador de tareas. En la práctica, la herramienta permite evaluar las decisiones del planificador relacionadas con la asignación de recursos a los procesos, así como rastrear las demoras que surgen durante la planificación. Para la recopilación de datos en el núcleo se utiliza el subsistema BPF, y la herramienta que funciona en el espacio de usuario está escrita en Rust. El autor de la herramienta es Chris Mason, creador y arquitecto principal del sistema de archivos Btrfs.
- La empresa Collabora ha anunciado el desarrollo de una variante de la herramienta Coccinelle para el lenguaje Rust. Coccinelle está originalmente diseñado para automatizar la búsqueda y transformación de código en lenguaje C en el núcleo de Linux. Las transformaciones se definen en forma de reglas, que se asemejan a parches abstractos, no vinculados a una posición específica en el código.
- Los desarrolladores de GNOME han presentado una biblioteca para la carga de imágenes llamada glycin, escrita en Rust y que proporciona decodificación de imágenes utilizando aislamiento sandbox. Se admite la entrega de contenido decodificado a través de gdk::Textures y la extracción de metadatos. Se proporcionan enlaces para utilizar glycin en GTK4, así como un backend para integrar glycin en la biblioteca GdkPixbuf, utilizada en GNOME para la carga de imágenes. Glycin ya está siendo utilizado en el visor de imágenes Loupe, que se ofrece por defecto en GNOME. Al mismo tiempo, el backend para GdkPixbuf permite utilizar glycin en GNOME Shell, generadores de miniaturas y aplicaciones GNOME arbitrarias, sin necesidad de realizar cambios en estos programas.
Fuente: opennet.ru

