Lançamento do Rust 1.93. Projetos Rex, Fjall 3 e Arti 1.9.0

Foi lançado o Rust 1.93, uma linguagem de programação inicialmente desenvolvida pela Mozilla e agora mantida pela organização sem fins lucrativos Rust Foundation. A linguagem foca em garantir um uso seguro da memória e oferece recursos que permitem alta concorrência na execução de tarefas, sem a necessidade de um coletor de lixo ou runtime (que se resume à inicialização básica e ao suporte da biblioteca padrão).

Os métodos de manipulação de memória em Rust protegem o desenvolvedor de erros ao trabalhar com ponteiros e evitam problemas decorrentes de manipulação de memória de baixo nível, como acesso a áreas de memória após sua liberação, desreferenciação de ponteiros nulos, e estouro de buffer, entre outros. Para distribuição de bibliotecas, construção e gerenciamento de dependências, o projeto conta com o gerenciador de pacotes Cargo. O repositório crates.io é suportado para hospedagem 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:

  • A biblioteca padrão Musl, incluída com a distribuição do Rust, utilizada para linkagem estática em plataformas com destino «*-linux-musl» (aarch64-unknown-linux-musl, x86_64-unknown-linux-musl, powerpc64le-unknown-linux-musl, etc.) em sistemas sem Musl, foi atualizada para a versão 1.2.5. A versão mínima suportada do Musl para linkagem dinâmica também foi elevada para a versão 1.2.5. Anteriormente, o Rust utilizava a versão 1.2.3 do Musl, que apresentava problemas na implementação do resolvedor DNS. A versão 1.2.4 do Musl introduziu a capacidade de enviar solicitações via TCP quando falhas ocorriam em chamadas UDP, resolvendo problemas com consultas de grandes registros DNS e melhorando a compatibilidade com servidores DNS recursivos que não suportavam resposta parcial em respostas UDP truncadas. A versão 1.2.5 implementou o tratamento de respostas com longas sequências de CNAME no resolvedor DNS e resolveu um problema que causava a perda de algumas grandes respostas transmitidas via TCP.
  • A biblioteca padrão foi reformulada para solucionar problemas de reentrância ao ser utilizada em alocadores de memória globais, escritos em Rust, que utilizavam o macro std::thread_local! e a função std::thread::current, levando a recursões infinitas. Para evitar que std::thread_local! e std::thread::current chamassem o mesmo alocador durante tentativas de alocação de memória, agora elas aplicam diretamente o mecanismo de alocação de memória do sistema.
  • O uso de atributos «cfg» é permitido dentro dos blocos «asm!» com código assembler, permitindo, por exemplo, a gestão da ativação de conjuntos de instruções expandidos do CPU no contexto de expressões individuais dentro do bloco asm (anteriormente, os atributos «cfg» só podiam ser definidos para o bloco asm como um todo). asm!( // ou global_asm! ou naked_asm! "nop", #[cfg(target_feature = "sse2")] "nop", // … #[cfg(target_feature = "sse2")] a = const 123, // usado apenas no sse2 );
  • Uma nova leva de APIs foi traduzida para a categoria estável, incluindo estabilizações de métodos e implementações de traits:
    • <[MaybeUninit]>::assume_init_drop
    • <[MaybeUninit]>::assume_init_ref
    • <[MaybeUninit]>::assume_init_mut
    • <[MaybeUninit]>::write_copy_of_slice
    • <[MaybeUninit]>::write_clone_of_slice
    • String::into_raw_parts
    • Vec::into_raw_parts
    • ::unchecked_neg
    • ::unchecked_shl
    • ::unchecked_shr
    • ::unchecked_shl
    • ::unchecked_shr
    • ::as_array
    • ::as_array_mut
    • ::as_array
    • ::as_mut_array
    • VecDeque::pop_front_if
    • VecDeque::pop_back_if
    • Duration::from_nanos_u128
    • char::MAX_LEN_UTF8
    • char::MAX_LEN_UTF16
    • std::fmt::from_fn
    • std::fmt::FromFn
  • A plataforma alvo "riscv64a23-unknown-linux-gnu" foi promovida para o segundo nível de suporte, que implica a garantia de compilação, mas sem garantias ao passar pelo conjunto de testes.

Além disso, é possível mencionar alguns projetos relacionados ao Rust:

  • Um framework Rex está sendo desenvolvido para o núcleo do Linux, permitindo criar extensões para o núcleo do Linux na linguagem Rust, que podem ser usadas para ampliar a funcionalidade do núcleo em vez do eBPF. O Rex oferece as mesmas garantias de segurança que o eBPF, mas utiliza as capacidades da linguagem Rust e um Runtime leve para isolamento e segurança. Para tais programas, o verificador não é aplicado, e os programas são compilados em código nativo pelo compilador Rust.

    Nos programas Rex, é permitido o uso de um subconjunto da linguagem Rust que oferece garantias de segurança. Atualmente, 5 tipos de programas eBPF são suportados: kprobe, perf_event, tracepoint, xdp e tc. É possível chamar funções auxiliares do eBPF, interagir com estruturas map e gerenciar recursos do núcleo, além de manipular exceções e utilizar wrappers e abstrações sobre as estruturas do núcleo.

  • Está disponível o lançamento Fjall 3, um armazenamento embarcado escrito em Rust, operando com dados no formato chave-valor. O armazenamento de dados é realizado em forma de log utilizando uma árvore LSM (Log-Structured-Merge), como no RocksDB, onde as alterações são registradas através da adição de dados ao final do arquivo. Para acessar o banco de dados, é oferecida uma API no estilo BTreeMap. Recursos como namespaces, busca direta e inversa por intervalos, compressão embutida, transações serializáveis, armazenamento separado de chaves e seus respectivos valores muito grandes e manutenção de fundo automática do banco de dados são suportados. O código é aberto sob a licença Apache 2.0.
  • O Projeto Tor lançou a versão Arti 1.9.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 planejam tornar o Arti a implementação principal do Tor e gradualmente descontinuar o suporte à implementação em C. A nova versão amplia a funcionalidade para relays e servidores autoridades de diretório (Directory Authority), melhorou o suporte para trabalhar com portas designadas dinamicamente (proxy.socks_listen = "auto"), e adicionou uma API experimental para gerenciar chaves para serviços onion.

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