Rust ativa seu resolvedor de traits de nova geração nas builds nightly
O novo resolvedor de traits do Rust agora é o padrão no nightly: a maior mudança do compilador desde a 1.0, quatro anos de trabalho e estabilização prevista para os próximos meses.
3 min de leitura

Em números
- GitHub issues fixed by the new solver, per the Rust team
- 200+
- of active development before this switch
- ~4 yrs
- faster on the datafusion crate, per the announcement
- 8x
O projeto Rust ativou por padrão seu resolvedor de traits de nova geração nas builds nightly em 22 de agosto, chamando-o de "a maior mudança única no compilador Rust desde seu lançamento inicial". O anúncio coloca a estabilização "nos próximos meses" - ou seja, o código de todo desenvolvedor Rust em breve passará por um núcleo reescrito do compilador, e a hora de descobrir se o seu sobrevive é agora, enquanto um relatório de regressão ainda conta.
O que o resolvedor de traits realmente faz
O resolvedor de traits é a parte do compilador que responde à pergunta mais frequente do Rust: este tipo implementa este trait? Ele prova cláusulas where, normaliza tipos associados e decide os limites de traits por trás de quase toda linha de código genérico. A cobertura da LWN remonta o esforço a uma década: uma reimplementação experimental chamada Chalk começou em 2015, e em 2023 o projeto decidiu pela reescrita que se tornou o resolvedor de hoje.
O novo resolvedor também muda o que a linguagem consegue expressar. A LWN explica que ele aplica raciocínio coindutivo - que seu autor Daroc Alden descreve por contraste: "um ciclo indutivo é um loop infinito, ou uma função recursiva sem caso base. Um ciclo coindutivo... corresponde a algo como um gerador" - habilitando interfaces baseadas em traits autorreferenciais que o resolvedor antigo simplesmente não conseguia provar. Segundo a LWN, esse tratamento coindutivo é deliberadamente limitado a um pequeno conjunto de autotraits como Send.
Uma década de trabalho
| Marco | Quando |
|---|---|
| Começa o Chalk, primeira reimplementação experimental | 2015 |
| Decisão de reescrever rumo ao resolvedor atual | 2023 |
| Novo resolvedor chega ao stable - só para verificação de coerência | antes desta mudança |
| Padrão no nightly | 22 de agosto de 2026 |
| Estabilização planejada | "nos próximos meses" |
A escala é incomum para a troca de um componente de compilador: a equipe do Rust diz que o novo resolvedor corrige mais de 200 issues do GitHub acumuladas contra o antigo, e o retrato de março da LWN contava 76 bugs abertos e 78 fechados contra a nova implementação - uma base de código testada em público, não uma peça de reposição pronta.
O que quebra, e o que se destrava
A equipe do Rust é incomumente direta sobre o custo: "Esta é uma mudança
incrivelmente grande que resulta em uma quantidade não trivial de
quebras". Parte do código que compila hoje deixará de compilar; parte do
código que o resolvedor antigo rejeitava por engano agora compila. O
anúncio cita o tratamento alterado de impl Trait em posição de retorno,
Type Alias Impl Trait e Return Type Notation, além de um tratamento mais
correto de tipos associados em tipos higher-ranked - removendo inferências
de tipo incorretas que o resolvedor antigo permitia.
A recompensa, segundo o anúncio: aposentar a implementação antiga destrava Type Alias Impl Trait e Return Type Notation como recursos estáveis, abre a porta para novos limites de traits implícitos por padrão e permite à equipe corrigir as inseguranças conhecidas restantes do sistema de tipos. Há ganhos de desempenho também - a equipe cita a crate datafusion compilando 8 vezes mais rápido com o novo resolvedor.
O que isso significa para desenvolvedores
Se você mantém uma crate Rust, rode-a esta semana contra o nightly mais
recente - rustup update nightly && cargo +nightly check é o teste
inteiro - e abra um issue para qualquer regressão. O pedido da equipe é
explícito: "Experimente o nightly mais recente e abra um issue se
encontrar bugs ou regressões". A quebra que você reporta agora molda a
estabilização; a quebra que você descobre depois de chegar ao stable é só
problema seu.
Se o seu CI ainda não inclui um job de nightly, este é o argumento mais forte em anos para adicionar um, mesmo como build consultiva não bloqueante: uma "maior mudança desde a 1.0" chegando ao stable em meses é exatamente o evento para o qual esse canal existe.
E se você já bateu nas paredes do resolvedor antigo - designs de API cheios de traits que morreram em falhas de inferência misteriosas, ou travamentos em código profundamente genérico - vale a pena retestar exatamente esses casos no nightly. Entre o suporte à coindução, as correções de tipos associados e ganhos de compilação como o do datafusion, alguns contornos antigos de "Rust não consegue fazer isso" na sua base de código podem ter acabado de se tornar removíveis.
Fontes
Artigos relacionados

Rust 1.100 remove as ferramentas de host dos alvos Windows de 32 bits
O Rust 1.100 deixa de distribuir o compilador para Windows de 32 bits. Os alvos i686 mantêm a biblioteca padrão, então a compilação cruzada a partir do Windows de 64 bits continua funcionando.

Rust 1.99 estabiliza a definição de funções C-variadic
O Rust 1.99.0, lançado em 1º de outubro de 2026, permite que o Rust estável defina funções C-variadic como printf, passa para o LLVM 23 e torna no_mangle em genéricos um erro.

O tipo never do Rust, explicado
O tipo never do Rust, escrito !, é o tipo do código que nunca produz um valor. Está estável no Rust 1.100 após dez anos, e muda o recuo de tipos.