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

Foi publicado o lançamento da linguagem de programação de uso geral Rust 1.58, fundada pelo projeto Mozilla, mas agora desenvolvida sob os auspícios da organização independente sem fins lucrativos Rust Foundation. A linguagem se concentra na segurança da memória, fornece gerenciamento automático de memória e fornece meios para alcançar alto paralelismo de tarefas sem usar um coletor de lixo ou tempo de execução (o tempo de execução é reduzido à inicialização básica e manutenção da biblioteca padrão).

O gerenciamento automático de memória do Rust elimina erros ao manipular ponteiros e protege contra problemas decorrentes da manipulação de memória de baixo nível, como acesso a uma região de memória após ela ter sido liberada, desreferências de ponteiro nulo, saturação de buffer, etc. Para distribuir bibliotecas, garantir a montagem e gerenciar dependências, o projeto está desenvolvendo o gerenciador de pacotes Cargo. O repositório crates.io é compatível com hospedagem de bibliotecas.

Principais inovações:

  • Nos blocos de formatação de linha, além da capacidade anteriormente disponível de substituir variáveis ​​explicitamente listadas após uma linha por número e nome, é implementada a capacidade de substituir identificadores arbitrários adicionando a expressão “{identifier}” à linha. Por exemplo: // Construções suportadas anteriormente: println!("Hello, {}!", get_person()); println!("Olá, {0}!", get_person()); println!("Olá, {pessoa}!", pessoa = get_person()); // agora você pode especificar let person = get_person(); println!("Olá, {pessoa}!");

    Os identificadores também podem ser especificados diretamente nas opções de formatação. let (largura, precisão) = get_format(); for (nome, pontuação) em get_scores() { println!("{nome}: {pontuação:largura$.precisão$}"); }

    A nova substituição funciona em todas as macros que suportam definição de formato de string, com exceção da macro “panic!”. nas versões 2015 e 2018 da linguagem Rust, em que panic!("{ident}") é tratado como uma string regular (no Rust 2021 a substituição funciona).

  • O comportamento da estrutura std::process::Command na plataforma Windows foi alterado para que ao executar comandos, por questões de segurança, ela não procure mais por arquivos executáveis ​​no diretório atual. O diretório atual é excluído porque pode ser usado para executar código malicioso se os programas forem executados em diretórios não confiáveis ​​(CVE-2021-3013). A nova lógica de detecção de executável envolve a pesquisa nos diretórios Rust, no diretório do aplicativo, no diretório do sistema Windows e nos diretórios especificados na variável de ambiente PATH.
  • A biblioteca padrão expandiu o número de funções marcadas como "#[must_use]" para emitir um aviso se o valor de retorno for ignorado, o que ajuda a identificar erros causados ​​​​pela suposição de que uma função alterará os valores em vez de retornar um novo valor.
  • Uma nova parte da API foi movida para a categoria de estável, incluindo os métodos e implementações de características que foram estabilizadas:
    • Metadados::is_symlink
    • Caminho::is_symlink
    • {inteiro}::saturação_div
    • Opção::unwrap_unchecked
    • Resultado::unwrap_unchecked
    • Resultado::unwrap_err_unchecked
  • O atributo "const", que determina a possibilidade de utilizá-lo em qualquer contexto ao invés de constantes, é utilizado em funções:
    • Duração::novo
    • Duração::checked_add
    • Duração::saturating_add
    • Duração::checked_sub
    • Duração::saturating_sub
    • Duração::checked_mul
    • Duração::saturating_mul
    • Duração::checked_div
  • Desreferenciação permitida de ponteiros "*const T" em contextos "const".
  • No gerenciador de pacotes Cargo, o campo Rust_version foi adicionado aos metadados do pacote e a opção “--message-format” foi adicionada ao comando “cargo install”.
  • O compilador implementa suporte ao mecanismo de proteção CFI (Control Flow Integrity), que adiciona verificações antes de cada chamada indireta para detectar algumas formas de comportamento indefinido que podem potencialmente levar a uma violação da ordem de execução normal (fluxo de controle) como resultado do uso de exploits que alteram ponteiros armazenados na memória em funções.
  • O compilador adicionou suporte para as versões 5 e 6 do formato de comparação de cobertura LLVM, usado para avaliar a cobertura de código durante o teste.
  • No compilador, os requisitos para a versão mínima do LLVM são elevados para LLVM 12.
  • O terceiro nível de suporte para a plataforma x86_64-unknown-none foi implementado. O terceiro nível envolve suporte básico, mas sem testes automatizados, publicação de compilações oficiais ou verificação se o código pode ser compilado.

Além disso, podemos destacar a publicação pela Microsoft do lançamento das bibliotecas Rust for Windows 0.30, que permitem utilizar a linguagem Rust para desenvolver aplicativos para o sistema operacional Windows. O conjunto inclui dois pacotes crate (windows e windows-sys), através dos quais você pode acessar a API Win em programas Rust. O código para suporte à API é gerado dinamicamente a partir de metadados que descrevem a API, o que permite implementar suporte não apenas para chamadas existentes da API Win, mas também para chamadas que aparecerão no futuro. A nova versão adiciona suporte para a plataforma de destino UWP (Plataforma Universal do Windows) e implementa os tipos Handle e Debug.

Fonte: opennet.ru

Adicionar um comentário