Foi lançado o Rust 1.97, uma linguagem de programação inicialmente desenvolvida pela Mozilla, mas atualmente em desenvolvimento sob a tutela da organização sem fins lucrativos Rust Foundation. A linguagem se concentra na manipulação segura de memória e fornece recursos para alcançar um alto nível de paralelismo na execução de tarefas, sem depender de coletor de lixo e runtime (o runtime se limita à inicialização básica e ao suporte 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:
- Por padrão, uma nova esquema de decoração (mangling) de nomes de funções, variáveis globais e estruturas de dados nos arquivos objeto e executáveis gerados está ativada (-Csymbol-mangling-version=v0). Os nomes são decorados para evitar conflitos durante a ligação de diferentes programas, anexando um contexto específico, como o caminho para o módulo e o nome do pacote crate.
A antiga esquema de decoração de nomes, baseada no Itanium ABI, apresentava desvantagens como a substituição de parâmetros genéricos por hashes ilegíveis e partes do compilador que não utilizavam o Itanium ABI, exigindo decodificadores de nomes específicos para Rust. No Rust 1.97, uma nova esquema de decoração, desenvolvida especificamente para Rust e desprovida das desvantagens mencionadas, é empregada por padrão. A antiga esquema deverá ser removida em uma das próximas versões.
- O gerenciador de pacotes cargo agora inclui a capacidade de controlar a resposta do compilador em relação à geração de avisos durante a compilação. A nova variável de ambiente CARGO_BUILD_WARNINGS pode assumir três valores: warn (padrão) — exibir avisos na tela; allow — ocultar a exibição de avisos; deny — tratar avisos como erros que interrompem a compilação.
Em versões anteriores, para concluir a compilação após a exibição de um aviso, era necessário especificar "-Dwarnings" em RUSTFLAGS para o compilador, mas ao alterar RUSTFLAGS, o gerenciador de pacotes cargo considerava a compilação nova, ignorava os dados em cache e recompilava todo o projeto a partir do zero. Mover essa configuração para o cargo eliminou o reset do cache e a necessidade de recompilação total ao alterar o modo de tratamento de avisos, além de simplificar a inclusão do tratamento de avisos como erros em sistemas de integração contínua.
- Na montagem, a exibição de mensagens geradas pelo vinculador está habilitada por padrão. As mensagens aparecem na forma de avisos através de uma regra de lint especial chamada «linker_messages», que não faz parte do grupo padrão de «warnings». O rustc filtra mensagens que são falsos positivos típicos ou comportamentos normais, deixando avisos que podem indicar problemas, como avisos sobre opções obsoletas e configurações indesejadas. Anteriormente, as informações do vinculador eram exibidas apenas quando havia falha na conclusão, caso contrário, todas as mensagens eram ocultadas. Para restaurar o comportamento antigo, adicione ao Cargo.toml: [lints.rust] linker_messages = «allow»
- Uma nova leva de APIs foi traduzida para a categoria estável, incluindo estabilizações de métodos e implementações de traits:
- Padrão para RepeatN
- Copia para ffi::FromBytesUntilNulError
- Send para std::fs::File para UEFI
- ::isolate_highest_one
- ::isolate_lowest_one
- ::highest_one
- ::lowest_one
- ::bit_width
- NonZero::isolate_highest_one
- NonZero::isolate_lowest_one
- NonZero::highest_one
- NonZero::lowest_one
- NonZero::bit_width
- O flag «const» é aplicado no método char::is_control.
Adicionalmente, podem ser mencionados os projetos e eventos recentemente anunciados relacionados ao Rust:
- O projeto zinnia desenvolve um núcleo modular semelhante ao Unix, escrito em Rust e distribuído sob a licença GPLv2. O núcleo suporta interfaces POSIX e algumas extensões do BSD e Linux, como epoll e timerfd. Drivers DRM (Direct Rendering Manager) e evdev estão disponíveis para renderização e organização de entradas. A funcionalidade implementada é suficiente para executar o ambiente de trabalho Xfce sob um servidor X e compostor servidor Weston baseado em Wayland. O carregamento é suportado tanto no emulador QEMU quanto em hardware real, como o laptop ThinkPad E14 G7.
- Foi lançada a versão 1.0 da biblioteca de comunicação iroh, que permite estabelecer conexões de rede entre aplicativos em diferentes hosts com conexão via chaves criptográficas, ao invés de endereços IP (especifica a chave à qual deve se conectar e o iroh encontra o host relacionado e estabelece uma conexão criptografada usando o protocolo QUIC). Sempre que possível, conexões P2P diretas são estabelecidas, mas se isso não for viável, uma reversão para o trabalho através de relés é feita, que também são utilizados para descobrir hosts por chave. É possível executar o seu próprio relé ou se conectar a relés públicos suportados pela comunidade.
Entre as funcionalidades avançadas: suporte a Multipath QUIC para entrega de pacotes simultaneamente por vários caminhos, capacidade de funcionamento por trás de NAT, modo de configuração estática para conexão a dispositivos locais sem acesso à internet, possibilidade de compilação em código intermediário WASM para execução dentro do navegador, suporte à criação de transportes personalizados, por exemplo, para conexão via Bluetooth, WiFi Aware ou LoRa. O código é escrito em Rust e distribuído sob as licenças Apache-2.0 e MIT. Estão disponíveis wrappers para Python, Node.js, Kotlin e Swift.
- O autor da plataforma server-side JavaScript Bun publicou um artigo analisando o projeto de reescrita do Bun da linguagem Zig para Rust, utilizando o modelo de IA Claude Fable. É destacado que a versão 1.3.14 do Bun será o último lançamento em Zig e a próxima versão 1.4.0 já estará em Rust. Segundo os testes realizados, a versão em Rust consome significativamente menos memória e é de 2 a 5% mais rápida que a versão em Zig. O tamanho do arquivo executável na versão em Rust foi reduzido em 20%.
Fonte: opennet.ru
