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

Foi publicado o lançamento da linguagem de programação de uso geral Rust 1.66, 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 e fornece os meios para obter alto paralelismo de trabalho, evitando o uso de um coletor de lixo e tempo de execução (o tempo de execução é reduzido à inicialização básica e manutenção da biblioteca padrão).

Os métodos de manipulação de memória do Rust salvam o desenvolvedor de erros ao manipular ponteiros e protegem contra problemas que surgem devido ao manuseio de memória de baixo nível, como acessar uma área de memória após ter sido liberada, desreferenciar ponteiros nulos, saturação de buffer, etc. Para distribuir bibliotecas, prover builds e gerenciar dependências, o projeto desenvolve o gerenciador de pacotes Cargo. O repositório crates.io é compatível com hospedagem de bibliotecas.

A segurança da memória é fornecida no Rust em tempo de compilação por meio de verificação de referência, acompanhando a propriedade do objeto, acompanhando o tempo de vida do objeto (escopos) e avaliando a exatidão do acesso à memória durante a execução do código. Rust também fornece proteção contra estouros de número inteiro, requer inicialização obrigatória de valores de variáveis ​​antes do uso, lida melhor com erros na biblioteca padrão, aplica o conceito de referências e variáveis ​​imutáveis ​​por padrão, oferece tipagem estática forte para minimizar erros lógicos.

Principais inovações:

  • Em enumerações com representações inteiras (atributo "#[repr(Int)]"), é permitida a indicação explícita do discriminante (número da variante na enumeração), mesmo que a enumeração contenha campos. #[repr(u8)] enum Foo { A(u8), # discriminante 0 B(i8), # discriminante 1 C(bool) = 42, # discriminante 42 }
  • Adicionada a função core::hint::black_box que simplesmente retorna o valor recebido. Como o compilador pensa que esta função está fazendo algo, a função black_box pode ser usada para desabilitar as otimizações do compilador para loops ao realizar testes de desempenho de código ou ao examinar o código de máquina gerado (para que o compilador não considere o código não utilizado e o remova). Por exemplo, no exemplo abaixo, black_box(v.as_ptr()) evita que o compilador pense que o vetor v não está sendo usado. use std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); caixa_preta(v.as_ptr()); } }
  • O gerenciador de pacotes "cargo" oferece o comando "remove", que permite remover dependências do manifesto Cargo.toml da linha de comando.
  • 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:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrap_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wraping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wraping_sub_unsigned}
    • BTreeSet::{primeiro, último, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Adicione implementações AsFd para tipos de bloqueio stdio ao usar WASI.
    • impl TryFrom > para Caixa<[T; N]>
    • core::dica::black_box
    • Duração::try_from_secs_{f32,f64}
    • Opção::descompactar
    • std::os::fd
  • Os intervalos "..X" e "..=X" são permitidos em modelos.
  • Ao construir o front-end do compilador rustc e o back-end LLVM, os modos de otimização LTO (Link Time Optimization) e BOLT (Binary Optimization and Layout Tool) são usados ​​para aumentar o desempenho do código resultante e reduzir o consumo de memória.
  • Suporte de nível 5 implementado para as plataformas armv5te-none-eabi e thumbvXNUMXte-none-eabi. O terceiro nível implica suporte básico, mas sem testes automatizados, publicando compilações oficiais e verificando a capacidade de construir o código.
  • Adicionado suporte para vincular a bibliotecas genéricas do macOS.

Além disso, podemos observar a inclusão na base de código do GCC do compilador front-end da linguagem Rust (gccrs). O frontend está incluído na ramificação GCC 13, que será lançada em maio de 2023. A partir do GCC 13, o kit de ferramentas GCC padrão poderá ser usado para compilar programas Rust sem a necessidade de instalar o compilador rustc construído usando desenvolvimentos LLVM. A implementação do Rust no GCC 13 estará em estado beta, não habilitada por padrão.

Fonte: opennet.ru

Adicionar um comentário