Dev & Código yesterdayAñadir a favoritos

Andrew Healey inyecta la palabra clave `defer` —pilar del código Go— directamente en el compilador TypeScript, ahora escrito en Go. Un caso de estudio para entender parser, checker y emitter.
Desde que Microsoft anunció la reescritura del compilador TypeScript en Go (el proyecto «TypeScript Native», que apunta a ~10× de velocidad en comparación con el histórico tsc en TypeScript), el código fuente del compilador se ha convertido en un muy bonito terreno de juego. Andrew Healey publica en su blog un artículo muy pedagógico donde añade, en su fork, la palabra clave defer — uno de los pilares ergonómicos del lenguaje Go — a TypeScript.
Recordatorio para quienes vienen principalmente de la pila JS: en Go, defer programa una función para que se ejecute en el momento en que la función envolvente retorna. Es el equivalente a un try { … } finally { … } sin el boilerplate, con la llamada de limpieza escrita justo al lado de la llamada que la hizo necesaria:
f, _ := os.Open("file.txt")
defer f.Close() // se ejecutará al salir de la función
// … resto del código El patrón se usa masivamente para liberar recursos (archivos, mutex, conexiones) sin perderse en anidamientos.
El interés del artículo no es «el defer de Go estará en TypeScript mañana» (spoiler: no). Se trata de seguir, paso a paso, lo que hace un compilador moderno cuando se añade una palabra clave. Healey pasa por:
defer como un token dedicado en lugar de un identificador ordinario.defer tiene permitido aparecer en la gramática (a nivel de statement, sí; en expresión, no).defer a JavaScript, lo que, en su caso, equivale a envolver la función envolvente en un try/finally y apilar las devoluciones de llamada diferidas en un array que se ejecuta al hacer unwind.Esta última etapa es la que más enseña: defer en Go es un verdadero mecanismo del lenguaje (implementado por el runtime), mientras que en JS no hay nada comparable — hay que simularlo mediante un desugaring, con los compromisos que eso implica (rendimiento, excepciones, await, etc.).
Al ser el compilador TypeScript en Go de código abierto, este tipo de ejercicios es exactamente lo que hay que leer para:
Observamos de paso que el parche de Healey se propone como demo, no como PR upstream — el TC39 nunca adoptó defer para JavaScript estándar, y Microsoft no impulsa extensiones propietarias de este tipo en TypeScript.
Para recordar: la verdadera ganancia de la reescritura en Go de tsc no es solo la velocidad — también es un compilador cuyo código es por fin accesible para un lector que no es experto en TypeScript avanzado. Este tipo de parches pedagógicos se multiplicarán, y es una escuela excelente.
Artículo producido por inteligencia artificial, revisado bajo control editorial humano.