Se ha lanzado el lenguaje de programación de propósito general Rust 1.88, fundado por el proyecto Mozilla pero ahora desarrollado bajo los auspicios de la organización independiente sin fines de lucro Rust Foundation. El lenguaje se enfoca en la seguridad de la memoria y proporciona los medios para lograr un alto paralelismo de trabajos mientras evita el uso de un recolector de basura y tiempo de ejecución (el tiempo de ejecución se reduce a la inicialización básica y el mantenimiento 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:
- Se añadió la capacidad de especificar múltiples expresiones "let" dentro de los bloques condicionales "if" y "while" combinándolas con el operador "&&" (AND lógico). Las expresiones "let" se pueden combinar con expresiones condicionales booleanas. Las variables declaradas en expresiones let se pueden usar en expresiones condicionales posteriores, así como dentro de los bloques "if" y "while". if let Channel::Stable(v) = release_info() && let Semver { major, minor, .. } = v && major == 1 && minor == 88 {
- Se añadió compatibilidad para escribir funciones "desnudas", marcadas con el atributo "#[unsafe(naked)]" y que contienen una única llamada "naked_asm!". Las funciones creadas de esta manera no tienen epílogo ni prólogo generados por el compilador, lo que permite al desarrollador controlar completamente el código ensamblador del servicio asociado a la función (una función "desnuda" contiene únicamente las instrucciones del ensamblador especificadas por el desarrollador y no incluye los manejadores de argumentos especiales ni valores de retorno añadidos por el compilador). Las funciones "desnudas" se consideran una alternativa más conveniente a las funciones definidas en el bloque "global_asm!". #[unsafe(naked)] pub unsafe extern "sysv64" fn wrap_add(a: u64, b: u64) -> u64 { core::arch::naked_asm!( "add rax, rdi, rsi", "ret" ); }
- El lenguaje de predicados utilizado en los atributos de compilación condicional "cfg" y "cfg_attr" (que habilitan o deshabilitan partes del código según las condiciones especificadas) se ha ampliado para admitir los literales booleanos "true" y "false", que se identifican con configuraciones que siempre están habilitadas o deshabilitadas. Estos literales también se pueden usar en la macro "cfg!" y en las tablas "[target]" de los manifiestos y configuraciones de Cargo. Las expresiones cfg(true) y cfg(false) se pueden usar en lugar de cfg(all()) y cfg(any()) para expresar su propósito de forma más explícita.
- El gestor de paquetes Cargo ahora ejecuta automáticamente un recolector de basura para limpiar la caché del directorio personal del usuario. Anteriormente, los paquetes con dependencias descargadas almacenadas en la caché no se limpiaban, lo que provocaba un aumento constante del consumo de espacio en disco. El mecanismo de recolección de basura habilitado eliminará automáticamente los archivos de crate descargados externamente a los que no se haya accedido durante más de tres meses, así como los archivos de crate instalados localmente a los que no se haya accedido durante más de un mes. La limpieza de la caché no se inicia al usar las opciones "--offline" o "--frozen" en crage.
- 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:
- Celda::actualizar
- impl Predeterminado para *const T
- impl Predeterminado para *mut T
- mod ffi::c_str
- HashMap::extraer_si
- HashSet::extraer_si
- pista::seleccionar_impredecible
- proc_macro::Span::línea
- proc_macro::Span::columna
- proc_macro::Span::inicio
- proc_macro::Span::fin
- proc_macro::Span::archivo
- proc_macro::Span::archivo_local
- <[T]>::como_fragmentos
- <[T]>::como_rchunks
- <[T]>::como fragmentos sin marcar
- <[T]>::como_fragmentos_mut
- <[T]>::como_rchunks_mut
- <[T]>::como fragmentos_mutación_sin_marcar
- El signo "const" se utiliza en funciones:
- No nulo ::reemplazar
- <*mut T>::reemplazar
- std::ptr::swap_sin superposición
- Celda::reemplazar
- Celda::obtener
- Celda::obtener_mut
- Celda::de_mut
- Celda::como_porción_de_celdas
- Se eliminó el primer nivel de soporte para la plataforma de destino i686-pc-windows-gnu.
Además, podemos destacar los siguientes eventos relacionados con Rust:
- El proyecto Munal OS desarrolla un sistema operativo experimental escrito en Rust y basado en el concepto de unikernel. Munal OS no utiliza multitarea preemptiva, mapeo de páginas de memoria ni espacio de direcciones virtuales (utiliza la configuración de memoria UEFI). El kernel y las aplicaciones se ejecutan en el mismo espacio de direcciones mediante un modelo de seguridad basado en el aislamiento de espacio aislado WASM (incluye el motor wasmi para ejecutar aplicaciones en formato de bytecode WebAssembly).
El sistema operativo cuenta con una interfaz gráfica y admite el control mediante teclado y ratón. Se utiliza un conjunto de herramientas propietario con una biblioteca de widgets para desarrollar aplicaciones gráficas. Se ofrece una pila TCP y un controlador de dispositivo de red para la interacción en red. Las aplicaciones disponibles para Munal OS incluyen un navegador web con compatibilidad básica con HTML y HTTPS, un editor de texto y una terminal para ejecutar código Python. El código está abierto bajo la licencia MIT.

- Se ha publicado la versión 0.15.2 del kernel de Asterinas, escrito en Rust y que proporciona una interfaz binaria de aplicación (ABI) compatible con el kernel. LinuxEl núcleo es compatible con las arquitecturas x86-64 y RISC-V e implementa 206 de las 368 llamadas al sistema. LinuxCuarenta y cinco desarrolladores, principalmente de diversas universidades chinas, participan en el desarrollo del núcleo. Este se construye utilizando una arquitectura de "núcleo de marco", en la que los componentes del núcleo se ubican en un espacio de direcciones compartido, y la seguridad se logra mediante la separación lógica del código seguro del código que podría ser vulnerable a problemas de seguridad. Todas las llamadas al sistema, los sistemas de archivos y los controladores se implementan en la capa de servicios del sistema operativo y no pueden incluir bloques inseguros. El código se distribuye bajo la licencia MPL 2.0.
- Para el núcleo Linux La utilidad rsched se ha desarrollado para analizar las estadísticas del planificador de tareas. En la práctica, permite evaluar las decisiones del planificador relacionadas con la asignación de recursos a los procesos y el seguimiento de los retrasos en la planificación. El núcleo utiliza el subsistema BPF para la recopilación de datos, y la cadena de herramientas de espacio de usuario está escrita en Rust. La utilidad fue creada por Chris Mason, creador y arquitecto principal del sistema de archivos Btrfs.
- Collabora anunció el desarrollo de una versión específica para Rust del conjunto de herramientas Coccinelle. Coccinelle está diseñado principalmente para automatizar la búsqueda y transformación de código C en el núcleo del sistema operativo. LinuxLas transformaciones se especifican en forma de reglas, que se asemejan a parches abstractos que no están vinculados a una posición específica en el código.
- Los desarrolladores de GNOME han introducido glycin, una biblioteca para cargar imágenes escrita en Rust que proporciona decodificación de imágenes con aislamiento en sandbox. Permite servir contenido decodificado mediante gdk::Textures y extraer metadatos. Se proporcionan enlaces para usar glycin en GTK4, así como un backend para usar glycin en la biblioteca GdkPixbuf, utilizada en GNOME para cargar imágenes. Glycin ya se utiliza en el visor de imágenes Loupe, disponible por defecto en GNOME. Al mismo tiempo, el backend de GdkPixbuf permite usar glycin en GNOME Shell, generadores de miniaturas y cualquier aplicación de GNOME sin modificar estos programas.
Fuente: opennet.ru

