Microsoft reescribe el compilador de TypeScript en Go

Anders Hejlsberg, el arquitecto jefe del lenguaje TypeScript, que creó los lenguajes C#, Delphi y Turbo Pascal, presentó un proyecto para crear un nuevo compilador para TypeScript: typescript-go (tsgo), desarrollado en el lenguaje Go. Al igual que el antiguo compilador, el nuevo proyecto se distribuye bajo la licencia Apache 2.0.

El compilador TypeScript original está escrito en TypeScript y traducido a JavaScript, lo que crea problemas de escala cuando se utiliza en proyectos muy grandes. Los desarrolladores tienen que soportar largas demoras al cargar y verificar código en los IDE y sacrificar la experiencia del desarrollador para reducir la latencia al deshabilitar las capacidades de verificación de código en los editores. También existe una creciente necesidad en el ecosistema de herramientas de línea de comandos que permitan crear código rápidamente para probar su funcionalidad.

Se espera que la creación de un compilador nativo y herramientas para TypeScript aumente significativamente la velocidad de compilación, reduzca el consumo de memoria y reduzca el tiempo de inicio de los editores de código. El alto rendimiento del kit de herramientas hará más conveniente el proceso de desarrollo en editores de código modernos, permitirá una rápida verificación del código de todo el proyecto y posibilitará la implementación de técnicas de refactorización y análisis de código más avanzadas, cuya inclusión anteriormente era demasiado costosa en términos de consumo de recursos.

Según los desarrolladores de TypeScript, el nuevo kit de herramientas reducirá el tiempo de compilación en un orden de magnitud. En su forma actual, el nuevo compilador tsc puede procesar la base de código de un proyecto de VS Code en 7.5 segundos, mientras que el compilador anterior tardaba 77.8 segundos en hacer lo mismo. En el caso del código base de Playwright, el tiempo de carga se redujo de 11.1 a 1.1 segundos, TypeORM de 17.5 a 1.3 segundos, date-fns de 6.5 a 0.7 segundos, tRPC de 5.5 a 0.6 segundos y rxjs de 1.1 a 0.1 segundos.

El nuevo compilador ha estado en desarrollo desde octubre de 2024 por un equipo de 9 empleados de Microsoft. En esta etapa ya se encuentra disponible un prototipo funcional para realizar pruebas. Está previsto lanzar a mediados de año una vista previa del kit de herramientas de línea de comandos, con una nueva implementación de tsc que admite la verificación de tipos. La primera versión totalmente funcional, capaz de construir proyectos y proporcionar servicios LSP para entornos de desarrollo, se lanzará a finales de año.

La rama TypeScript 6.x continuará entregando el compilador antiguo e incluirá algunos cambios para preparar la migración a la nueva implementación. La primera versión que se migrará a la nueva cadena de herramientas será TypeScript 7. Durante algún tiempo, las bases de código TypeScript 6.x y TypeScript 7.x se mantendrán y coexistirán en paralelo hasta que la rama TypeScript 7 alcance un estado maduro listo para reemplazar por completo la antigua cadena de herramientas.

Antes de comenzar a trabajar en el proyecto, los desarrolladores exploraron la posibilidad de utilizar diferentes lenguajes de programación y experimentaron con prototipos en diferentes lenguajes. Como resultado, se eligió el lenguaje Go para crear un nuevo compilador, como la mejor opción para realizar el trabajo de reescritura de la base de código del antiguo compilador. En comparación con lenguajes como Rust, Go está más cerca de TypeScript en semántica y estructura de código, lo que permite conservar los patrones existentes al portar. El uso de Go facilita la migración de cambios entre bases de código y reduce la laboriosa tarea de mantener versiones antiguas y nuevas en paralelo.

El lenguaje Go ofrece un buen rendimiento, está desarrollado teniendo en cuenta la programación multiproceso y el funcionamiento eficiente en sistemas multinúcleo, y tiene protección incorporada contra problemas al trabajar con la memoria. El precio de la seguridad de la memoria es que el recolector de basura puede introducir retrasos durante la ejecución, pero al compilador no le importan esos retrasos.

Otros lenguajes como Rust también se consideraron como una opción, pero son conceptualmente demasiado diferentes de TypeScript y su uso habría resultado en portar el compilador desde cero, dificultando lograr una compatibilidad total con el compilador antiguo, resolviendo problemas ya resueltos en la antigua base de código y requiriendo significativamente más tiempo y recursos.

El lenguaje TypeScript amplía las capacidades de JavaScript y al mismo tiempo mantiene una compatibilidad total con versiones anteriores, lo que facilita la migración de aplicaciones existentes a TypeScript. La aplicación TypeScript resultante se compila en JavaScript simple, que puede ejecutarse en cualquier navegador web moderno o utilizarse con plataformas Node.js, Bun y Deno. TypeScript se diferencia de JavaScript en que proporciona herramientas para definir tipos explícitamente, así como soporte para el uso de clases y módulos completos. La tipificación estática permite evitar muchos errores durante el proceso de desarrollo, posibilita el uso de técnicas de optimización adicionales, simplifica la depuración, hace que el código sea más legible y más fácil de refinar y mantener.

Fuente: opennet.ru

Añadir un comentario