Versão da linguagem de programação Rust 1.39

publicado liberação da linguagem de programação do sistema Ferrugem 1.39, fundado pelo projeto Mozilla. A linguagem se concentra na segurança da memória, fornece gerenciamento automático de memória e fornece um meio de alcançar alto paralelismo de tarefas sem usar um coletor de lixo ou tempo de execução.

O gerenciamento automático de memória do Rust libera o desenvolvedor da manipulação de ponteiros e protege contra problemas decorrentes da manipulação de memória de baixo nível, como acessos de memória pós-liberação, desreferências de ponteiro nulo, saturação de buffer e assim por diante. Está sendo desenvolvido um gerenciador de pacotes para distribuir bibliotecas, garantir a montagem e gerenciar dependências pelo projeto. Carga, permitindo que você obtenha as bibliotecas necessárias para o programa com um clique. Um repositório é suportado para hospedar bibliotecas caixas.io.

O principal inovações:

  • Estabilizado uma nova sintaxe de programação assíncrona baseada na função "async", no bloco async move {...} e no operador ".await", que facilita a gravação de manipuladores que não bloqueiam o fluxo de comando principal. Em comparação com a API oferecida anteriormente para E/S assíncrona, as construções async/.await são simples de entender, altamente legíveis e permitem implementar interações assíncronas complexas usando técnicas familiares de controle de fluxo baseadas em loops, instruções condicionais e exceções.

    A sintaxe Async-await permite criar funções que podem pausar sua execução, retornar o controle ao thread principal e então retomar a execução de onde parou. Por exemplo, essa pausa é necessária ao processar E/S, na qual outro trabalho pode ser feito enquanto se espera a chegada do próximo dado. Funções e blocos definidos com "async fn" e "async move" retornam uma característica promissor, que define uma representação de computação assíncrona diferida. Você pode iniciar diretamente um cálculo diferido e obter o resultado usando o operador “.await”. Nenhuma ação é executada ou pré-planejada até que .await seja chamado, permitindo a criação de construções aninhadas complexas sem sobrecarga adicional.

    assíncrono fn first_function() -> u32 { .. }
    ...
    deixe futuro = primeira_função();
    ...
    deixe o resultado: u32 = future.await;

  • Estabilizado "#![feature(bind_by_move_pattern_guards)]", permitindo o uso de variáveis ​​com o tipo de ligação "movimento secundário" nos modelos e use referências a essas variáveis ​​na seção "if" da expressão "partida". Por exemplo, agora são permitidas as seguintes construções:

    fn principal() {
    deixe matriz: Box<[u8; 4]> = Caixa::new([1, 2, 3, 4]);

    matriz de correspondência {
    nums
    se nums.iter().sum::() == 10

    => {
    soltar(num);
    }
    _ => inacessível!(),
    }
    }

  • Indicação permitida atributos ao definir parâmetros de função, fechamentos e ponteiros de função. Atributos de compilação condicional (cfg, cfg_attr) que controlam diagnósticos via lint (permitir, avisar, negar e proibir) e atributos auxiliares de chamada de macro são suportados.

    fnlen(
    #[cfg(windows)] slice: &[u16], // usa o parâmetro no Windows
    #[cfg(not(windows))] slice: &[u8], // usar em outro sistema operacional
    ) -> usar {
    fatia.len()
    }

  • Alertas sobre problemas identificados na verificação do empréstimo de variáveis ​​(borrow checker) utilizando a técnica NLL (Non-Lexical Lifetimes), traduzido na categoria de erros fatais. Recorde-se que o sistema de verificação baseado num novo mecanismo de contabilização do tempo de vida das variáveis ​​emprestadas permitiu identificar alguns problemas que passaram despercebidos ao antigo código de verificação. Como a saída de erros para tais verificações poderia afetar a compatibilidade com o código em funcionamento anteriormente, avisos foram emitidos inicialmente em vez de erros. Os avisos agora foram substituídos por erros ao executar no modo Rust 2018. Na próxima versão, a saída de erro também será implementada no modo Rust 2015, o que finalmente eliminará o antigo verificador de empréstimo;
  • O atributo “const”, que determina a possibilidade de utilização em qualquer contexto ao invés de constantes, é utilizado para as funções Vec::new, String::new, LinkedList::new, str::len, [T]::len ,str::as_bytes,
    abs, wrap_abs e overflowing_abs;

  • Uma nova parcela de APIs foi transferida para a categoria estável, incluindo métodos que foram estabilizados
    Pin::into_inner, Instant::checked_duration_since e Instant::saturating_duration_since;

  • O gerenciador de pacotes de carga agora pode usar a extensão “.toml” para arquivos de configuração. Adicionado suporte preliminar para construção da biblioteca padrão diretamente do Cargo. Adicionado o sinalizador "--workspace", substituindo o polêmico sinalizador "--all". Um novo campo foi adicionado aos metadados "publicar“, que permite publicar dependências especificando uma tag git e um número de versão. Adicionada opção de teste "-Ztimings" para gerar um relatório HTML dos tempos de execução de vários estágios de compilação.
  • No compilador Rustc, as mensagens de diagnóstico incluem cortar as pontas do código que não cabem no terminal. Forneceu terceiro nível de suporte para plataformas alvo
    i686-unknown-uefi e sparc64-unknown-openbsd. O terceiro nível envolve suporte básico, mas sem testes automatizados e publicação de compilações oficiais.

Fonte: opennet.ru

Adicionar um comentário