LLMs falham em unsafe Rust: seis meses de testes revelaram erros críticos
Durante seis meses, o autor fez LLMs escreverem código unsafe Rust em projetos reais e analisou os resultados com Miri. Os modelos erram de forma consistente: a

O autor teve LLM escrever código unsafe Rust em projetos em produção por seis meses e verificou cada bloco com Miri e sanitizadores. O resultado foi decepcionante: os modelos cometeram os mesmos erros de forma previsível e consistente.
Sete categorias de erros do LLM em unsafe Rust
Os modelos cometem erros consistentemente nos mesmos locais:
- Aliasing — violação da regra de referências não sobrepostas
- Provenance — tentativas de usar ponteiros obtidos incorretamente
- Layout em alloc/dealloc — incompatibilidade de tamanho/alinhamento durante alocação e desalocação
- ManuallyDrop — esquecem de chamar drop ou acessam o objeto após drop
- Corridas em callbacks FFI — condições de corrida ao chamar funções C de threads
- Manual Send/Sync — implementam incorretamente traits de segurança de threads
- Memória Uninit — tratam dados não inicializados como inicializados
Por que Miri revelou os problemas
Miri é um interpretador Rust que rastreia comportamento indefinido. Quando LLM gera código com violações sutis à primeira vista (por exemplo, um ponteiro temporário com proveniência incorreta), o compilador regular o ignora, mas Miri o detecta. Sob sanitizadores (AddressSanitizer, ThreadSanitizer), foram descobertos race conditions e use-after-free, que podem não aparecer em testes regulares.
"Cada categoria vem com um exemplo mínimo e uma correção" — o autor
mostra que não são apenas observações, mas padrões de erro reproduzíveis.
O que isso significa
LLMs ainda não estão prontos para escrever unsafe Rust sem supervisão humana. Geram bem sintaxe e lógica geral, mas cometem erros sistematicamente em gerenciamento de memória e multithreading. Para código crítico (software de sistema, bibliotecas de sistema), o unsafe Rust dos modelos deve ser verificado com Miri.