Se lanzó Rust 1.84. Núcleos de Tock y Vekos escritos en Rust. Dialecto mini-C

Se ha lanzado el lenguaje de programación de propósito general Rust 1.84, 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 liberan al desarrollador de errores al manipular punteros y protegen contra problemas que surgen debido al manejo de memoria de bajo nivel, como acceder a un área de memoria después de que se haya liberado, desreferenciar punteros nulos, desbordamientos de búfer, etc. Para distribuir bibliotecas, garantizar el ensamblaje y administrar las dependencias del proyecto, se está desarrollando el administrador de paquetes Cargo. El repositorio crates.io se mantiene para alojar 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 administrador de paquetes Cargo tiene un mecanismo de manejo de dependencias estabilizado que selecciona versiones de componentes dependientes según la compatibilidad con las versiones del compilador Rust declaradas como mínimamente compatibles con el proyecto (MSRV, Minimum Supported Rust Version). Esta nueva característica elimina la necesidad de que los mantenedores seleccionen manualmente versiones anteriores de cada dependencia en proyectos que siguen siendo compatibles con versiones anteriores de la cadena de herramientas Rust. El nuevo modo de resolución de dependencias estará habilitado de forma predeterminada en Rust 1.85, pero por ahora está disponible como una opción, que se puede habilitar configurando 'incompatible-rust-versions = " en la sección "[resolver]" del ". archivo "cargo/config.toml". «fallback»'.
  • El compilador ha comenzado a migrar a un nuevo solucionador de rasgos, diseñado para verificar los límites de aplicabilidad de rasgos, normalizar tipos y evaluar la compatibilidad de tipos. En la versión 1.84, se utiliza un nuevo controlador para comprobar la consistencia de las implementaciones de características, es decir, estimaciones de la existencia de no más de un rasgo para el tipo en consideración, teniendo en cuenta el código de otros paquetes de cajas. Esta verificación eliminó problemas en la antigua implementación del controlador de tipos que podrían generar conflictos debido a la intersección de diferentes implementaciones de características.
  • Se ha propuesto una nueva API, "Strict Provenance", que se puede utilizar para convertir un puntero a un entero y viceversa, teniendo en cuenta los metadatos adjuntos al puntero con información sobre su origen y área de uso (además de la dirección, un valor de "procedencia" se adjunta al puntero con información sobre la relación con otros punteros, lo que permite determinar dónde y cuándo un puntero puede acceder a la memoria). La conversión de un puntero a un entero y viceversa da como resultado un comportamiento indefinido debido a la dificultad de rastrear el origen del puntero resultante. La nueva API permite realizar operaciones de puntero de bajo nivel, como almacenar información adicional en los bits de orden bajo de un puntero, sin convertir el puntero a un entero.
  • 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:
    • Ipv6Addr::is_unique_local
    • Ipv6Addr::is_unicast_link_local
    • núcleo::ptr::con_expuesta_procedencia
    • core::ptr::with_exposed_provenance_mut
    • ::dirección
    • ::exponer_procedencia
    • ::con_dirección
    • ::map_addr
    • ::isqrt
    • ::checked_isqrt
    • ::isqrt
    • No cero::isqrt
    • núcleo::ptr::sin_procedencia
    • core::ptr::sin_provenance_mut
    • núcleo::ptr::colgante
    • núcleo::ptr::dangling_mut
    • Pin::as_deref_mut
  • El signo "const" se utiliza en funciones:
    • AtomicBool::from_ptr
    • AtomicPtr::from_ptr
    • AtomicU8::from_ptr
    • AtomicU16::from_ptr
    • AtomicU32::from_ptr
    • AtomicU64::from_ptr
    • AtomicUsize::from_ptr
    • AtómicoI8::from_ptr
    • AtómicoI16::from_ptr
    • AtómicoI32::from_ptr
    • AtómicoI64::from_ptr
    • AtomicIsize::from_ptr
    • ::is_null
    • ::as_ref
    • ::as_mut
    • Pin::nuevo
    • Pin::new_unchecked
    • Pin::get_ref
    • Pin::into_ref
    • Pin::get_mut
    • Pin::get_unchecked_mut
    • Pin::static_ref
    • Pin::static_mut
  • Soporte estabilizado para inserciones en línea de ensamblador para arquitecturas s390x y Arm64EC.
  • Se ha estabilizado la compatibilidad con la funcionalidad de valores múltiples, tipos de referencia y llamadas finales para la plataforma de destino WebAssembly.
  • Se ha implementado el segundo nivel de soporte para la plataforma wasm32v1-none. El segundo nivel de soporte implica una garantía de montaje.

Además, se pueden destacar varios proyectos relacionados con Rust:

  • Se ha publicado la versión del sistema operativo Tock 2.2, escrito en el lenguaje Rust y orientado al uso en microcontroladores. El sistema permite la ejecución simultánea de múltiples aplicaciones no confiables en dispositivos integrados con RAM limitada, como sensores, TPM (módulo de plataforma confiable), claves de autenticación y wearables. Se admiten plataformas con microcontroladores basados ​​en arquitecturas ARM Cortex-M y RISC-V. La característica clave de Tock es el aislamiento de las capas de aplicación, kernel y controlador, así como el aislamiento de cada aplicación y controlador individualmente. El aislamiento utiliza características del lenguaje Rust y separación de niveles de protección de memoria.
  • El proyecto VEKOS (Verified Experimental Kernel OS) desarrolla un kernel de sistema operativo en lenguaje Rust, que proporciona verificación de componentes ejecutables. Para cada operación del sistema de archivos, creación de procesos y asignación de memoria, se genera una prueba criptográfica que permite verificar la operación durante la ejecución (la implementación se compara con el uso de una cadena de bloques para verificar acciones en el sistema operativo). En el sistema de archivos VKFS, para garantizar la integridad y la protección contra la distorsión retroactiva, se utiliza la estructura "Merkle Tree", en la que cada rama verifica todas las ramas y nodos subyacentes, gracias al hashing del árbol. La asignación de memoria se realiza en modo COW (copia en escritura).
  • Un grupo de investigadores de Microsoft e Inria está desarrollando un subconjunto del lenguaje C, Mini-C, diseñado para traducir automáticamente programas en C a una representación en el lenguaje Rust. A diferencia del compilador c2rust, el nuevo proyecto permite generar código Rust sin utilizar unsafe, pero está orientado principalmente a convertir proyectos C que tengan una prueba formal de confiabilidad. La implicación es que será más fácil traducir primero un proyecto C a una representación Mini-C, que no permite la aritmética de punteros, que reescribir bloques inseguros después de la compilación directa de C a Rust.

    La implementación del compilador se basa en el kit de herramientas KaRaMeL. Mini-C fue desarrollado y probado como parte de un proyecto para reescribir la biblioteca criptográfica HACL* en Rust, para la cual se ha proporcionado una prueba formal de confiabilidad. Se utilizó una prueba similar para demostrar la capacidad de generar código Rust seguro desde Mini-C.

  • Daniel Stenberg, el autor de la utilidad curl, ha anunciado que el proyecto Curl dejará de desarrollar y brindar soporte a un backend HTTP alternativo escrito en Rust utilizando la biblioteca Hyper. La razón esgrimida es la falta de interés por parte de los desarrolladores y usuarios.
  • Se ha anunciado el lanzamiento beta del shell de comandos Fish 4.0, reescrito en Rust. Se observa que después de dos años de desarrollo, el código base de Fish se tradujo completamente de C++ a Rust. La transición a Rust nos permitió resolver problemas con multithreading, obtener herramientas modernas que detectan errores en la etapa de compilación, mejorar la seguridad del trabajo con memoria y hacer el proyecto más atractivo para nuevos desarrolladores.
  • El Proyecto Tor ha lanzado Arti 1.3.2, una implementación alternativa del cliente Tor escrita en Rust. Arti proporciona una biblioteca integrable que puede ser utilizada por varias aplicaciones. Arti se basa en experiencias de desarrollo anteriores de Tor para evitar problemas arquitectónicos conocidos y hacer que el proyecto sea más modular y eficiente. La rama 1.x está marcada como adecuada para ser utilizada por usuarios regulares y proporciona el mismo nivel de privacidad, usabilidad y estabilidad que la implementación principal de C. La nueva versión continúa el desarrollo de RPC, prepara la implementación del soporte de retransmisión y agrega protección contra ataques DoS en los servicios Onion.
  • Se ha publicado el lanzamiento del motor de juego Bevy 0.15, escrito en Rust. El motor utiliza un modelo basado en datos para definir la lógica del juego, construido sobre un conjunto de componentes Bevy ECS (Entity Component System) ya preparados que se pueden ejecutar en paralelo. Admite renderizado 2D y 3D, animación esquelética, definición de gráficos de renderizado, sistema de generación de escenas, marco de interfaz de usuario y realización de cambios en escenas y recursos sin necesidad de reiniciar.
  • Se ha lanzado Helix 25.01, un editor de texto de consola escrito en Rust que amplía las ideas detrás de vim y neovim. Integración soportada con servidores LSP y Tree-sitter, selección simultánea de varios bloques, uso de varios cursores durante la edición, temas de diseño, protocolo de depuración DAP (Debug Adapter Protocol).
  • El motor del navegador Servo, escrito en Rust, ha agregado soporte para el modo oscuro. El tamaño del navegador ServoShell se ha reducido en un 20%. El soporte para especificaciones web se ha ampliado hasta el punto de que es posible iniciar sesión y leer mensajes en Discord (aún no es posible enviar mensajes).
  • Mozilla presentó el kit de herramientas Uniffi for React Native para crear módulos para React Native en el lenguaje Rust.
  • Se han realizado pruebas de rendimiento de los codificadores de imágenes PNG. Los decodificadores Rust (png, zune-png, wuffs) resultaron ser más rápidos que los decodificadores C (libpng, spng, stb_image). Por ejemplo, el paquete png (image-rs) superó a libpng en 1.8 veces en el sistema x86 y en 1.5 veces en el sistema ARM. image-rs: 375.401 MP/s (promedio) 318.632 MP/s (promedio geográfico) zune-png: 376.649 MP/s (promedio) 302.529 MP/s (promedio geográfico) wuffs: 376.205 MP/s (promedio) 287.181 MP/s ( geomean) libpng: 208.906 MP/s (promedio) 173.034 MP/s (geomean) spng: 299.515 MP/s (promedio) 235.495 MP/s (geomean) stb_image: 234.353 MP/s (promedio) 171.505 MP/s (geomean)

Fuente: opennet.ru

Añadir un comentario