Rust em 2025: novas possibilidades na prática

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Rust em 2025: o que há de novo? Possibilidades práticas



2025 tornou-se um ano marcante para o ecossistema Rust. A linguagem, que já conquistou os corações de programadores de sistemas, desenvolvedores web e criadores de ferramentas de linha de comando, recebeu uma série de atualizações há muito esperadas. Se em 2023-2024 a atenção principal estava na estabilização e melhoria das ferramentas, em 2025 o foco mudou para a simplificação radical da escrita de código complexo e o aumento do desempenho sem perda de segurança.



Neste artigo, analisaremos três inovações principais que já estão disponíveis na versão estável do Rust 2025 e as mostraremos com exemplos concretos. Se você acompanha o desenvolvimento do Rust ou está apenas começando a conhecê-lo, este material o ajudará a se atualizar rapidamente.



1. Iteradores assíncronos: async gen e async for



Um dos tópicos mais comentados em 2025 foi a estabilização de geradores e iteradores assíncronos. Antes, escrever um iterador assíncrono exigia a implementação manual da trait Stream ou o uso de crates de terceiros. Agora tudo ficou mais simples e elegante.



A principal novidade é a palavra-chave async combinada com gen e a possibilidade de usar async for em loops. Isso permite escrever código que gera e consome sequências de dados de forma assíncrona, sem bloquear o fluxo de execução.



Exemplo: Gerador assíncrono de números de Fibonacci



use std::time::Duration;use tokio::time::sleep;

// Gerador assíncrono que "emite" números de Fibonacci com atrasoasync fn async_fibonacci(limit: u32) -> impl AsyncIterator<Item = u64> { async gen { let (mut a, mut b) = (0, 1); for _ in 0..limit { sleep(Duration::from_millis(100)).await; // Simulação de trabalho assíncrono yield b; // Palavra-chave yield let next = a + b; a = b; b = next; } }}

#[tokio::main]async fn main() { println!("Números de Fibonacci assíncronos (primeiros 10):"); // Usamos async for para consumir async for number in async_fibonacci(10) { println!("Recebido: {}", number); } println!("Pronto!");}


O que isso proporciona na prática?

  • Simplificação do código: Não é mais necessário escrever combinadores complexos do crate futures.
  • Legibilidade: O código se parece com um gerador síncrono comum, mas funciona de forma assíncrona.
  • Desempenho: O compilador otimiza essas construções, minimizando a sobrecarga.

Isso é especialmente útil para processar fluxos de dados da rede, ler arquivos grandes ou trabalhar com conexões WebSocket.



2. Borrow checker aprimorado: Polonius estabilizado



O borrow checker é a "alma" do Rust, responsável pela segurança da memória sem um coletor de lixo. No entanto, iniciantes (e até desenvolvedores experientes) frequentemente enfrentavam situações em que o compilador rejeitava código perfeitamente seguro. Em 2025, o modelo de empréstimo Polonius finalmente se tornou parte do compilador estável.



Polonius usa uma análise de fluxo de dados mais precisa, permitindo que o compilador "entenda" padrões mais complexos de trabalho com referências.



Exemplo: O problema dos "dois empréstimos mutáveis"

Antes, este código não compilava:



fn push_and_pop(vec: &mut Vec<i32>) -> &i32 {    vec.push(1);    // Erro: não é possível pegar uma referência mutável (push) e depois uma imutável (pop)    let last = vec.last().unwrap();    last}


No Rust 2025 com Polonius, isso funciona! O compilador percebe que, após o push, a referência mutável não é mais usada e permite pegar uma referência imutável para o último elemento. Veja como

Blogs

Book Recommendations