Lançamento da linguagem de programação Rust 1.74. Auditoria RustVMM. Reescrevendo o fichário em Rust

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

  • Adicionada a capacidade de configurar verificações de lint por meio do arquivo Cargo.toml com o manifesto do gerenciador de pacotes. Para definir as configurações do lint, como o nível de resposta (proibir, negar, avisar, permitir), são propostas novas seções “[lints]” e “[workspace.lints]”, cujas alterações são levadas em consideração na tomada de decisão sobre reconstruindo. Por exemplo, em vez de especificar os sinalizadores “-F”, “-D”, “-W” e “-A” ao montar ou adicionar os sinalizadores “#![forbid(unsafe_code)]” e “#![deny(clippy :” atributos para o código) :enum_glob_use)]" agora pode ser usado no manifesto Cargo: [lints.rust] unsafe_code = "forbid" [lints.clippy] enum_glob_use = "deny"
  • O gerenciador de pacotes Crate adicionou a capacidade de autenticação ao conectar-se a um repositório. O pacote básico inclui suporte para colocação de parâmetros de autenticação em armazenamentos de credenciais Linux (baseados em libsecret), macOS (Keychain) e Windows (Windows Credential Manager), mas o sistema é inicialmente modular e permite organizar o trabalho com vários provedores para armazenamento e gerando tokens, por exemplo, foi preparado um plugin para utilização do gerenciador de senhas 1Password. A autenticação pode ser exigida pelo repositório para qualquer operação, não apenas para confirmar que os pacotes foram publicados. ~/.cargo/config.toml [registro] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • O suporte para projeções de tipo de retorno (impl_trait_projections) foi estabilizado, permitindo que Self e T::Assoc sejam mencionados em tipos de retorno como "async fn" e "->impl Trait". estrutura Wrapper<'a, T>(&'a T); // Tipos de retorno opacos que mencionam `Self`: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } traço Trait<'a> { tipo Assoc; fn new() -> Self::Assoc; } impl Trait<'_> for () { type Assoc = (); fn new() {} } // Tipos de retorno opacos que mencionam um tipo associado: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> impl Iterador { /*… */ } }
  • 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:
  • O atributo "const", que determina a possibilidade de utilizá-lo em qualquer contexto ao invés de constantes, é utilizado em funções:
    • core::mem::transmute_copy
    • str::is_ascii
    • [u8]::é_ascii
    • núcleo::num::Saturação
    • impl De para std::process::Stdio
    • impl De para std::process::Stdio
    • impl De para std::process::Child{Stdin, Stdout, Stderr}
    • impl De para std::process::Child{Stdin, Stdout, Stderr}
    • std::ffi::OsString::from_encoded_bytes_unchecked
    • std::ffi::OsString::into_encoded_bytes
    • std::ffi::OsStr::from_encoded_bytes_unchecked
    • std::ffi::OsStr::as_encoded_bytes
    • std::io::Error::other
    • impl TryFrom para sub16
    • impl. De<&[T; N]>para Vec
    • impl. De<&mut [T; N]>para Vec
    • impl. De<[T; N]> para Arco<[T]>
    • impl. De<[T; N]> para Rc<[T]>
  • O compilador, o kit de ferramentas, a biblioteca padrão e os executáveis ​​de aplicativos gerados aumentaram os requisitos para plataformas Apple, agora exigindo pelo menos macOS 10.12 Sierra, iOS 10 e tvOS 10 lançados em 2016 para serem executados.
  • O terceiro nível de suporte foi implementado para a plataforma i686-pc-windows-gnullvm. 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.
  • O segundo nível de suporte para a plataforma de destino loongarch64-unknown-none foi implementado. O segundo nível de apoio envolve uma garantia de montagem.

Além disso, dois eventos relacionados à linguagem Rust podem ser observados:

  • O OSTIF (Open Source Technology Improvement Fund), criado para fortalecer a segurança de projetos de código aberto, publicou os resultados de uma auditoria do projeto RustVMM, que fornece componentes para a criação de hipervisores e monitores de máquinas virtuais (VMMs) específicos de tarefas. Empresas como Intel, Alibaba, Amazon, Google, Linaro e Red Hat participam do desenvolvimento do projeto. Os hipervisores Intel Cloud Hypervisor e Dragonball estão sendo desenvolvidos com base no RustVMM. A auditoria confirmou a alta qualidade da base de código e a utilização de técnicas na arquitetura e implementação visando alcançar a máxima segurança. Durante a auditoria foram identificados 6 problemas que não tiveram impacto direto na segurança.
  • O Google introduziu uma nova implementação do mecanismo de comunicação entre processos Binder, reescrito na linguagem Rust, na lista de discussão de desenvolvedores do kernel Linux. O retrabalho foi realizado como parte de um projeto para fortalecer a segurança, promover técnicas de programação seguras e aumentar a eficiência na identificação de problemas ao trabalhar com memória no Android (cerca de 70% de todas as vulnerabilidades perigosas identificadas no Android são causadas por erros ao trabalhar com memória ). A implementação do Binder em Rust alcançou paridade de funcionalidade com a versão original na linguagem C, passou em todos os testes AOSP (Android Open-Source Project) e pode ser usada para criar edições funcionais de firmware. O desempenho de ambas as implementações está aproximadamente no mesmo nível (desvios entre -1.96% e +1.38%).

Fonte: opennet.ru

Adicionar um comentário