Foi lançado o Rust 1.95, uma linguagem de programação originalmente criada pela Mozilla, mas atualmente desenvolvida sob a supervisão da organização sem fins lucrativos Rust Foundation. A linguagem é focada na segurança da memória e fornece ferramentas para alcançar alto paralelismo na execução de tarefas, tudo isso sem depender de um coletor de lixo e runtime (o runtime se limita à 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 adicionado o macro «cfg_select!», que pode ser usado em vez do pacote «cfg-if» para tratar várias condições de compilação no estilo do bloco «match», sem definir uma cadeia de expressões condicionais utilizando a construção «#[cfg]». cfg_select! { unix => { fn foo() { /* unix */ } } target_pointer_width = «32» => { fn foo() { /* não-unix, 32-bit */ } } _ => { fn foo() { /* não unix e não 32-bit */ } } }
- Foi estabilizada a possibilidade de indicar expressões «if let» dentro de blocos «match» para criar correspondências condicionais por padrão. Anteriormente, foi estabilizado o suporte à indicação de várias expressões «let» utilizando o operador «&&» para blocos «if» e «while». match value { Some(x) if let Ok(y) = compute(x) => { println!(«{}, {}», x, y); } _ => {} }
- Apoio ao assembler inline foi estabilizado para as arquiteturas PowerPC e PowerPC64.
- Uma nova leva de APIs foi traduzida para a categoria estável, incluindo estabilizações de métodos e implementações de traits:
- MaybeUninit: From<[MaybeUninit; N]>
- MaybeUninit: AsRef<[MaybeUninit; N]>
- MaybeUninit: AsRef<[MaybeUninit]>
- MaybeUninit: AsMut<[MaybeUninit; N]>
- MaybeUninit: AsMut<[MaybeUninit]>
- [MaybeUninit; N]: From<MaybeUninit>
- Cell: AsRef<[Cell; N]>
- Cell: AsRef<[Cell]>
- Cell: AsRef<[Cell]>
- bool: TryFrom
- AtomicPtr::update
- AtomicPtr::try_update
- AtomicBool::update
- AtomicBool::try_update
- AtomicIn::update
- AtomicIn::try_update
- AtomicUn::update
- AtomicUn::try_update
- cfg_select!
- mod core::range
- core::range::RangeInclusive
- core::range::RangeInclusiveIter
- core::hint::cold_path
- ::as_ref_unchecked
- ::as_ref_unchecked
- ::as_mut_unchecked
- Vec::push_mut
- Vec::insert_mut
- VecDeque::push_front_mut
- VecDeque::push_back_mut
- VecDeque::insert_mut
- LinkedList::push_front_mut
- LinkedList::push_back_mut
- Layout::dangling_ptr
- Layout::repeat
- Layout::repeat_packed
- Layout::extend_packed
- O modificador «const» é aplicado em funções:
- fmt::from_fn
- ControlFlow::is_break
- ControlFlow::is_continue
- Nas versões estáveis, o suporte à transmissão de especificações de plataformas-alvo personalizadas foi removido.
- As plataformas alvo powerpc64-unknown-linux-musl, aarch64-apple-tvos, aarch64-apple-tvos-sim, aarch64-apple-watchos, aarch64-apple-watchos-sim, aarch64-apple-visionos e aarch64-apple-visionos-sim foram traduzidas para o segundo nível de suporte, que implica garantia de construção, mas sem garantias na execução do conjunto de testes.
Adicionalmente, podem ser mencionados os projetos e eventos recentemente anunciados relacionados ao Rust:
- A Canonical apresentou o servidor de exibição Mir 2.26, fornecendo um conjunto de bibliotecas para criar compósitos servidores baseado no protocolo Wayland e incluindo funcionalidades típicas de gerenciadores de janelas e servidores de exibição. O Mir está envolvido em projetos como o gerenciador de compósitos Miracle, a interface para quiosques de internet Ubuntu Frame e o ambiente de usuário Miriway.
A nova versão se destaca pela adição da capacidade de desenvolver componentes na linguagem Rust. Uma subsistema alternativa de gestão de entrada, chamada evdev-rs, foi implementada em Rust e o trabalho começou em um front-end escrito em Rust wayland-rs para o Wayland. Dentre as mudanças não relacionadas ao Rust no Mir, destaca-se o suporte aos protocolos Wayland ext_image_copy_capture_v1 e input-triggers.
- Foi lançado o primeiro release do analisador de tráfego ayaFlow, escrito em Rust e que utiliza a subsistema do kernel Linux eBPF para interceptar pacotes de rede (IPv4/TCP/UDP) e quadros Ethernet com impacto mínimo no desempenho. É suportada a inspeção profunda de protocolos de nível de aplicação (L7), como extração de TLS SNI e solicitações DNS ao analisar tráfego criptografado. O sistema suporta a manutenção de uma tabela com o estado atual das conexões no formato DashMap, salvando o histórico em SQLite e fornecendo estatísticas através de REST API para o Prometheus.
- Foi implementada a possibilidade de criar aplicações multithread em Rust, utilizando funções std::thread e executadas no lado da GPU.
Fonte: opennet.ru
