Lanzamiento del lenguaje de programación Rust 1.66

Se ha lanzado el lenguaje de programación de propósito general Rust 1.66, 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:

  • En enumeraciones con representaciones enteras (el atributo “#[repr(Int)]”), se permite la indicación explícita del discriminante (el número de la opción en la enumeración), incluso si la enumeración contiene campos. #[repr(u8)] enum Foo { A(u8), # discriminante 0 B(i8), # discriminante 1 C(bool) = 42, # discriminante 42 }
  • Se agregó la función core::hint::black_box, que simplemente devuelve el valor recibido. Debido a que el compilador cree que una función determinada hace una cosa específica, la función black_box se puede usar para deshabilitar la optimización de bucles del compilador al realizar pruebas de rendimiento del código o al examinar el código de máquina generado (para que el compilador no considere el código inutilizable y elimine él). Por ejemplo, en el siguiente ejemplo, especificar black_box(v.as_ptr()) evita que el compilador suponga que el vector v no está en uso. utilizar std::hint::black_box; fn push_cap(v: &mut Vec) { para i en 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • El administrador de paquetes "cargo" ofrece el comando "eliminar", que le permite eliminar dependencias del manifiesto Cargo.toml desde la línea de comando.
  • 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:
    • proc_macro::Span::text_fuente
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wraping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wraping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturando_sub_unsigned, envolviendo_sub_unsigned}
    • BTreeSet::{primero, último, pop_first, pop_last}
    • BTreeMap::{primer_valor_clave, último_valor_clave, primera_entrada, última_entrada, pop_first, pop_last}
    • Agregue implementaciones de AsFd para tipos de bloqueo estándar cuando use WASI.
    • implícito TryFrom > para Caja<[T; N]>
    • núcleo::pista::caja_negra
    • Duración::try_from_secs_{f32,f64}
    • Opción::descomprimir
    • std::os::fd
  • Se permite el uso de rangos “..X” y “..=X” en las plantillas.
  • Al ensamblar el frontend del compilador Rustc y el backend de LLVM, se utilizan los modos de optimización LTO (Link Time Optimization) y BOLT (Binary Optimization and Layout Tool), que permiten aumentar el rendimiento del código resultante y reducir el consumo de memoria.
  • Se implementó el tercer nivel de soporte para las plataformas armv5te-none-eabi y thumbv5te-none-eabi. El tercer nivel implica soporte básico, pero sin pruebas automatizadas, publicación de compilaciones oficiales ni verificación de si el código se puede compilar.
  • Se agregó soporte para vincular con bibliotecas universales de macOS.

Además, podemos notar la inclusión del front-end del compilador del lenguaje Rust (gccrs) en el código base de GCC. La interfaz está incluida en la rama GCC 13, que se lanzará en mayo de 2023. A partir de GCC 13, las herramientas nativas de GCC se pueden utilizar para compilar programas en el lenguaje Rust sin la necesidad de instalar el compilador Rustc, creado con desarrollos LLVM. La implementación de Rust en GCC 13 será una versión beta, no habilitada de forma predeterminada.

Fuente: opennet.ru

Añadir un comentario