100 mil líneas de TypeScript a Rust: una experiencia real de portabilidad con Claude Code
(blog.vjeux.com/2026)El exingeniero de Facebook Christopher Chedeau (Vjeux) realizó un experimento para portar el motor de batalla de Pokemon Showdown (unas 100 mil líneas de TypeScript) a Rust usando Claude Code
Objetivos del proyecto
- Construir un oráculo rápido (sistema de referencia) para entrenar una IA de batallas de Pokemon
- Implementación existente en TypeScript → demasiado lenta (imposible simular millones de batallas)
- Lenguaje objetivo: Rust (alto rendimiento) → pero él tenía cero experiencia en Rust
Resultados principales
- Portó unas 100 mil líneas en 1 mes (trabajo real de unas 2 a 4 semanas)
- Generó unos 5,000 commits
- La velocidad de ejecución mejoró 3.5 veces
- La prueba diferencial mostró una tasa de coincidencia de 99.96% (sobre 2 millones de batallas aleatorias)
- Se estima que el 0.04% restante proviene de errores en el código original en TS
Estrategias clave del éxito
- Introducción de pruebas diferenciales (differential testing)
- Ejecutar en paralelo el original en TS y la versión en Rust → comparar resultados
- En los casos de discrepancia → mostrarle los logs a Claude y pedirle correcciones
- Posibilidad de validar incluso sin conocer casi nada de la sintaxis de Rust
Principales dificultades que enfrentó Claude
- Portar archivos individuales lo hacía bien ↔ aparecían problemas frecuentes en la integración entre archivos
- Ejemplo: definir el mismo concepto (
move) con structs distintos
- Ejemplo: definir el mismo concepto (
- Limitaciones de la ventana de contexto → pérdida de información importante durante los resúmenes intermedios
- Tendencia a intentar “mejorar” las cosas → ignoraba la instrucción explícita de hacer una “portabilidad línea por línea” e intentaba refactorizar → produciendo muchos bugs
- Solicitudes de optimización → los planes parecían muy buenos, pero en la práctica casi no mejoraban el rendimiento (y algunos incluso lo empeoraban)
Hack peculiar del flujo de trabajo
- Automatización de las solicitudes de aprobación del usuario de Claude
- Con AppleScript, se presionaba Enter automáticamente cada pocos segundos → ejecución desatendida 24 horas al día
- (Había riesgos de seguridad, pero los aceptó por tratarse de un oráculo de un solo uso)
Estado actual de las herramientas de programación con IA (evaluación)
- Tareas de conversión mecánica y portabilidad masiva → muy potentes
- Tareas de mayor nivel como optimización de rendimiento o diseño de arquitectura → todavía insuficientes
- Debate en Hacker News
- Escépticos: imposible de mantener, código que “solo compila”
- Defensores: con pruebas diferenciales se puede confiar suficientemente + reduce al máximo el tiempo frente a hacerlo solo con humanos
3 lecciones para aplicar en el trabajo real
- Es indispensable un sistema de pruebas automatizadas muy riguroso (sin pruebas diferenciales, la probabilidad de fracasar es muy alta)
- Funcionan mejor las instrucciones claras y de alcance limitado (“portabilidad línea por línea” O vs “mejóralo” X)
- La IA es solo una herramienta → el desarrollador sigue siendo responsable de diagnosticar problemas, diseñar las preguntas y mantener la dirección del trabajo
→ Un caso donde alguien que no sabía nada de Rust trasladó en un mes un código de 100 mil líneas a un nivel utilizable en la práctica → un experimento representativo que demuestra la utilidad práctica de la programación con IA y al mismo tiempo deja claras sus limitaciones
1 comentarios
Esto pasa por alto que escribir casos de prueba no es una solución universal. No todo se reduce a que la entrada y la salida funcionen bien. Al final, habrá que volver a revisar las 100 mil líneas.