Migrar scripts de CLI de Node.js a Rust: Aumento de velocidad de 5 a 10 veces con IA
Los scripts de CLI en Node.js 18 procesaban archivos del proyecto: recorrido recursivo de directorios, conteo de líneas por extensión y análisis de Markdown con extracción de front matter. En un MacBook con chip M4, la ejecución tardaba 2 segundos. En un Intel Core i5-1035G1 con 8 GB de RAM, tardaba 8 segundos. Esta diferencia se vuelve crítica cuando se ejecutan repetidamente.
Reescribir el código en Rust con la ayuda de un asistente de IA (Claude Code) logró una aceleración de 5 a 10 veces. El código se generó de forma iterativa: el compilador de Rust señalaba errores y la IA los corregía sin intervención manual.
Contexto técnico y casos de uso
Los scripts realizaban tareas habituales:
- Recorrido recursivo mediante
glob, agregando estadísticas de conteo de líneas por archivo. - Análisis de Markdown, extracción de front matter y generación de índices.
Cuello de botella: ejecución secuencial de promesas y uso ineficiente de glob. Aunque Node.js podría haberse optimizado, Rust destaca en el recorrido de archivos y operaciones intensivas en CPU, de forma similar a cómo ripgrep o fd superan a grep/find por un factor de 10 a 20.
El experimento se centró en tareas sencillas: aproximadamente 200 líneas de código cada una, sin llamadas a red, sin multihilo ni lógica de negocio compleja.
Proceso de migración asistido por IA
- Se proporcionó el código fuente original a Claude Code con instrucciones para portarlo a Rust.
- El compilador detectó problemas de tipos y de tiempos de vida; la IA los corrigió de forma iterativa.
- Revisión final: se dedicaron 20 minutos a verificar la lógica y compararla con la versión original.
El código Rust resultante resultó sorprendentemente legible. El tipado estricto creó un ciclo de retroalimentación muy ajustado: los errores precisos del compilador actuaron como una revisión de código automatizada para la IA. No fue necesario depurar manualmente ni contar con un conocimiento profundo de Rust.
Distribución de binarios
Los binarios de Rust son específicos de cada plataforma, lo que hace que almacenarlos en Git sea ineficiente. La solución replica el enfoque de esbuild: paquetes npm que agrupan binarios precompilados para cada plataforma. Al ejecutar npm install, se descarga el binario correcto sin exponer el código fuente.
Pruebas de rendimiento
| Máquina | Node.js 18 | Rust | Aceleración |
|---------------------|------------|----------|-----------|
| i5-1035G1, 8 GB RAM | ~8 s | 1-1.5 s | 5-7x |
| MacBook M4 | ~2 s | ~0.3 s | ~6x |
Estos resultados son típicos para operaciones de E/S de archivos combinadas con agregación intensiva en CPU. Similar a herramientas como ccusage, que pueden registrar mejoras de hasta 1000x en operaciones concretas.
Limitaciones y consideraciones
Adecuación de la tarea:
- Llamadas a red o bases de datos: no hay mejora de rendimiento (Rust no acelera los tiempos de espera de E/S).
- Scripts de menos de 1 s: no vale la pena el esfuerzo.
- Siempre perfila primero: usa
node --profotime.
Restricciones de la generación con IA:
- Solo para scripts sencillos. Arquitecturas complejas (traits, async) quedan fuera de alcance.
- El código mantenido por IA acumula deuda técnica.
- Los equipos sin acceso a IA tendrán dificultades para comprender o modificar el código.
Conclusiones clave
- Rust + IA ofrece una aceleración de 5 a 10 veces en tareas de CLI con recorrido de archivos y carga de CPU.
- El compilador de Rust automatiza la depuración del código generado por IA.
- Distribuir mediante npm con binarios específicos por plataforma es un enfoque práctico.
- Perfila antes de migrar; esto solo tiene sentido para scripts sencillos y aislados.
- Advertencia sobre deuda técnica: la dependencia excesiva de la IA para refactorizaciones futuras.
Este enfoque escala perfectamente a utilidades similares donde Node.js encuentra cuellos de botella en E/S o CPU.
— Editorial Team
Aún no hay comentarios.