Lanzamiento del lenguaje de programación Rust 1.42

publicado lanzamiento del lenguaje de programación del sistema Moho 1.42, fundado por el proyecto Mozilla. El lenguaje se centra en la seguridad de la memoria, proporciona administración automática de la memoria y proporciona herramientas para lograr un alto paralelismo de tareas sin utilizar un recolector de basura y tiempo de ejecución.

La gestión automática de la memoria de Rust libera al desarrollador de la manipulación del puntero y protege contra problemas que surgen de la manipulación de la memoria de bajo nivel, como accesos posteriores a la memoria, desreferencias de punteros nulos, desbordamientos del búfer y similares. Se está desarrollando un administrador de paquetes para distribuir bibliotecas, garantizar el ensamblaje y gestionar las dependencias del proyecto. , permitiéndole obtener las bibliotecas necesarias para el programa con un solo clic. Se admite un repositorio para alojar bibliotecas. cajas.io.

El principal innovaciones:

  • Añadido por soporte para plantillas para hacer coincidir partes de sectores (matrices dinámicas, sectores). Anteriormente, se permitían coincidencias exactas, pero ahora es posible utilizar construcciones marcadas ".." para cubrir los elementos restantes de la matriz. Por ejemplo:

    fn foo(palabras: &[&str]) {
    asociar palabras {

    // comprueba los elementos iniciales de la matriz y los ignora
    elementos que les siguen
    ["Hola", "Mundo", "!", ..] => println!("¡Hola mundo!"),

    // comprueba los dos primeros elementos "Foo" y "Bar", y el resto no es importante
    ["Foo", "Bar", ..] => println!("Baz"),

    // ignora todo, pero el último elemento debe ser "!".
    [.., “!”] => println!(“!!!”),

    // en el segmento inicial incluimos todo excepto el último elemento, que debería ser “z”
    [inicio @ .., "z"] => println!("empieza con: {:?}", inicio),

    // en el segmento final ponemos todo menos el primer elemento, que debería ser “a”.
    ["a", fin @ ..] => println!("termina con: {:?}", fin),

    descanso => ​​println!("{:?}", descanso),
    }
    }

  • Se agregó una nueva macro "¡coincidencias!", que toma una expresión y un patrón como entrada y devuelve "verdadero" si el patrón coincide con la expresión. La plantilla puede utilizar operaciones "|" y si".

    coincide con self.partial_cmp(otro) {
    Algunos (Menos) => verdadero,
    _ => falso,
    }

    ¡coincidencias!(self.partial_cmp(otro), Algunos(Menos))

    let foo = 'f';
    ¡afirmar!(coincide!(foo, 'A'..='Z' | 'a'..='z'));

    dejar barra = Algunos(4);
    afirmar!(coincide!(barra, Algunos(x) si x > 2));

  • En mensajes de pánico que se muestran cuando se usan incorrectamente
    Los tipos Opción y Resultado ahora muestran números de línea con un enlace al código que realizó la llamada problemática, en lugar de enlaces al código que implementa la llamada en libcore. Por ejemplo, el cambio afecta las llamadas para desenvolver y esperar sobre Option::None, o falla cuando se usan unwrap_err, expect, expect_err y métodos similares en el tipo Resultado.

  • El administrador de paquetes Cargo proporciona sustitución automática de "proc_macro crate" en el bloque "externo" para paquetes con macros de procedimiento. Este cambio permite que la directiva "use" se aplique a macros de procedimiento sin tener que especificar "extern crate proc_macro;" en el código. Por ejemplo, si el programa usa la línea "use proc_macro::TokenStream;", entonces el código seguirá funcionando si se elimina "extern crate proc_macro;".
  • Se han ampliado las capacidades de la biblioteca estándar. En iter::Vacío agregado Soporte de envío y sincronización para cualquier valor T.
    Pin de llamadas::{map_unchecked, map_unchecked_mut} entregado de tener que devolver un valor de tipo para la implementación "Tamaño".
    En io::Cursor implementado ParcialEq y Ec. El atributo "const" determina la posibilidad de uso en cualquier contexto en lugar de constantes, aplicado para el método Layout::new.

  • Una nueva parte de la API se ha transferido a la categoría estable, incluida la estabilizada CondVar::wait_ while, CondVar::wait_timeout_ while,
    DebugMap::clave, DebugMap::valor,
    Soltar manualmente::tomar,
    ptr::slice_from_raw_parts_mut y ptr::slice_from_raw_parts.

  • El método Error::description ha quedado obsoleto.
  • Se proporcionó soporte de segundo nivel para las plataformas armv7a-none-eabi y riscv64gc-unknown-linux-gnu. Se ha proporcionado soporte para la biblioteca estándar para la plataforma riscv64gc-unknown-linux-gnu.
    Plataformas Apple de 32 bits degradado hasta el tercer nivel de soporte, que implica soporte básico, pero sin pruebas automatizadas ni publicación de compilaciones oficiales. La degradación del soporte se debe a que Apple ya no admite plataformas de 32 bits.

Fuente: opennet.ru

Añadir un comentario