Lanzamiento del lenguaje de programación Rust 1.39

publicado lanzamiento del lenguaje de programación del sistema Moho 1.39, 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 un medio para lograr un alto paralelismo de tareas sin utilizar un recolector de basura o 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:

  • Estabilizado una nueva sintaxis de programación asincrónica basada en la función "async", el bloque async move {...} y el operador ".await", que facilita la escritura de controladores que no bloquean el flujo de comando principal. En comparación con la API ofrecida anteriormente para E/S asincrónicas, las construcciones async/.await son fáciles de entender, muy legibles y le permiten implementar interacciones asincrónicas complejas utilizando técnicas de control de flujo familiares basadas en bucles, declaraciones condicionales y excepciones.

    La sintaxis Async-await le permite crear funciones que pueden pausar su ejecución, devolver el control al hilo principal y luego reanudar la ejecución desde donde la dejaron. Por ejemplo, esta pausa es necesaria al procesar E/S, en el que se puede realizar otro trabajo mientras se espera que llegue el siguiente dato. Las funciones y bloques definidos con "async fn" y "async move" devuelven un rasgo Future, que define una representación de cálculo asincrónico diferido. Puede iniciar directamente un cálculo diferido y obtener el resultado utilizando el operador ".await". No se realiza ni planifica ninguna acción hasta que se llama a .await, lo que permite crear construcciones anidadas complejas sin gastos generales adicionales.

    asíncrono fn first_function() -> u32 { .. }
    ...
    let futuro = primera_función();
    ...
    deja resultado: u32 = futuro.await;

  • Estabilizado "#![feature(bind_by_move_pattern_guards)]", permitiendo el uso de variables con el tipo de enlace "movimiento secundario" en plantillas y utilizar referencias a estas variables en la sección "si" de la expresión "partido". Por ejemplo, ahora se permiten las siguientes construcciones:

    fn principal() {
    let array: Caja<[u8; 4]> = Cuadro::nuevo([1, 2, 3, 4]);

    coincidencia de matriz {
    nums
    si nums.iter().sum::() == 10

    => {
    soltar(numeros);
    }
    _ => ¡inalcanzable!(),
    }
    }

  • Indicación permitida atributos al definir parámetros de función, cierres y punteros de función. Se admiten atributos de compilación condicional (cfg, cfg_attr) que controlan el diagnóstico a través de lint (permitir, advertir, denegar y prohibir) y atributos auxiliares de llamada de macros.

    fn len(
    #[cfg(windows)] segmento: &[u16], // usa el parámetro en Windows
    #[cfg(not(windows))] segmento: &[u8], // uso en otro sistema operativo
    ) -> usar {
    rebanada.len()
    }

  • Advertencias sobre problemas identificados al verificar el préstamo de variables (comprobador de préstamo) utilizando la técnica NLL (Non-Lexical Lifetimes), traducido en la categoría de errores fatales. 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. Las advertencias ahora se han reemplazado con errores cuando se ejecuta en modo Rust 2018. En la próxima versión, la salida de errores también se implementará en el modo Rust 2015, lo que finalmente eliminará el antiguo verificador de préstamos;
  • El atributo “const”, que determina la posibilidad de utilizar en cualquier contexto en lugar de constantes, se utiliza para las funciones Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bytes,
    abs, abs_envoltura y abs_desbordante;

  • Una nueva parte de las API se ha transferido a la categoría estable, incluidos los métodos que se han estabilizado.
    Pin::into_inner, Instant::checked_duration_since e Instant::saturating_duration_since;

  • El administrador de paquetes de carga ahora tiene la capacidad de usar la extensión “.toml” para archivos de configuración. Se agregó soporte preliminar para construir la biblioteca estándar directamente desde Cargo. Se agregó la bandera "--workspace", reemplazando la controvertida bandera "--all". Se ha agregado un nuevo campo a los metadatos "publicar", que le permite publicar dependencias especificando una etiqueta git y un número de versión. Se agregó la opción de prueba "-Ztimings" para generar un informe HTML de los tiempos de ejecución de varias etapas de compilación.
  • En el compilador Rustc, los mensajes de diagnóstico incluyen recortar las colas del código que no cabe en la terminal. Proporcionó un tercer nivel de soporte para las plataformas de destino.
    i686-desconocido-uefi y sparc64-desconocido-openbsd. El tercer nivel implica soporte básico, pero sin pruebas automatizadas ni publicación de compilaciones oficiales.

Fuente: opennet.ru

Añadir un comentario