O Rust 1.85 estabiliza a edição 2024 e deixa claro que a linguagem continua evoluindo por meio de ajustes opt-in, não por ruptura generalizada. A nova edição reúne mudanças de linguagem, biblioteca padrão, Cargo, Rustdoc e Rustfmt, com foco especial em tornar fronteiras de segurança mais explícitas.1
Rust já ocupa espaços em infraestrutura, sistemas embarcados, ferramentas de linha de comando, componentes de performance e bases que precisam reduzir classes de bugs de memória. Nesse contexto, a edição 2024 não é apenas uma atualização de sintaxe. Ela é um mecanismo para preparar código novo para regras mais claras.
Unsafe fica mais visível
Uma das mudanças mais relevantes é o endurecimento gradual em torno de unsafe. Blocos extern passam a exigir a palavra-chave unsafe, certos atributos como no_mangle e export_name precisam ser marcados como inseguros, e o lint unsafe_op_in_unsafe_fn passa a avisar por padrão.1
Esse conjunto reforça uma ideia central do Rust: código inseguro não deve ser invisível. Ele pode ser necessário para FFI, sistemas, drivers e integrações de baixo nível, mas precisa ficar cercado por intenção explícita. Para revisão de código, auditoria e manutenção, isso é valioso.
O ganho não é eliminar unsafe. O ganho é reduzir ambiguidade. Quando um trecho atravessa fronteiras que o compilador não consegue proteger integralmente, a equipe precisa saber exatamente onde isso acontece e por quê.
Async closures melhoram ergonomia de APIs modernas
Rust 1.85 também estabiliza async closures, permitindo escrever closures assíncronas como async || {}.1 Em aplicações modernas, isso ajuda bibliotecas que recebem callbacks assíncronos, middlewares, pipelines e integrações com runtimes async.
Antes, era comum aproximar esse comportamento com closures que retornam blocos async. Isso funcionava em muitos casos, mas nem sempre expressava empréstimos e assinaturas de forma natural. Async closures tornam a intenção mais direta, especialmente quando o future precisa capturar referências do ambiente.
O recurso não remove a complexidade de async em Rust. Lifetimes, traits e pinning continuam exigindo cuidado em bibliotecas avançadas. Mas a linguagem reduz um degrau de cerimônia para padrões cada vez mais comuns.
Cargo e edição conectam código a política de projeto
As mudanças em Cargo incluem comportamento mais atento ao campo rust-version, além de ajustes no resolvedor de dependências.1 Isso importa para organizações que precisam controlar versão mínima de compilador, compatibilidade de crates e reprodutibilidade.
Edições seguem o papel de separar evolução de compatibilidade. Um projeto pode adotar Rust 2024 quando estiver pronto, usar cargo fix como apoio conservador e manter dependências em outras edições. Esse modelo evita dividir o ecossistema, porque crates de edições diferentes continuam interoperando.
Rust 1.85 é uma versão de maturidade técnica. Ela não promete que segurança vem sem disciplina. Ela faz algo mais realista: torna as zonas de risco mais visíveis, melhora ergonomia em pontos importantes e mantém um caminho de migração controlado para projetos que precisam durar.
- Rust Blog, "Announcing Rust 1.85.0 and Rust 2024", 20 fev. 2025. ↩