¿Por qué usar el lenguaje de programación Go para compilar TypeScript en lugar del compilador actual?

¿Es Go un lenguaje de programación funcional o simplemente un cambio estratégico? Descubre por qué Microsoft ha decidido migrar a Go.

Índice

El equipo de TypeScript ha pasado años optimizando su compilador, pero a medida que los proyectos aumentan en complejidad, las limitaciones de tiempo de ejecución de JavaScript se han vuelto cada vez más evidentes. Problemas de falta de memoria, compilaciones en lotes lentas y una compatibilidad limitada con la concurrencia han impulsado la necesidad de un enfoque más eficiente. ¿La solución? Migrar a Go, un lenguaje diseñado para el rendimiento, el paralelismo y la escalabilidad, con el objetivo de mejorar el proceso de compilación de TypeScript.

Pero, ¿qué significa realmente este cambio y qué implicaciones tiene? Eso es precisamente lo que exploraremos en Unimedia, donde hemos estado ayudando a nuestros clientes a mantenerse a la vanguardia en todas las transiciones de lenguajes de programación.

Hoy analizamos las razones detrás del cambio de Microsoft de TypeScript a Go, su impacto en los desarrolladores, cómo podría transformar el panorama del desarrollo de software y respondemos a la pregunta: “¿Go es un lenguaje de programación funcional?”.

¿Por qué migrar a Go?

La principal motivación detrás de esta transición es mejorar el rendimiento y la escalabilidad del compilador de TypeScript. El compilador actual, basado en JavaScript, aunque funcional, enfrenta dificultades en proyectos a gran escala debido a limitaciones de memoria y velocidad de ejecución. Go ofrece un proceso de compilación más eficiente, permitiendo que TypeScript se beneficie de un compilador más rápido y confiable.

¿Por qué una portabilidad en lugar de una reescritura? ¿Cuál es la diferencia?

El equipo de TypeScript decidió portar el compilador existente en lugar de reescribirlo desde cero. Este enfoque garantiza la continuidad, mantiene la compatibilidad con los proyectos actuales y acelera la transición sin afectar el ecosistema.

Reescribir el compilador podría introducir inconsistencias significativas y requerir que los desarrolladores reaprendan aspectos críticos del mismo. En cambio, una portabilidad directa preserva la arquitectura familiar mientras aprovecha la eficiencia de Go.

Rendimiento y eficiencia

JavaScript, el lenguaje original del compilador de TypeScript, está optimizado para interfaces de usuario y navegadores, en lugar de cargas de trabajo intensivas en computación. Con el tiempo, esto ha generado desafíos como un alto consumo de memoria y velocidades de compilación más lentas. Por eso, migrar a Go es una forma de abordar estos problemas, ya que ofrece beneficios de rendimiento nativo, una mejor gestión de memoria y un manejo más eficiente de la concurrencia.

Uno de los principales inconvenientes del compilador basado en JavaScript es su dependencia de la compilación Just-In-Time (JIT). JIT introduce una sobrecarga que afecta los tiempos de inicio y el rendimiento en tiempo de ejecución. Como Go se compila por adelantado (Ahead-of-Time, AOT), elimina este cuello de botella, permitiendo que el compilador de TypeScript se inicie y ejecute mucho más rápido.

Para los desarrolladores que se preguntan por qué usar Go para esta transición, la respuesta está en su capacidad para manejar tareas concurrentes de manera eficiente sin sacrificar la simplicidad. A diferencia de otros lenguajes que requieren técnicas complejas de gestión de memoria, Go automatiza estos procesos, haciendo que el desarrollo sea más ágil y confiable.

Compatibilidad y adopción incremental

Una reescritura completa podría introducir cambios disruptivos e incompatibilidades. Al portar el compilador de TypeScript a Go, el equipo se asegura de que los proyectos existentes sigan funcionando con modificaciones mínimas. La adopción incremental es parte de la estrategia, permitiendo que los desarrolladores migren a su propio ritmo, mientras continúan teniendo soporte para TypeScript 6.x.

Otro gran beneficio de una portabilidad es que todas las funcionalidades esenciales permanecen intactas. El comportamiento del sistema de verificación de tipos de TypeScript, los mecanismos de inferencia y la generación de errores será replicado en el compilador basado en Go. Esto significa que los desarrolladores no tendrán que cambiar la forma en que escriben o depuran código TypeScript—solo la infraestructura subyacente que procesa el código será diferente.

¿Es Go un lenguaje de programación funcional? Código abierto y apoyo de la comunidad

El proyecto del compilador basado en Go, con el nombre en clave “Corsa”, permanece como código abierto y sigue el mismo modelo de licencia que el compilador original de TypeScript. Los desarrolladores pueden contribuir, revisar código y adaptar el nuevo compilador a sus necesidades específicas**. Al igual que en versiones anteriores, el proyecto estará alojado en GitHub, fomentando la colaboración y la transparencia.

El equipo de TypeScript ha enfatizado que, si bien Go ofrece beneficios significativos, no pretende cambiar fundamentalmente la experiencia del desarrollador. En su lugar, está diseñado para mejorar el rendimiento mientras mantiene las sólidas características en las que confían los usuarios de TypeScript.

Evaluación de otros lenguajes

Antes de seleccionar Go, el equipo de TypeScript consideró alternativas como Rust, C y C++. Si bien estos lenguajes ofrecen alto rendimiento, Go fue elegido por su equilibrio entre velocidad, gestión de memoria, soporte para concurrencia y compatibilidad multiplataforma.

  • C y C++ proporcionan un control de bajo nivel, pero introducen una gestión de memoria compleja, lo que dificulta su mantenimiento.
  • Rust garantiza seguridad de memoria sin un recolector de basura, pero sus estrictas reglas de préstamo y propiedad lo hacen menos flexible para ciertos flujos de trabajo.
  • Go ofrece gestión automática de memoria, primitivas de concurrencia y compatibilidad multiplataforma, lo que lo convierte en la opción ideal.

Nuevamente, para quienes preguntan: ¿Es Go un lenguaje de programación funcional? La respuesta es no, en un sentido estricto, ya que sigue un enfoque imperativo. Sin embargo, admite funciones de orden superior, closures e inmutabilidad, características comunes en la programación funcional.

Lanzamientos actuales y futuros

Veamos qué novedades traen las versiones más recientes y las próximas actualizaciones.

TypeScript 5.8 y 5.9

Las últimas versiones de TypeScript continúan mejorando el compilador basado en JavaScript. TypeScript 5.8 introduce mejoras en el rendimiento, mientras que TypeScript 5.9 prepara el ecosistema para los próximos cambios, incluyendo la transición al compilador basado en Go.

TypeScript 6.0 y la transición nativa

TypeScript 6.0 introducirá funciones obsoletas y cambios disruptivos, sentando las bases para una migración más fluida a TypeScript 7.0. Esta versión se centrará en mantener la compatibilidad mientras se prepara el terreno para la transición nativa.

Los desarrolladores que usen TypeScript 6 serán alentados a comenzar a probar el nuevo compilador basado en Go de manera anticipada, permitiéndoles evaluar las mejoras de rendimiento y reportar cualquier inconsistencia antes del lanzamiento oficial de TypeScript 7.0.

TypeScript 7.0: el compilador basado en Go

El compilador basado en Go se lanzará como TypeScript 7.0 una vez que logre paridad de características con la versión basada en JavaScript. Esta transición representa un cambio significativo en el rendimiento y la escalabilidad, beneficiando a aplicaciones empresariales y entornos de desarrollo a gran escala.

Los benchmarks de pruebas preliminares indican que compilar un proyecto de TypeScript con 1.5 millones de líneas de código usando el compilador basado en Go toma solo cinco segundos, más de 10 veces más rápido que la versión basada en JavaScript. Esto significa ciclos de retroalimentación más rápidos, implementaciones más ágiles y una mayor productividad para los desarrolladores.

Convenciones de nombres y nombres en clave

  • TypeScript 6.x: Compilador basado en JavaScript, mantenido junto con la versión nativa.
  • TypeScript 7.0: Compilador nativo basado en Go.
  • Nombre en clave “Strada”: Hace referencia al compilador original de TypeScript basado en JavaScript.
  • Nombre en clave “Corsa”: Representa el esfuerzo de portabilidad hacia la nueva versión nativa.

Coexistencia y plan de soporte a largo plazo

Tanto TypeScript 6 (JavaScript) como TypeScript 7 (Go) coexistirán durante un tiempo para permitir que los desarrolladores realicen la transición a su propio ritmo. Las empresas que dependen del compilador basado en JavaScript podrán seguir utilizando TypeScript 6 mientras evalúan los beneficios de TypeScript 7.

El objetivo a largo plazo es mantener la alineación entre ambas versiones, garantizando que los desarrolladores puedan elegir según los requisitos de su proyecto. Ya sea que prioricen estabilidad o rendimiento, podrán seleccionar la versión de compilador más adecuada sin interrumpir sus flujos de trabajo.

Para aquellos que aún se preguntan por qué usar Go para esta transición, la respuesta radica en su capacidad de escalar eficientemente mientras simplifica el mantenimiento del código. El enfoque de Go en concurrencia y gestión de memoria garantiza que supere a JavaScript en aplicaciones a gran escala.

Impulsando el futuro del desarrollo de software

El cambio a Go representa una nueva era para TypeScript, abordando limitaciones de rendimiento de larga data sin comprometer la compatibilidad. A medida que se acerca el lanzamiento de TypeScript 7.0, los desarrolladores deben prepararse para una transición que promete mejoras significativas en velocidad, una gestión de memoria más eficiente y un soporte mejorado para la concurrencia.

En este punto, esperamos haber respondido la pregunta “¿Es Go un lenguaje de programación funcional?”. Al explorar este tema, queda claro que adaptarse a nuevas tecnologías es clave para mantenerse competitivo.

En Unimedia, estamos comprometidos a ayudar a tu empresa a navegar estos cambios tecnológicos con servicios expertos de consultoría y desarrollo. Contáctanos hoy para descubrir cómo podemos mejorar tus proyectos de software y garantizar una transición fluida a la próxima generación de compilación de TypeScript.

Recuerda que en Unimedia somos expertos en tecnologías emergentes, así que no dudes en ponerte en contacto con nosotros si necesitas asesoramiento o servicios. Estaremos encantados de ayudarte.

Unimedia Technology

Su socio de desarrollo de software

Somos una consultora tecnológica de vanguardia especializada en arquitectura y desarrollo de software a medida.

Nuestros servicios

Suscríbase a nuestras actualizaciones

Mantente al día, informado y ¡demos forma juntos al futuro de la tecnología!

Lecturas relacionadas

Profundice con estos artículos

Descubra más opiniones expertas y análisis en profundidad de Unimedia en el ámbito del desarrollo de software y la tecnología.

Let’s make your vision a reality!

Simply fill out this form to begin your journey towards innovation and efficiency.

Hagamos realidad tu visión.

Sólo tienes que rellenar este formulario para iniciar tu viaje hacia la innovación y la eficiencia.