Lanzamiento de Rust 1.89. Aproximadamente el 8 % de los paquetes fuente de Debian Sid están vinculados a Rust.

Se ha lanzado el lenguaje de programación Rust 1.89, fundado por el proyecto Mozilla, pero ahora desarrollado bajo el auspicio de la Fundación Rust, una organización independiente sin ánimo de lucro. El lenguaje se centra en la seguridad de la memoria y proporciona herramientas para lograr un alto paralelismo en la ejecución de tareas, sin necesidad de un recolector de basura ni de tiempo de ejecución (el tiempo de ejecución se limita a la inicialización y el mantenimiento básicos 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 proporcionó la capacidad de usar el símbolo "_" como argumento para parámetros genéricos con el indicador "const" para inferir los valores de estos parámetros en función del contexto circundante. pub fn all_false () -> [bol; LEN] { [falso; _] }
  • Se añadió una nueva advertencia de pelusa, "mismatched_lifetime_syntaxes", para solucionar el problema de la definición no obvia del tiempo de vida en las firmas de funciones al usar el mecanismo de "elisión de tiempo de vida" (que determina automáticamente el tiempo de vida de las referencias, evitando así tener que especificarlo manualmente). Esta advertencia comprueba que los parámetros de entrada y salida de una función pertenezcan al mismo grupo de tipos. Los grupos se forman en función de la compatibilidad con la especificación explícita del tiempo de vida y la capacidad del compilador para inferirlo automáticamente (por ejemplo, en los tipos "&'a T" y "ContainsLifetime<'a>", el tiempo de vida puede estar presente explícitamente, pero el compilador no puede determinarlo automáticamente, mientras que en los tipos "&T", "&'_ T" y "ContainsLifetime<'_>" se permiten tanto la especificación explícita como la determinación automática).
  • El atributo "target_feature" para sistemas x86 implementa la capacidad de verificar la compatibilidad con los conjuntos de instrucciones extendidos sha512, sm3, sm4, kl y widekl, así como con las características individuales de avx512. #[target_feature(enable = "avx512bw")] pub fn cool_simd_code(/* .. */) -> /* … */ { /* … */ }
  • Se aseguró de que doctest (pruebas integradas en la documentación) se ejecute no solo para la plataforma de destino actual, sino también para otras plataformas especificadas al ejecutar el administrador de paquetes "cargo" ("cargo test --doc --target other_target").
  • Para las funciones 'extern "C"' durante la compilación para el destino "wasm32-unknown-unknown", se implementa la ABI C estándar para WebAssembly.
  • Con algunas salvedades respecto de la compatibilidad de tipos, ahora se permite el uso de los tipos i128 y u128 en funciones C externas (extern "C"), que anteriormente producían la advertencia de pelusa "improper_ctypes_definitions".
  • 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:
    • Muchas funciones intrínsecas del compilador para procesadores x86, incluidas funciones para AVX512, SHA512, SM3 y SM4.
    • No cero
    • Archivo::lock
    • Archivo::lock_shared
    • Archivo::try_lock
    • Archivo::try_lock_shared
    • Archivo::desbloquear
    • No nulo::de_ref
    • No nulo::de_mut
    • No nulo::sin_procedencia
    • No nulo::con procedencia expuesta
    • No nulo::exponer_procedencia
    • OsString::fuga
    • PathBuf::fuga
    • Resultado::aplanar
    • std::os::linux::net::TcpStreamExt::quickack
    • std::os::linux::net::TcpStreamExt::set_quickack

    El signo "const" se utiliza en funciones:

    • <[T; N]>::como_rebanada_mutada
    • <[u8]>::eq_ignorar_caso_ascii
    • str::eq_ignorar_caso_ascii
  • El proceso de migración de la plataforma de destino "x86_64-apple-darwin" del primer nivel de soporte al segundo ha comenzado (Apple planea dejar de dar soporte a la arquitectura x86_64). El primer nivel de soporte implica la creación de ensambles binarios, la realización de pruebas exhaustivas y la máxima garantía de compatibilidad con la plataforma: cada cambio en el compilador se verifica mediante la ejecución de un conjunto de pruebas completo. El segundo nivel de soporte implica una garantía del ensamble, pero no de la superación del conjunto de pruebas.
  • Se ha implementado el tercer nivel de soporte para las plataformas "loongarch32-unknown-none" y "loongarch32-unknown-none-softfloat". Este tercer nivel implica soporte básico, pero sin pruebas automatizadas, publicación de compilaciones oficiales ni verificación de la capacidad de compilar código.

Además, podemos destacar algunos eventos y proyectos relacionados con Rust:

  • Se ha publicado un informe sobre el estado de los paquetes Rust en Debian. Se observa que, en la rama Debian Unstable (Sid), aproximadamente el 8% de los paquetes src del repositorio principal están vinculados mediante dependencias de compilación a al menos un paquete "librust-*". En Debian 12, este porcentaje era del 4.5%. También se observa que más de 3 paquetes incluyen código Rust, trasladado a paquetes librust-..-dev, y 150 paquetes src proporcionan ejecutables compilados o bibliotecas de Rust.

    Los paquetes de interés para Debian incluyen sudo-rs, ntpd-rs, uutils, Sequoia, rpgp, hickory (DNS), Rustls, rav1d y fish. La compatibilidad opcional con Rust está implementada en APT, QEMU (virtiofsd), el kernel de Linux y Mesa, y se espera que esté disponible en LibreOffice. El kit de herramientas debcargo está implementado para convertir paquetes crate en paquetes src de Debian.

  • Se presenta el proyecto tmux-rs, que desarrolla un clon del multiplexor de terminal tmux (gestor de ventanas de consola), reescrito de C a Rust.
  • El desarrollador del controlador Tyr de Collabora ha publicado un artículo sobre la estructura de los controladores de GPU a nivel de kernel y los principios del desarrollo de dichos controladores en el lenguaje Rust.
  • Se demuestra una aplicación universal en Rust, capaz de ejecutarse tanto en CPU como en varias plataformas GPU: CUDA para NVIDIA, SPIR-V para GPU compatibles con Vulkan, Metal para Apple, DirectX 12 para Windows, WebGPU para navegadores.

Fuente: opennet.ru

avatar del autor
ProHoster Consultor, Especialista Técnico
Un especialista técnico en ProHoster Con más de seis años de experiencia en administración de servidores, soluciones VPN y seguridad de redes, gestiono la configuración y el soporte de la infraestructura, superviso la estabilidad del servicio e implemento soluciones para proteger los datos de los clientes. También contribuyo a la optimización del rendimiento y al cumplimiento de los requisitos modernos de seguridad y privacidad.

Añadir un comentario