Lanzamiento de Rust 1.79. Se ha creado un consorcio para el desarrollo de sistemas altamente confiables en Rust

Se ha publicado la versión 1.79 del lenguaje de programación de propósito general Rust, que se basa en un proyecto de Mozilla, pero que ahora se desarrolla bajo el patrocinio de la organización independiente sin fines de lucro Rust Foundation. El lenguaje se centra en el manejo seguro de la memoria y proporciona herramientas para lograr un alto paralelismo en la ejecución de tareas, todo sin recurrir a un recolector de basura y un runtime (el runtime se limita a la inicialización básica y el soporte 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:

  • Se ha añadido soporte para constantes inline, que se pueden especificar directamente en el código mediante bloques «const { … }», que se procesan en el contexto de constantes y permiten prescindir de la definición separada de constantes. El código especificado en el bloque «const { … }» se evalúa en el momento de la compilación y se utiliza como una constante, sin ejecución durante la ejecución del programa. A diferencia de la definición de constantes a través de la expresión «const ITEM: … = …», en los bloques «const { … }» no es necesario especificar el tipo, ya que admiten la inferencia automática de tipos. Por ejemplo, el código con una definición separada de la constante

    const EMPTY: Option<Vec> = None;
    let foo = [EMPTY; 100];

    se puede reemplazar por el uso in situ:

    let foo = [const { None }; 100];

  • Se ha estabilizado la sintaxis «T: Trait» para definir restricciones en la posición de tipo asociativo, lo que permite acortar la definición de expresiones con restricciones anidadas de tipo que antes requerían especificar un impl Trait anidado o múltiples condiciones «where».
  • Se ha garantizado la extensión automática del tiempo de vida de los valores temporales que se utilizan en construcciones «match» e «if».

    let a = if true {
    ..;
    &temp() // el tiempo de vida se extenderá
    } else {
    ..;
    &temp() // el tiempo de vida se extenderá
    };

  • Se ha estabilizado la posibilidad de importar la función main de otros módulos y paquetes crate.
  • Al compilar la biblioteca estándar, se utiliza el flag «-Cforce-frame-pointers=yes», que añade datos para la reconstrucción de la pila durante la perfilación de programas.
  • Se ha trasladado un nuevo lote de API a la categoría estable, incluyendo la estabilización de métodos e implementaciones de traits:
    • {integer}::unchecked_add
    • {integer}::unchecked_mul
    • {integer}::unchecked_sub
    • ::split_at_unchecked
    • ::split_at_mut_unchecked
    • ::utf8_chunks
    • str::Utf8Chunks
    • str::Utf8Chunk
    • ::is_aligned
    • ::is_aligned
    • NonNull::is_aligned
    • ::len
    • ::len
    • ::is_empty
    • ::is_empty
    • NonNull::::is_empty
    • CStr::count_bytes
    • io::Error::downcast
    • num::NonZero
    • path::absolute
    • proc_macro::Literal::byte_character
    • proc_macro::Literal::c_string
  • El signo «const», que define la posibilidad de uso en cualquier contexto en lugar de constantes, se aplica en funciones:
    • Atomic*::into_inner
    • io::Cursor::new
    • io::Cursor::get_ref
    • io::Cursor::position
    • io::empty
    • io::repeat
    • io::sink
    • panic::Location::caller
    • panic::Location::file
    • panic::Location::line
    • panic::Location::column
  • Estabilizado
    parte de las capacidades que se pueden utilizar al compilar en la representación intermedia Webassembly (WASM).
  • Implementado el tercer nivel de soporte para las plataformas aarch64-apple-visionos, aarch64-apple-visionos-sim y riscv32ima-unknown-none-elf. El tercer nivel implica soporte básico, pero sin pruebas automatizadas, publicación de versiones oficiales y verificación de la capacidad de ensamblar código.
  • Implementado el segundo nivel de soporte para las plataformas objetivo aarch64-pc-windows-gnullvm, i686-pc-windows-gnullvm y x86_64-pc-windows-gnullvm. El segundo nivel de soporte implica una garantía de ensamblaje.

Además, la organización Rust Foundation, que supervisa el ecosistema relacionado con el lenguaje Rust, anunció la creación del consorcio «Safety-Critical Rust Consortium», destinado al uso del lenguaje Rust en soluciones que requieren alta confiabilidad (Software Safety-Critical), cuyos fallos pueden amenazar la vida de las personas, dañar el medio ambiente o provocar daños graves al equipo. Se unieron al consorcio empresas como ARM, AdaCore, Ferrous Systems, OxidOS, Synopsys, HighTec EDV-Systeme GmbH, TrustInSoft, Veecle y Woven by Toyota. Entre las tareas que abordará el consorcio se mencionan la redacción de guías y el desarrollo de bibliotecas, linters y analizadores estáticos, así como la aplicación de métodos de verificación formal de confiabilidad y el desarrollo de subconjuntos del lenguaje para sistemas de alta confiabilidad.

Entre los proyectos relacionados con sistemas de alta confiabilidad, se puede destacar Verus, una herramienta para verificar la corrección del código escrito en Rust. La verificación se realiza mediante la definición de una especificación que describe el comportamiento aceptable del código. Durante la ejecución del código ejecutable, Verus verifica la conformidad con la especificación para confirmar la corrección del funcionamiento.

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