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

Foi publicada a versão 1.47 da linguagem de programação do sistema Rust, fundada pelo projeto Mozilla. 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:

  • Implementado suporte para características de matrizes de tamanho arbitrário. Anteriormente, devido à incapacidade de definir funções genéricas para todos os valores inteiros, a biblioteca padrão fornecia suporte integrado a características apenas para matrizes de até 32 elementos de tamanho (as características para cada tamanho eram definidas estaticamente). Graças à criação da funcionalidade const generics, tornou-se possível definir funções genéricas para qualquer tamanho de array, mas elas ainda não estão incluídas nos recursos estáveis ​​​​da linguagem, embora sejam implementadas no compilador e agora sejam utilizadas na biblioteca padrão para tipos de array de qualquer tamanho.
    Por exemplo, a seguinte construção em Rust 1.47 imprimirá o conteúdo de um array, embora anteriormente teria resultado em um erro:

fn principal() {
seja xs = [0; 34];
println!("{:?}", xs);
}

  • Fornece saída de traços mais curtos (backtrace), saída em situações de emergência. Elementos que não são de interesse na maioria das situações, mas que confundem a saída e desviam a atenção das causas primárias do problema, são excluídos do rastreamento. Para retornar um rastreamento completo, você pode usar a variável de ambiente "RUST_BACKTRACE=full". Por exemplo, para o código

fn principal() {
pânico!();
}

Anteriormente, o traço era produzido em 23 etapas, mas agora será reduzido para 3 etapas, permitindo captar imediatamente a essência:

thread 'main' entrou em pânico em 'pânico explícito', src/main.rs:2:5
rastreamento de pilha:
0: std::panicking::begin_panic
em /rustc/d…d75a/library/std/src/panicking.rs:497
1: playground::principal
em ./src/main.rs:2
2: core::ops::function::FnOnce::call_once
em /rustc/d…d75a/library/core/src/ops/function.rs:227

  • O compilador Rustc foi atualizado para construir usando LLVM 11 (Rust usa LLVM como backend para geração de código). Ao mesmo tempo, a capacidade de construir com o antigo LLVM, até a versão 8, é mantida, mas por padrão (em ferrugem-lang/llvm-project) agora é usado o LLVM 11. O lançamento do LLVM 11 é esperado nos próximos dias.
  • Na plataforma Windows, o compilador Rustc fornece suporte para habilitar verificações de integridade do fluxo de controle (Control Flow Guard), ativadas usando o sinalizador “-C control-flow-guard”. Em outras plataformas este sinalizador é ignorado por enquanto.
  • Uma nova parte da API foi transferida para a categoria estável, incluindo Ident::new_raw estabilizado, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from , f32::TAU e f64::TAU.
  • O atributo “const”, que determina a possibilidade de utilização em qualquer contexto ao invés de constantes, é utilizado nos métodos:
    • novo para todos os números inteiros diferentes de zero;
    • verificado_add, verificado_sub, verificado_mul, verificado_neg, verificado_shl, verificado_shr, saturating_add, saturating_sub e saturating_mul para todos os números inteiros;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace e is_ascii_control para os tipos char e u8.
  • Para FreeBSD, o kit de ferramentas do FreeBSD 11.4 é usado (o FreeBSD 10 não suporta LLVM 11).

Retirado de opennet.ru

Fonte: linux.org.ru

Adicionar um comentário