Lanzamiento del lenguaje de programación Rust 1.40

publicado lanzamiento del lenguaje de programación del sistema Moho 1.40, 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:

  • Se agregó la capacidad de marcar estructuras (struct) y enumeraciones (enum con bloque Variant) usando el atributo "#[no_exhaustivo]", cual permite en el futuro, agregue nuevos campos y opciones a las estructuras y enumeraciones declaradas. Por ejemplo, los desarrolladores de módulos que tienen estructuras con campos declarados públicamente pueden usar "#[non_exhaustive]" para marcar estructuras a las que se les pueden agregar nuevos campos en el futuro. Hasta ahora, en esta situación, el desarrollador se veía obligado a elegir entre declarar campos de forma privada y vincularlos a una lista inmutable de campos. El nuevo atributo elimina esta limitación y le permite agregar nuevos campos en el futuro sin el riesgo de romper el código externo previamente compilado. En los paquetes de cajas, al hacer coincidir las opciones en la sección "coincidencia", se requiere una definición explícita de la máscara "_ => {...}", que cubra posibles campos futuros; de lo contrario, se mostrará un error al agregar nuevos campos.
  • Añadido por la capacidad de llamar a la macro procesal mac!() en un contexto de tipo. Por ejemplo, ahora puede escribir "type Foo = expand_to_type!(bar);" si "expand_to_type" es una macro de procedimiento.
  • En bloques "externos {...}" agregado la capacidad de utilizar macros de procedimientos y atributos, incluidas macros “bang!()”, por ejemplo:

    macro_reglas! make_item { ($nombre:identificación) => { fn $nombre(); } }

    externo {
    make_item!(alfa);
    hacer_item!(beta);
    }

    "C" externa {
    #[mi_identidad_macro] fn foo();
    }

  • en macros implementado capacidad de generar elementos “macro_rules!”. Generando "macro_rules!" posible tanto en macros tipo función (“mac!()”) como en macros en forma de atributos (“#[mac]”).
  • En el elemento de mapeo $m:meta agregado soporte para valores de enumeración de tokens arbitrarios ("[TOKEN_STREAM]", "{TOKEN_STREAM}" y "(TOKEN_STREAM)"), por ejemplo:

    macro_reglas! aceptar_meta { ($m:meta) => {} }
    aceptar_meta!( mi::ruta );
    aceptar_meta!( mi::ruta = "iluminado" );
    aceptar_meta!( mi::ruta ( abc ) );
    aceptar_meta!( mi::ruta [ abc ] );
    aceptar_meta!( mi::ruta { abc } );

  • En el modo Rust 2015, la salida de errores está habilitada para problemas identificados al verificar el préstamo de variables (comprobador de préstamo) utilizando la técnica NLL (Non-Lexical Lifetimes). Anteriormente, las advertencias se reemplazaban por errores cuando se ejecutaba en modo Rust 2018.
    Después de que el cambio se extendió al modo Rust 2015, los desarrolladores finalmente pudieron escapar del antiguo verificador de préstamos.

    Recordemos que el sistema de verificación basado en un nuevo mecanismo para tener en cuenta la vida útil de las variables prestadas permitió identificar algunos problemas que pasaban desapercibidos para el antiguo código de verificación. Dado que la salida de errores para tales comprobaciones podría afectar la compatibilidad con el código que funcionaba anteriormente, inicialmente se emitieron advertencias en lugar de errores.

  • El atributo "const", que determina la posibilidad de utilizarlo en cualquier contexto en lugar de constantes, se utiliza para la función is_power_of_two (para enteros sin signo).
  • Una nueva parte de la API se ha movido a la categoría estable, incluida la macro todo!() y los métodos slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, se han estabilizado.
    Opción::as_deref, Opción::as_deref_mut, Opción::aplanar, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32, f64}::from_be_bytes, {f32,f64}::from_le_bytes y {f32,f64}::from_ne_bytes.

  • En el administrador de paquetes de carga.
    implementado Advertencias del compilador de almacenamiento en caché en el disco. Se agregó la opción "metadatos de carga" al comando "metadatos de carga"--plataforma-filtro"para mostrar solo los paquetes vinculados a la plataforma de destino especificada en la columna de resolución de dependencia. Se agregó la opción de configuración http.ssl-version para definir versiones TLS válidas.
    Se agregó la posibilidad de publicar la sección "dependencias de desarrollo" sin especificar la clave "versión".

  • El compilador Rustc proporciona soporte de tercer nivel para plataformas de destino thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 y mips64el-unknown-linux-muslabi64. El tercer nivel implica soporte básico, pero sin pruebas automatizadas ni publicación de compilaciones oficiales.

Fuente: opennet.ru

Añadir un comentario