Erros do Rust: Guia de Referência em Português
Se você já programou em Rust, sabe que o compilador é rigoroso — mas também extremamente útil. As mensagens de erro do Rust são consideradas as melhores entre todas as linguagens de programação, com explicações detalhadas e sugestões de correção diretamente no terminal.
Este guia reúne os erros mais comuns que desenvolvedores Rust encontram no dia a dia, com explicações claras em português brasileiro e múltiplas formas de resolver cada um.
Como Funcionam os Erros no Rust
O Rust possui um sistema de erros categorizado em três níveis:
Erros do Compilador (E0XXX)
São erros numerados que impedem a compilação do seu código. Cada erro tem um código único no formato E0XXX (por exemplo, E0382, E0308). Você pode consultar a explicação oficial de qualquer erro executando:
rustc --explain E0382
Warnings (Avisos)
Avisos não impedem a compilação, mas indicam problemas potenciais como variáveis não utilizadas, código inalcançável ou padrões não recomendados.
Lints do Clippy
O Clippy é a ferramenta oficial de linting do Rust. Ele detecta padrões de código que, embora válidos, podem ser melhorados em termos de performance, legibilidade ou uso idiomático da linguagem.
cargo clippy
Erros por Categoria
Navegue pelos erros organizados por tema. Clique em qualquer erro para ver a explicação completa com exemplos de código e soluções.
Ownership e Borrowing
Os erros mais característicos do Rust, relacionados ao sistema de posse e empréstimo de valores.
Lifetimes
Erros relacionados ao tempo de vida das referências, um conceito único do Rust.
Tipos
Erros de tipo são frequentes quando se está aprendendo o sistema de tipos do Rust.
Traits e Genéricos
Erros ao implementar traits ou usar parâmetros genéricos incorretamente.
Erros de Runtime (Panics)
Erros que acontecem durante a execução do programa, causando panic.
Cargo e Build
Erros relacionados ao Cargo, gerenciador de pacotes e build system do Rust.
Async/Await
Erros comuns ao trabalhar com programação assíncrona em Rust.
Clippy Lints
Avisos e sugestões do Clippy para escrever código Rust mais idiomático.
Dicas Gerais para Resolver Erros no Rust
- Leia a mensagem completa — O compilador do Rust frequentemente sugere a correção exata.
- Use
rustc --explain EXXXX— Cada erro tem uma explicação detalhada com exemplos. - Compile frequentemente — Não espere escrever centenas de linhas para compilar.
- Use
cargo check— É mais rápido quecargo buildpara verificar erros. - Ative o Clippy —
cargo clippyencontra problemas antes que se tornem erros.
Recursos Relacionados
- Tutorial de Ownership e Borrowing
- Tutorial de Tratamento de Erros
- Cheatsheet Rust
- Glossário Rust em Português
- Índice Oficial de Erros do Rust
E0382: Uso de Valor Após Move no Rust
E0382: Uso de Valor Após Move
O erro E0382 é provavelmente o erro mais comum que todo desenvolvedor Rust encontra, especialmente no início da jornada com a …
Leia maisE0502: Empréstimo Mutável e Imutável no Rust
E0502: Empréstimo Mutável e Imutável Simultâneo
O erro E0502 ocorre quando você tenta criar um empréstimo mutável (&mut) enquanto já existe um empréstimo …
E0505: Mover Valor Enquanto Emprestado no Rust
E0505: Mover Valor Enquanto Emprestado
O erro E0505 surge quando você tenta mover (transferir o ownership de) um valor que ainda tem referências ativas …
Leia maisE0507: Não Pode Mover de Referência no Rust
E0507: Não Pode Mover de Referência
O erro E0507 ocorre quando você tenta mover um valor para fora de uma referência emprestada. Referências no Rust são …
Leia maisE0499: Dois Empréstimos Mutáveis no Rust
E0499: Dois Empréstimos Mutáveis
O erro E0499 ocorre quando você tenta criar duas referências mutáveis para o mesmo dado simultaneamente. O Rust proíbe isso …
Leia maisE0106: Lifetime Ausente no Rust
E0106: Lifetime Ausente
O erro E0106 ocorre quando o compilador não consegue determinar automaticamente o lifetime (tempo de vida) de uma referência. Isso …
Leia maisE0597: Valor Não Vive Tempo Suficiente no Rust
E0597: Valor Não Vive Tempo Suficiente
O erro E0597 ocorre quando uma referência tenta sobreviver ao valor que ela referencia. Em outras palavras, o valor é …
Leia maisE0621: Conflito de Lifetimes no Rust
E0621: Conflito de Lifetimes
O erro E0621 ocorre quando há um conflito entre os lifetimes esperados e os lifetimes fornecidos em parâmetros de função. …
Leia maisE0308: Tipos Incompatíveis no Rust
E0308: Tipos Incompatíveis
O erro E0308 é um dos mais frequentes no Rust e ocorre quando o compilador espera um tipo, mas encontra outro. O sistema de tipos do …
Leia maisE0277: Trait Não Implementado no Rust
E0277: Trait Não Implementado
O erro E0277 ocorre quando você usa um tipo em um contexto que exige que ele implemente um determinado trait, mas ele não …
Leia maisE0369: Operador Não Pode Ser Aplicado no Rust
E0369: Operador Não Pode Ser Aplicado
O erro E0369 ocorre quando você tenta usar um operador binário (como +, -, *, ==) em tipos que não implementam o trait …
E0412: Tipo Não Encontrado no Rust
E0412: Tipo Não Encontrado
O erro E0412 ocorre quando você usa um nome de tipo que o compilador não consegue encontrar no escopo atual. As causas mais comuns …
Leia maisE0046: Items Faltando na Implementação no Rust
E0046: Items Faltando na Implementação
O erro E0046 ocorre quando você começa a implementar um trait para um tipo, mas não fornece implementações para todos os …
Leia maisE0107: Argumentos Genéricos Incorretos no Rust
E0107: Argumentos Genéricos Incorretos
O erro E0107 ocorre quando você fornece o número errado de argumentos genéricos (tipo, lifetime ou const) ao usar um tipo …
Leia maisE0038: Trait Não Pode Ser Trait Object no Rust
E0038: Trait Não Pode Ser Trait Object
O erro E0038 ocorre quando você tenta usar um trait como trait object (dyn Trait) mas o trait não satisfaz as regras de …
Panic em unwrap(): Como Evitar no Rust
Panic em unwrap(): Como Evitar
O panic por unwrap() é provavelmente o erro de runtime mais comum no Rust. Ele ocorre quando você chama .unwrap() em um …
Panic: Index Out of Bounds no Rust
Panic: Index Out of Bounds
O panic “index out of bounds” ocorre quando você tenta acessar um elemento de um array, slice ou Vec usando um índice que …
Panic: Stack Overflow no Rust
Panic: Stack Overflow
O stack overflow ocorre quando o programa esgota o espaço disponível na stack (pilha de execução). As causas mais comuns são recursão …
Leia maisCargo: Could Not Compile — Como Resolver
Cargo: Could Not Compile
A mensagem “could not compile” é o aviso final do Cargo de que a compilação falhou. Não é um erro em si, mas o resumo de …
Leia maisCargo: Unresolved Import — Como Resolver
Cargo: Unresolved Import
O erro “unresolved import” ocorre quando o compilador não consegue encontrar o item que você está tentando importar com use …
Cargo: Feature Not Found — Como Resolver
Cargo: Feature Not Found
O erro “feature not found” ocorre quando você especifica uma feature flag no Cargo.toml que não existe no crate. Features …
Future is Not Send — Como Resolver no Rust
Future is Not Send
O erro “future is not Send” é um dos mais confusos da programação assíncrona em Rust. Ele ocorre quando você tenta enviar um …
Leia maisE0728: await Usado Fora de Função Async no Rust
E0728: await Usado Fora de Função Async
O erro E0728 ocorre quando você usa .await em um contexto que não é async — ou seja, fora de uma função async fn, um …
Erro de Invocação de Macro no Rust
Erro de Invocação de Macro
Erros de invocação de macro no Rust aparecem quando você chama uma macro com sintaxe incorreta, argumentos errados ou esquece o !. As …
Clippy: Lints Mais Comuns e Como Resolver
Clippy: Lints Mais Comuns e Como Resolver
O Clippy é a ferramenta oficial de linting do Rust, com mais de 700 lints que ajudam a escrever código mais …
Leia mais