100 mil linhas de TypeScript para Rust: relato prático de porting com Claude Code
(blog.vjeux.com/2026)O ex-engenheiro do Facebook Christopher Chedeau (Vjeux) fez um experimento de portar o motor de batalha do Pokemon Showdown (cerca de 100 mil linhas em TypeScript) para Rust usando o Claude Code
Objetivos do projeto
- Construir um oráculo rápido (sistema de referência) para treinamento de IA de batalha de Pokemon
- Implementação existente em TypeScript → lenta demais (impossível simular milhões de batalhas)
- Linguagem-alvo: Rust (alto desempenho) → mas ele tinha zero experiência com Rust
Principais resultados
- Aproximadamente 100 mil linhas portadas em 1 mês (trabalho real de cerca de 2 a 4 semanas)
- Cerca de 5.000 commits gerados
- Velocidade de execução 3,5x maior
- Taxa de correspondência de 99,96% nos testes diferenciais (com base em 2 milhões de batalhas aleatórias)
- Os 0,04% restantes são considerados provavelmente bugs no código original em TS
Estratégias centrais para o sucesso
- Introdução de testes diferenciais (differential testing)
- Execução simultânea do código original em TS e da versão em Rust → comparação dos resultados
- Casos divergentes → mostrar os logs ao Claude e pedir correções
- Tornou possível validar o trabalho mesmo sem praticamente conhecer a sintaxe de Rust
Principais dificuldades enfrentadas pelo Claude
- Faz bem o porting de arquivos individuais ↔ problemas frequentes na integração entre arquivos
- Ex.: definir o mesmo conceito (
move) em structs diferentes
- Ex.: definir o mesmo conceito (
- Limite da janela de contexto → perda de informações importantes durante o processo de resumo intermediário
- Tendência a tentar “melhorar” o código → ignorava a instrução explícita de “porting linha por linha” e tentava refatorar → gerando muitos bugs
- Pedidos de otimização → os planos pareciam ótimos, mas quase não trouxeram ganho real de desempenho (alguns até ficaram mais lentos)
Hack curioso de workflow
- Automação das solicitações de aprovação do usuário feitas pelo Claude
- AppleScript para apertar Enter automaticamente a cada poucos segundos → execução autônoma 24 horas por dia
- (Havia risco de segurança, mas ele aceitou isso por se tratar de um oráculo de uso único)
Estado atual das ferramentas de código com IA (avaliação)
- Transformações mecânicas e porting em grande escala → muito fortes
- Tarefas de nível mais alto, como otimização de desempenho e design de arquitetura → ainda insuficientes
- Debate no Hacker News
- Céticos: impossível de manter, código que “só compila”
- Defensores: com testes diferenciais, a confiabilidade é suficiente + enorme economia de tempo em relação a humanos
3 lições para aplicação prática
- Um sistema de testes automatizados rigoroso é indispensável (sem testes diferenciais, a chance de fracasso é muito alta)
- Instruções claras e de escopo estreito funcionam melhor (“porting linha por linha” O vs “melhore isso” X)
- IA é apenas uma ferramenta → o desenvolvedor ainda precisa diagnosticar problemas, formular perguntas e manter a direção
→ Um caso em que alguém sem qualquer conhecimento de Rust conseguiu migrar um código na escala de 100 mil linhas para um nível prático em um mês → um experimento representativo que comprova a utilidade prática da codificação com IA e ao mesmo tempo expõe claramente seus limites
1 comentários
Isso ignora o fato de que escrever casos de teste não é uma solução universal. Não basta apenas que a entrada e a saída estejam corretas. No fim, será preciso revisar novamente todas as 100 mil linhas.