Lanzamiento de Rust 1.90. Herramientas para crear controladores de Windows en Rust

Se ha publicado la versión 1.90 del lenguaje de programación Rust, originalmente desarrollado por Mozilla, pero ahora mantenido por la organización independiente sin fines de lucro Rust Foundation. El lenguaje se centra en el trabajo seguro con memoria y proporciona herramientas para lograr un alto paralelismo en la ejecución de tareas, evitando el uso de recolectores de basura y runtime (el runtime se reduce a la inicialización básica y el 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:

  • En Linux, en computadoras con arquitectura x86_64, el enlazador LLD del proyecto LLVM se utiliza de forma predeterminada para el enlace dinámico de paquetes crate. El uso de LLD en comparación con el enlazador BFD ha mejorado el rendimiento del enlace de grandes archivos ejecutables y proyectos con una gran cantidad de información de depuración, así como acelerado la recompilación incremental. En la mayoría de los casos, LLD es compatible hacia atrás con BFD. En caso de problemas, se puede volver a BFD estableciendo la variable de entorno RUSTFLAGS con el flag «-C linker-features=-lld» o agregando a el archivo de configuración .cargo/config.toml: [target.x86_64-unknown-linux-gnu] rustflags = [«-C linker-features=-lld»]
  • En el gestor de paquetes cargo, el comando «publish» implementa la opción «—workspace», que permite publicar automáticamente todos los paquetes del espacio de trabajo seleccionado (conjunto de paquetes que utilizan un único archivo Cargo.lock y un directorio común de resultados de compilación), manteniendo el orden de los paquetes y considerando las dependencias entre ellos.
  • Se ha trasladado un nuevo lote de API a la categoría estable, incluyendo la estabilización de métodos e implementaciones de traits:
    • u{n}::checked_sub_signed
    • u{n}::overflowing_sub_signed
    • u{n}::saturating_sub_signed
    • u{n}::wrapping_sub_signed
    • impl Copy for IntErrorKind
    • impl Hash for IntErrorKind
    • impl PartialEq for CStr
    • impl PartialEq for CStr
    • impl PartialEq<Cow> for CStr
    • impl PartialEq for CString
    • impl PartialEq for CString
    • impl PartialEq<Cow> for CString
    • impl PartialEq for Cow
    • impl PartialEq for Cow
    • impl PartialEq for Cow
  • El atributo «const» se aplica en las funciones:
    • ::reverse
    • f32::floor
    • f32::ceil
    • f32::trunc
    • f32::fract
    • f32::round
    • f32::round_ties_even
    • f64::floor
    • f64::ceil
    • f64::trunc
    • f64::fract
    • f64::round
    • f64::round_ties_even
  • Para las plataformas de destino basadas en la biblioteca Musl, que están en el tercer nivel de soporte, el enlace dinámico está habilitado por defecto: mips64-unknown-linux-muslabi64, powerpc64-unknown-linux-musl, powerpc-unknown-linux-musl, powerpc-unknown-linux-muslspe, riscv32gc-unknown-linux-musl, s390x-unknown-linux-musl y thumbv7neon-unknown-linux-musleabihf.
  • La plataforma objetivo «x86_64-apple-darwin» ha pasado del primer nivel de soporte al segundo (Apple planea descontinuar el soporte para la arquitectura x86_64). El primer nivel de soporte implica la generación de compilaciones binarias, pruebas exhaustivas y la máxima garantía de soporte de la plataforma: cada cambio en el compilador se verifica mediante la ejecución de un conjunto completo de pruebas. El segundo nivel de soporte implica una garantía de compilación, pero sin garantías al pasar el conjunto de pruebas.

Además, se puede destacar el desarrollo por parte de Microsoft de herramientas para la creación de controladores de Windows en el lenguaje Rust. En GitHub ya se ha publicado un conjunto de paquetes crate para crear controladores basados en WDM (Windows Driver Kit), KMDF (Kernel-Mode Driver Framework) y UMDF (User-Mode Driver Framework), así como servicios Win32 adecuados para su uso en Windows 11. El objetivo del proyecto es proporcionar a los desarrolladores en el lenguaje Rust bibliotecas y funciones similares a las que se ofrecen en las herramientas WDK para desarrolladores de controladores en C. En esta etapa, la herramienta de desarrollo de controladores en Rust utiliza un gran número de llamadas unsafe al interactuar con los subsistemas de Windows, pero se planea preparar abstracciones seguras para estructuras del núcleo y DDI (Device Driver Interface). Los desarrollos del proyecto se distribuyen bajo las licencias MIT y Apache 2.0.

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