Linguaxe de programación Rust versión 1.39

publicado versión da linguaxe de programación do sistema Ferruxe 1.39, fundada polo proxecto Mozilla. A linguaxe céntrase na seguridade da memoria, ofrece xestión automática da memoria e proporciona un medio para lograr un alto paralelismo de tarefas sen utilizar un colector de lixo ou tempo de execución.

A xestión automática da memoria de Rust libera ao programador da manipulación do punteiro e protexe contra os problemas derivados da manipulación de memoria de baixo nivel, como accesos á memoria despois libres, desreferencias de punteiros nulos, desbordamentos do búfer e similares. Estase a desenvolver un xestor de paquetes para distribuír bibliotecas, garantir a montaxe e xestionar as dependencias do proxecto. Carga, o que lle permite obter as bibliotecas necesarias para o programa cun só clic. Admítese un repositorio para aloxar bibliotecas caixóns.io.

O principal innovacións:

  • Estabilizado unha nova sintaxe de programación asíncrona baseada na función "async", o bloque de movemento asíncrono { ... } e o operador ".await", que facilita a escritura de controladores que non bloquean o fluxo de comandos principal. En comparación coa API ofrecida anteriormente para E/S asíncronas, as construcións async/.await son sinxelas de entender, moi lexibles e permítenche implementar interaccións asíncronas complexas mediante técnicas de control de fluxo coñecidas baseadas en bucles, declaracións condicionais e excepcións.

    A sintaxe Async-await permítelle crear funcións que poden pausar a súa execución, devolver o control ao fío principal e, a continuación, retomar a execución desde onde o deixaron. Por exemplo, esta pausa é necesaria ao procesar E/S, na que se pode facer outro traballo mentres se espera a que chegue o seguinte dato. As funcións e bloques definidos con "async fn" e "async move" devolven un trazo Futuro, que define unha representación de cálculo asíncrona diferida. Pode iniciar directamente un cálculo aprazado e obter o resultado mediante o operador ".await". Non se realiza nin se planifica ningunha acción ata que se chame .await, o que permite crear construcións aniñadas complexas sen sobrecarga adicional.

    async fn first_function() -> u32 { .. }
    ...
    let futuro = primeira_función();
    ...
    deixe resultado: u32 = futuro.esperar;

  • Estabilizado "#![feature(bind_by_move_pattern_guards)]", permitindo o uso de variables co tipo de vinculación "por movemento" en modelos e use referencias a estas variables na sección "se" da expresión "combinar". Por exemplo, agora están permitidas as seguintes construcións:

    fn main() {
    let array: Caixa<[u8; 4]> = Caixa::novo([1, 2, 3, 4]);

    matriz de coincidencias {
    nums
    se nums.iter().sum::() == 10

    => {
    soltar (números);
    }
    _ => inalcanzable!(),
    }
    }

  • Indicación permitida atributos ao definir parámetros de función, peches e punteiros de función. Admítense os atributos de compilación condicional (cfg, cfg_attr) que controlan os diagnósticos mediante lint (permitir, advertir, denegar e prohibir) e os atributos de chamada de macros auxiliares.

    fn len(
    #[cfg(windows)] slice: &[u16], // use o parámetro en Windows
    #[cfg(not(windows))] slice: &[u8], // usa noutro sistema operativo
    ) -> use {
    slice.len()
    }

  • Avisos sobre problemas identificados ao comprobar o préstamo de variables (comprobador de préstamos) mediante a técnica NLL (Non-Lexical Lifetimes), traducido na categoría de erros mortais. Lembremos que o sistema de verificación baseado nun novo mecanismo para ter en conta a vida útil das variables prestadas permitiu identificar algúns problemas que pasaron desapercibidos polo antigo código de verificación. Dado que a saída de erros para tales comprobacións podería afectar a compatibilidade co código que funcionaba anteriormente, inicialmente emitíronse avisos en lugar de erros. Agora substituíronse os avisos por erros ao executarse no modo Rust 2018. Na próxima versión, a saída de erros tamén se implementará no modo Rust 2015, que finalmente eliminará o antigo comprobador de préstamos;
  • O atributo "const", que determina a posibilidade de usar en calquera contexto en lugar de constantes, úsase para as funcións Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bytes,
    abdominais, abdominais envoltorios e abdominais desbordados;

  • Unha nova parte das API foi transferida á categoría estable, incluídos os métodos que se estabilizaron
    Pin::into_inner, Instant::checked_duration_since e Instant::saturating_duration_since;

  • O xestor de paquetes de carga agora ten a capacidade de usar a extensión ".toml" para os ficheiros de configuración. Engadido soporte preliminar para construír a biblioteca estándar directamente desde Cargo. Engadiuse a marca "--workspace", substituíndo a controvertida marca "--all". Engadiuse un novo campo aos metadatos "Publish", que permite publicar dependencias especificando unha etiqueta git e un número de versión. Engadida a opción de proba "-Ztimings" para xerar un informe HTML dos tempos de execución de varias etapas de compilación.
  • No compilador rustc, as mensaxes de diagnóstico inclúen recortar as colas de código que non caben no terminal. Forneceu terceiro nivel de soporte para plataformas de destino
    i686-unknown-uefi e sparc64-unknown-openbsd. O terceiro nivel implica soporte básico, pero sen probas automatizadas e publicación de compilacións oficiais.

Fonte: opennet.ru

Engadir un comentario