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

Foi publicado o lançamento da linguagem de programação de uso geral Rust 1.65, 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:

  • Adicionado suporte para tipos associados genéricos (GAT, Generic Associated Types), que possibilitam criar aliases de tipo associados a outro tipo e permitem associar construtores de tipo a características. traço Foo { tipo Bar<'x>; }
  • A expressão “let...else” foi implementada, permitindo verificar a condição de correspondência do padrão diretamente dentro da expressão “let” e executar código arbitrário se o padrão não corresponder. let Ok(count) = u64::from_str(count_str) else { panic!("Não é possível analisar o número inteiro: '{count_str}'"); };
  • Permitir o uso de uma instrução break para sair prematuramente de blocos nomeados, usando o nome do bloco (rótulo) para identificar o bloco a ser finalizado. deixe resultado = 'bloco: {do_thing(); if condição_not_met() { break 'bloco 1; } do_next_thing(); if condição_not_met() { break 'bloco 2; } do_last_thing(); 3};
  • Para Linux, foi adicionada a capacidade de salvar separadamente informações de depuração (split-debuginfo), anteriormente disponível apenas para a plataforma macOS. Ao especificar a opção "-Csplit-debuginfo=unpacked", os dados debuginfo no formato DWARF serão salvos em vários arquivos de objeto separados com uma extensão ".dwo". Especificar "-Csplit-debuginfo=packed" criará um único pacote no formato ".dwp" que inclui todos os dados debuginfo do projeto. Para integrar debuginfo diretamente na seção .debug_* de objetos ELF, você pode usar a opção "-Csplit-debuginfo=off".
  • 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:
    • std::backtrace::Backtrace
    • Limite::as_ref
    • std::io::read_to_string
    • <*const T>::cast_mut
    • <*mut T>::cast_const
  • O atributo “const”, que determina a possibilidade de utilizá-lo em qualquer contexto ao invés de constantes, é utilizado nas funções <*const T&>::offset_from e <*mut T>::offset_from
  • Como parte do estágio final de transferência da implementação do protocolo LSP (Language Server Protocol) para o analisador de ferrugem, a implementação desatualizada do Rust Language Server (RLS) foi substituída por um servidor stub que emite um aviso com uma sugestão para mudar para usando analisador de ferrugem.
  • Durante a compilação, o suporte para implantação inline de código intermediário MIR é habilitado, o que acelera a compilação de pacotes de caixas típicos em 3 a 10%.
  • Para acelerar compilações agendadas, o gerenciador de pacotes Cargo fornece classificação de trabalhos aguardando execução na fila.

Além disso, você pode conferir a entrevista sobre o uso da linguagem Rust na Volvo para desenvolver componentes de sistemas de informação automotivos. Não há planos para reescrever o código existente e testado em Rust, mas para novos códigos, Rust é uma das opções preferidas para melhorar a qualidade a custos mais baixos. Grupos de trabalho relacionados ao uso da linguagem Rust também foram criados nas associações automotivas AUTOSAR (AUTomotive Open System ARchitecture) e SAE (Society of Automotive Engineers).

Além disso, David Kleidermacher, vice-presidente de engenharia do Google, falou sobre a tradução do código usado na plataforma Android para gerenciar chaves de criptografia para Rust, bem como o uso de Rust na implementação do protocolo DNS sobre HTTPS na pilha para chips UWB (Ultra-Wideband) e na estrutura de virtualização (Android Virtualization Framework) associada ao chip Tensor G2. Novas pilhas para Bluetooth e Wi-Fi, reescritas em Rust, também estão sendo desenvolvidas para Android. A estratégia geral é fortalecer gradualmente a segurança, primeiro convertendo os componentes de software mais vulneráveis ​​e vitais para Rust e depois expandindo para outros subsistemas relacionados. No ano passado, a linguagem Rust foi incluída na lista de linguagens permitidas para desenvolvimento da plataforma Android.

Fonte: opennet.ru

Adicionar um comentário