Lançamento do Rust 1.99. A Microsoft elevou o Rust ao status de linguagem primária.

Foi lançada a versão 1.99 da linguagem de programação Rust, originalmente desenvolvida pelo projeto Mozilla, mas agora mantida por meio da organização independente e sem fins lucrativos Rust Foundation. A linguagem foca na segurança do uso da memória e fornece ferramentas para alcançar um alto nível de paralelismo na execução de tarefas, sem a necessidade de um coletor de lixo e runtime (o runtime se resume à inicialização básica e à manutenção da biblioteca padrão).

Os métodos de gerenciamento de memória no Rust visam eliminar erros ao manipular ponteiros e proteger contra problemas que surgem devido ao trabalho de baixo nível com a memória, como o acesso à memória após a liberação, a desreferenciação de ponteiros nulos, estouro de buffer, entre outros. Para a distribuição de bibliotecas, a construção e o gerenciamento de dependências, o projeto tem evoluído com o gerenciador de pacotes Cargo. O repositório crates.io é suportado para o armazenamento de bibliotecas.

A manipulação segura da memória em Rust é garantida em tempo de compilação através da verificação de referências, rastreamento de propriedade de objetos, controle do tempo de vida dos objetos (escopos) e avaliação da correção do acesso à memória durante a execução do código. Rust também oferece mecanismos para proteção contra estouros inteiros, exige a inicialização obrigatória de valores de variáveis antes do uso, trata erros de forma superior na biblioteca padrão, aplica o conceito de referências e variáveis imutáveis (immutable) por padrão e oferece uma forte tipagem estática para minimizar erros lógicos.

Principais novidades:

  • Foi introduzida a possibilidade de criar no Rust funções com um número variável de argumentos (variadic), exportadas para chamada a partir de projetos escritos em C (C ABI). Como último elemento da lista de parâmetros em tais funções, pode-se usar a construção '...', que é processada no Rust por meio de um tipo especial VaList, semelhante ao va_list em C. unsafe extern "C" fn sum(mut args: ...) -> i32 { let a = unsafe { args.next_arg::() }; let b = unsafe { args.next_arg::() }; a + b } fn foo() -> i32 { unsafe { sum(0i32, 2i32) } }
  • As funções Layout::for_value_raw, mem::size_of_val_raw e mem::align_of_val_raw foram estabilizadas, permitindo a determinação segura do tamanho e do alinhamento com ponteiros brutos (raw pointers), inclusive ao utilizar tipos de tamanho dinâmico, como fatias, sem a necessidade de criar referências aos dados.
  • A documentação incluiu a recomendação de evitar a liberação de memória que possui uma referência estática com tempo de vida ilimitado (&'static) por meio da chamada Box::leak (liberação reversa), uma vez que tal ação pode potencialmente causar problemas devido à incompatibilidade com futuras otimizações do compilador e mecanismos de alocação de memória conectados. Em vez de criar uma referência estática para a transferência temporária de propriedade, recomenda-se o uso de ponteiros brutos, por exemplo, através da chamada Box::into_non_null.
  • Uma nova leva de APIs foi traduzida para a categoria estável, incluindo estabilizações de métodos e implementações de traits:
    • IntoIterator for Box<[T; N]>
    • IntoIterator for &Box<[T; N]>
    • IntoIterator for &mut Box<[T; N]>
    • VecDeque::retain_back
    • core::ffi::VaList
    • Box::into_non_null
    • Box::from_non_null
    • Vec::into_parts
    • Vec::from_parts
    • core::mem::size_of_val_raw
    • core::mem::align_of_val_raw
    • core::alloc::Layout::for_value_raw
    • String::from_utf8_lossy_owned
    • string::FromUtf8Error::into_utf8_lossy
    • FusedIterator for StepBy<I>
    • std::fs::set_times
    • std::fs::set_times_nofollow
  • Um novo perfil embutido 'debug' foi implementado no gerenciador de pacotes cargo, semelhante ao perfil 'dev' (no futuro, as capacidades para depuração e desenvolvimento planejam ser separadas). Ao compilar no CI, a compilação incremental está desativada por padrão.
  • A plataforma alvo riscv64-unknown-linux-musl foi movida para o segundo nível de suporte, o que implica garantia de compilação, mas sem garantias ao passar pelo conjunto de testes.

Adicionalmente, podem ser mencionados os projetos e eventos recentemente anunciados relacionados ao Rust:

  • A Microsoft elevou Rust ao status de linguagem de primeiro nível e fornecerá total suporte em todas as etapas de desenvolvimento dentro da empresa. Antes disso, o primeiro nível de suporte interno era oferecido para as linguagens C++, C# e TypeScript. Observa-se que Rust já é utilizado em mais de 100 repositórios da Microsoft. Entre outras coisas, componentes em Rust já são utilizados em produtos como Microsoft 365 e Copilot, e um backend separado rustc_codegen_utc para Rust foi preparado para o compilador MSVC, baseado no compilador rustc.

    Como principal objetivo do uso de Rust na Microsoft, destaca-se o fortalecimento da segurança do código, crítico do ponto de vista da segurança. Segundo o diretor técnico da Microsoft Azure, cerca de 70% de todas as vulnerabilidades no Windows são causadas por problemas relacionados à memória, que podem ser evitados com o uso de Rust.

  • A Google remove a antiga implementação do mecanismo de comunicação entre processos Binder, escrita em C, do núcleo do Linux, substituindo-a por um novo driver Binder IPC reescrito em Rust. Observa-se que, ao longo dos 15 anos de existência do antigo driver, acumulou-se uma dívida técnica considerável e a complexidade excessiva dificultou a localização de erros, a manutenção e a adição de novas funcionalidades. O driver Binder IPC em Rust é agora reconhecido como o principal e não é mais considerado um projeto experimental.
  • Foi lançado o Arti 2.7.0, uma implementação da ferramenta Tor, escrita em Rust. Quando o código do Arti alcançar um nível capaz de substituir completamente a versão em C, os desenvolvedores do Tor pretendem dar ao Arti o status de implementação principal do Tor e gradualmente interromper a manutenção da implementação em C. A nova versão trouxe avanços na funcionalidade para relays e servidores autoridades de diretórios (Directory Authority), relacionadas ao parsing de documentos, suporte à mirrorização de servidores de diretórios e ao processamento de tráfego DNS. Foi adicionada uma implementação de RPC para modificar e verificar configurações. Várias vulnerabilidades foram corrigidas - administradores de serviços onion são aconselhados a atualizar urgentemente seus sistemas.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster