Lanzamiento de Rust 1.89. Aproximadamente el 8% de los paquetes src en Debian Sid está vinculado 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 el informe de estado del paquete Rust. DebianSe observa que en la rama Debian Inestable (Sid): aproximadamente el 8% de los paquetes src en el repositorio principal tienen dependencias de compilación de al menos un paquete "librust-*". Debian Doce de estos paquetes representaron el 4.5%. También se observó que más de 3.000 paquetes incluyen código Rust, extraído en paquetes librust-..-dev, y 150 paquetes src proporcionan ejecutables o bibliotecas Rust compiladas.

    De interés para Debian Los paquetes mencionados incluyen sudo-rs, ntpd-rs, uutils, Sequoia, rpgp, hickory (DNS), Rustls, rav1d y fish. El soporte opcional para Rust está implementado en APT, QEMU (virtiofsd) y el kernel. Linux y Mesa, y también se espera en LibreOffice. Para convertir paquetes crate a paquetes src Debian El conjunto de herramientas debcargo ha sido implementado.

  • 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 demostró una aplicación universal de Rust, capaz de ejecutarse tanto en CPU como en varias plataformas GPU: CUDA para NVIDIA, SPIR-V para GPU habilitadas para Vulkan, Metal para Apple, DirectX 12 para Windows, WebGPU para navegadores.

Fuente: opennet.ru

Compre alojamiento confiable para sitios con protección DDoS, servidores VPS VDS 🔥 Compra alojamiento web fiable con protección DDoS, servidores VPS VDS | ProHoster