832.378 líneas de Rust en 14,5 semanas: una reescritura dirigida por agentes

La migración redujo la memoria de 1.383MB a 126MB y costó unos 120.000 dólares en tokens, pero aun así dejó decenas de regresiones que el compilador aprobó sin objeciones

|5 min de lectura0
Source code on a developer's screen, the surface where GitHub's agents carried out a 14.5-week TypeScript-to-Rust port of the Copilot runtime
Source code on a developer's screen, the surface where GitHub's agents carried out a 14.5-week TypeScript-to-Rust port of the Copilot runtime

Un runtime de lenguaje en producción fue reconstruido en 832.378 líneas de Rust para reemplazar a TypeScript, y la diferencia de rendimiento es contundente: una prueba que ejecuta 1.000 ciclos de sesión de un solo turno pasó de 7,55 por segundo a 120, mientras que la memoria de un lote de agentes con 10 clientes cayó de 1.383MB a 126MB. El trabajo se extendió del 12 de mayo al 21 de agosto de 2026, lo dirigió principalmente un solo desarrollador que supervisaba agentes de programación y quedó documentado en un informe técnico detallado firmado por Stephen Toub, ingeniero distinguido de Microsoft.

Claves del caso

  • Los agentes convirtieron unas 430.000 líneas de TypeScript en producción en 832.378 líneas de Rust, repartidas en 128 pull requests fusionados durante 14,5 semanas.
  • Una prueba de 1.000 ciclos de sesión de un solo turno pasó de 7,55 por segundo en TypeScript a 120 por segundo con Rust en proceso, y un lote de agentes con 10 clientes bajó de 1.383MB a 126MB de memoria.
  • De los 31.247 mensajes de usuario registrados en los logs, solo unos 2.600 los escribió una persona: aproximadamente uno de cada doce.

Las cifras detrás de la migración

Además del código de producción, los agentes generaron 468.689 líneas de pruebas unitarias en Rust. Los pull requests de la migración llegaban a un ritmo de 1,3 por día mientras se publicaban 135 versiones públicas en paralelo, porque los módulos se sustituyeron uno a uno en lugar de hacer un cambio único. The Register informó de una factura de tokens cercana a los 120.000 dólares.

El andamiaje temporal cuenta la misma historia: las exportaciones N-API que unían ambos mundos llegaron a un máximo de 2.019 el 3 de agosto, junto a 3.356 puntos de llamada en TypeScript. Ambas cifras terminaron en cero.

Qué sostiene realmente este runtime

El motor resulta invisible para casi todos los que lo usan. Sustenta la CLI de Copilot, la aplicación de escritorio de Copilot, el SDK de Copilot en seis lenguajes y el agente en la nube, y viaja dentro de las versiones recientes de VS Code y Visual Studio. También llega hasta Excel, Outlook, PowerPoint y Word.

La versión original corría sobre TypeScript con Node.js y V8: rápida para iterar, pero débil en latencia de arranque y densidad de servidor cuando el mismo motor tuvo que incrustarse mediante una ABI de C en tantos anfitriones. Toub delimitó con cuidado la conclusión: el proyecto no pretende sostener que todo programa grande en TypeScript deba pasarse a Rust, y aclaró que aquí pesaban de forma especial la incrustación por ABI de C, un consumo bajo en régimen estable y un uso de recursos predecible.

Por qué los agentes dedicaron más tiempo a leer que a escribir

Los logs registraron 12.760.995 eventos y 1.857.409 inicios de herramienta. Solo los comandos de inspección de Git consumieron 608 horas medidas. La tasa de aciertos de la caché de prompts alcanzó el 96,22%; sin ella, sesiones de esa duración habrían resultado inasumibles.

La imagen popular de una IA escupiendo código es casi la contraria; a esta escala, el trabajo se parecía mucho más a una investigación iterativa.

Migrar session.ts, un archivo de 30.000 líneas que toca todas las partes del runtime, exigió una sesión de 25 horas que arrancó con 56 minutos de lectura y 122 llamadas de herramienta para aclarar dudas antes de la primera edición. Después generó 15 sesiones hijas en siete oleadas e intercambió con ellas 89 mensajes de coordinación. Los modelos se repartieron según sus fortalezas: se usaron tanto GPT-5.6 Sol como Claude Opus 4.8 de Anthropic.

Lo que el compilador no pudo detectar

El borrow checker, la pieza de Rust que domina cualquier conversación sobre su dificultad, apenas apareció. De 8.678 errores de compilación, los problemas de propiedad, préstamos y tiempos de vida supusieron el 1,7%, mientras que la resolución de nombres e importaciones llegó al 37%. El código unsafe quedó contenido en 158 bloques repartidos en 36 archivos, casi todos en las fronteras con la ABI de C, la API de Windows y POSIX.

Las regresiones fueron otra historia. Se rastrearon decenas, la mayoría aflorando en canales de prueba, y no se cerraron del todo hasta el 14 de septiembre. Se agruparon en migraciones incompletas, problemas de estado y de tiempo de vida, contratos de comportamiento incumplidos, fallos en la frontera con el anfitrión y pruebas con expectativas equivocadas: nada que un compilador evalúe. En la RustConf de Montreal, la consultora Lisa Crossman advirtió contra tratar al compilador como un oráculo y recordó que Rust impide a un agente escribir código inseguro en memoria, pero no le impide escribir correctamente el programa equivocado. Toub llegó a un punto parecido: la idea de que el código que compila es código correcto solo sirve como chiste.

Perspectivas

El caso de referencia es Bun, el runtime de JavaScript propiedad de Anthropic, donde su creador Jarred Sumner trasladó unas 535.000 líneas de Zig a Rust casi por completo con agentes de Claude; el port experimental ya superaba el 99,8% de las pruebas de Bun en Linux x64 glibc el 30 de julio, aunque las versiones estables siguen saliendo de Zig y el creador de Zig, Andrew Kelley, despachó el resultado como código basura sin revisar. GitHub tomó el camino opuesto y sustituyó los módulos uno por uno sin reestructurar nada, lo que significa que el verdadero trabajo de optimización todavía no ha empezado. El patrón recuerda a una reescritura similar en Rust hecha por dos ingenieros en OpenAI: equipos humanos diminutos, un rendimiento enorme de los agentes y la revisión como único cuello de botella que queda.

Preguntas frecuentes

¿Escribieron los agentes de IA todo el código en Rust?

Los agentes produjeron la mayor parte, pero las personas siguieron al mando del diseño, la revisión y las decisiones finales. Los logs muestran unos 2.600 mensajes escritos por humanos frente a 31.247 mensajes de usuario en total, es decir, una intervención humana cada doce turnos aproximadamente.

¿Cuánto más rápido es el runtime en Rust?

En una prueba publicada que mide 1.000 ciclos de sesión de un solo turno con un cliente compartido y 100 canalizaciones concurrentes, la versión en Rust alcanzó 120 ciclos por segundo frente a 7,55 de TypeScript, una mejora de 15,9 veces. La memoria de un lote de agentes con 10 clientes bajó de 1.383MB a 126MB.

¿Deberían otros proyectos en TypeScript migrar a Rust?

Toub se negó expresamente a generalizar. Aquí el argumento a favor de Rust se apoyaba en la incrustación mediante una ABI de C, un coste de arranque bajo y un uso de recursos predecible en muchas aplicaciones anfitrionas, requisitos que la mayoría de bases de código en TypeScript no tienen.

¿Qué te parece este artículo?

SJ
Cargando...

Artículos relacionados

HydraFusion de GitHub deja de elegir un modelo: monta un flujo de trabajo
Developer Tools

HydraFusion de GitHub deja de elegir un modelo: monta un flujo de trabajo

Project HydraFusion, de GitHub, arma un plan multimodelo para cada petición de Copilot y cambia la sencillez de un único modelo por un coste mucho más bajo.

Seung Junghace 6 días
Plugin4Shell: un RCE sin un solo clic golpea a Claude Code, Codex, Copilot y Gemini CLI
Developer Tools

Plugin4Shell: un RCE sin un solo clic golpea a Claude Code, Codex, Copilot y Gemini CLI

Un RCE sin interacción llamado Plugin4Shell sortea el anclaje a commits que los agentes de programación con IA usan para confiar en sus plugins. Solo dos de los cuatro proveedores han parcheado.

Seung Junganteayer
Las empresas ya licencian su código fuente privado como datos de evaluación de IA
Developer Tools

Las empresas ya licencian su código fuente privado como datos de evaluación de IA

Specific Labs licenció repositorios privados de una empresa de producto de consumo y una plataforma fintech para construir Real-SWE, convirtiendo código propietario en datos de evaluación imposibles de rastrear.

Seung Junghace 5 días
Claude Code Projects vuelve como un coordinador que ejecuta hilos en la nube en paralelo
Developer Tools

Claude Code Projects vuelve como un coordinador que ejecuta hilos en la nube en paralelo

El rediseño de Claude Code Projects coloca un coordinador por encima de los hilos de trabajo, cada uno una sesión completa en la nube con su rama y memoria compartida.

Seung Junganteayer
Perplexity dejó que cientos de agentes escribieran su base de datos. El permiso para desplegar siguió siendo humano
Developer Tools

Perplexity dejó que cientos de agentes escribieran su base de datos. El permiso para desplegar siguió siendo humano

Perplexity sustituyó DynamoDB por CobbleDB, un almacén de 40.000 líneas de Rust levantado en dos meses por dos ingenieros y cientos de agentes sin permiso para desplegarlo.

Seung Junghace 3 días
Los reparadores con LLM rompieron código que funcionaba diez veces más a menudo de lo que arreglaron el defectuoso
Developer Tools

Los reparadores con LLM rompieron código que funcionaba diez veces más a menudo de lo que arreglaron el defectuoso

Un estudio en arXiv midió un bucle de reparación con LLM dañando programas correctos a 0,261 y arreglando los defectuosos a 0,023, y halló la dirección interna que lo impulsa.

Seung Junghace 6 días