Foi publicado o release da linguagem de programação Rust 1.89, que é baseada em um projeto da Mozilla, mas atualmente é desenvolvido sob a proteção da organização não lucrativa Rust Foundation. A linguagem foca na segurança com a memória e fornece ferramentas para alcançar um alto paralelismo na execução de tarefas, evitando o uso de coletor de lixo e runtime (o runtime se limita à inicialização básica e à manutenção 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:
- Foi adicionada a capacidade de usar o símbolo «_» como argumento de parâmetros genéricos com o modificador «const» para a dedução dos valores desses parâmetros com base no contexto circundante. pub fn all_false() -> [bool; LEN] { [false; _] }
- Adicionada uma nova advertência lint «mismatched_lifetime_syntaxes» para resolver o problema da definição não evidente de tempo de vida nas assinaturas de funções ao usar o mecanismo «lifetime elision» (determina automaticamente o tempo de vida das referências, permitindo que seja desnecessário especificá-lo manualmente). A advertência verifica se os parâmetros de entrada e saída da função pertencem ao mesmo grupo de tipos. Os grupos são formados com base no suporte à especificação explícita do tempo de vida e à possibilidade de dedução automática do compilador (por exemplo, nos tipos «&’a T» e «ContainsLifetime» pode haver um tempo de vida explícito, mas o compilador não consegue deduzir automaticamente, enquanto que em «&T», «&’_ T» e «ContainsLifetime» é permitido tanto a especificação explícita quanto a dedução automática).
- No atributo «target_feature» para sistemas x86, foi implementada a capacidade de verificar o suporte para conjuntos de instruções estendidos sha512, sm3, sm4, kl e widekl, assim como para funções avx512 específicas. #[target_feature(enable = «avx512bw»)] pub fn cool_simd_code(/* .. */) -> /* … */ { /* … */ }
- Garantido o lançamento de doctest (testes embutidos na documentação) não apenas para a plataforma alvo atual, mas também para outras plataformas especificadas ao executar o gerenciador de pacotes «cargo» («cargo test —doc —target other_target»).
- Para funções ‘extern «C»‘ ao compilar para a plataforma alvo «wasm32-unknown-unknown», foi implementado o padrão C ABI para WebAssembly.
- Com algumas ressalvas em relação à compatibilidade de tipos, o uso dos tipos i128 e u128 é permitido em funções externas em C (extern «C»), para as quais anteriormente foi exibido o aviso de lint «improper_ctypes_definitions».
- Uma nova leva de APIs foi traduzida para a categoria estável, incluindo estabilizações de métodos e implementações de traits:
- Muitas funções integradas ao compilador (Intrinsics) para processadores x86, incluindo funções para AVX512, SHA512, SM3 e SM4.
- NonZero
- File::lock
- File::lock_shared
- File::try_lock
- File::try_lock_shared
- File::unlock
- NonNull::from_ref
- NonNull::from_mut
- NonNull::without_provenance
- NonNull::with_exposed_provenance
- NonNull::expose_provenance
- OsString::leak
- PathBuf::leak
- Result::flatten
- std::os::linux::net::TcpStreamExt::quickack
- std::os::linux::net::TcpStreamExt::set_quickack
O modificador «const» é aplicado em funções:
- ::as_mut_slice
- ::eq_ignore_ascii_case
- str::eq_ignore_ascii_case
- Começou o processo de transição da plataforma alvo «x86_64-apple-darwin» do primeiro nível de suporte para o segundo (a Apple planeja descontinuar o suporte para a arquitetura x86_64). O primeiro nível de suporte implica na criação de builds binários, realização de testes rigorosos e fornecimento da mais alta garantia de suporte à plataforma — cada alteração no compilador é verificada por meio da execução de um conjunto completo de testes. O segundo nível de suporte implica garantia de compilação, mas sem garantias durante a execução do conjunto de testes.
- Foi implementado o terceiro nível de suporte para as plataformas «loongarch32-unknown-none» e «loongarch32-unknown-none-softfloat». O terceiro nível implica suporte básico, mas sem teste automatizado, publicação de builds oficiais e verificação da capacidade de compilação do código.
Adicionalmente, podem ser observados eventos e projetos relacionados ao Rust:
- Foi publicado um relatório sobre o estado dos pacotes em Rust no Debian. Destaca-se que na branch Debian Unstable (Sid) cerca de 8% dos pacotes src no repositório principal estão relacionados a dependências de compilação com pelo menos um pacote «librust-*». No Debian 12, a proporção era de 4.5%. Também foi notado que mais de 3 mil pacotes incluem código em Rust, disponibilizado em pacotes librust-..-dev, e que 150 pacotes src fornecem executáveis ou bibliotecas Rust compilados.
Dos pacotes de interesse para o Debian, foram mencionados sudo-rs, ntpd-rs, uutils, Sequoia, rpgp, hickory (DNS), Rustls, rav1d e fish. O suporte opcional ao Rust foi implementado no APT, QEMU (virtiofsd), no kernel Linux e no Mesa, e também é esperado no LibreOffice. Para converter pacotes crate em pacotes src do Debian, foi desenvolvido um conjunto de ferramentas chamado debcargo.
- Foi apresentado o projeto tmux-rs, que desenvolve um clone do multiplexador de terminal tmux (gerenciador de janelas de console), reescrito de C para Rust.
- O desenvolvedor do driver Tyr da Collabora publicou um artigo sobre dispositivos que operam no nível do núcleo de drivers para GPU e os princípios de desenvolvimento desses drivers na linguagem Rust.
- Foi demonstrado um aplicativo universal na linguagem Rust, capaz de ser executado tanto em CPU quanto em várias plataformas de GPU: CUDA para NVIDIA, SPIR-V para GPUs com suporte a Vulkan, Metal para Apple, DirectX 12 para Windows, WebGPU para navegadores.
Fonte: opennet.ru
