Anders Hejlsberg es el creador de la primera versión de Turbo Pascal, escrita hace ya más de 30 años y que revolucionó de alguna manera las ideas alrededor de la construcción de los compiladores. De hecho, Hejlsberg dice que la teoría sobre cómo escribir un compilador es simplemente obsoleta. Lo que dice este importante programador -e una muy interesante entrevista al respecto- puede serle muy útil si se dedica a escribir intérpretes o compiladores.
Hejlsberg aprendió de la manera clásica la manera en como debe escribirse un compilador. Pero a diferencia de lo que se enseña en esos cursos, Hejlsberg decidió escribir su propio compilador y ahora piensa que lo que se enseña en las escuelas es -en el mejor de los casos- fuera de la realidad con lo que se ve en la práctica moderna. Dice que: «Hay una brecha enorme entre la manera en como se enseña sobre compiladores y la forma en que se implementan hoy en día».
Curiosamente un libro ha sido de alguna forma el estándar de facto en la mayoría de los cursos de programación. Dicho libro es «Compilers: Principles, Techniques, and Tools», por Aho, Lam, Sethi y Ullman, ha delineado lo que debe saberse si se quiere escribir un compilador. La portada del libro presenta a un dragón, por lo que desde hace muchos años se le llama «el libro del dragón».
Anders Hejlsberg explica que el diseño monolítico del compilador tiene que hacerse a un lado y en cambio, debe plantearse un enfoque más flexible en donde se le permita al usuario a interactuar con el código aunque éste sea incorrecto. En lugar de que el compilador haga el trabajo de convertir los árboles sintácticos abstractos, y pase a binario, «muriendo» al primer error, ahora el compilador debe partirse en componentes que puedan ser usados para dar información vía el IDE, sobre los errores hallados, la forma en cómo completar el código, etcétera. El truco es pues mantener todo «con vida» y solamente construir los árboles sintácticos en el primer archivo en el que está trabajando el usuario.
Lo importante, fundamental diría Hejlsberg, en este enfoque es «la programación funcional». Para construir un sistema que pueda reusar los resultados se requiere de un enfoque funcional. El ejemplo más importante es, probablemente, el compilador Rosylin para C#, aunque el compilador de TypeScript también es mencionado por Hejlsberg. Otro compilador escrito por Hejlsberg es el que ya mencionamos, Turbo Pascal, que en 32K, sí, 32K, tenía compilador, editor y «linker», el cual generaba el resultado final, el programa ejecutable.
Hejlsberg dice, por ejemplo, que «Los compiladores son herramientas, no compiladores para generar código». Esto es evidentemente un paradigma diferente al clásico que se menciona en la teoría de compiladores. El enfoque estándar es mucho más «académico» y puro que las ideas que menciona Anders.
Sin duda el libro del dragón sigue siendo una importante base al estudio de cómo escribir compiladores, pero la mejor opción es sin duda: estudiar el libro y tratar de escribir un compilador pequeño, un «tiny compiler» y así tener un enfoque práctico del problema. Escribir un compilador no es una tarea fácil pero tampoco es algo que no se pueda hacer actualmente en unos seis meses, trabajando con cierta constancia. Hay además que sacar provecho de que hay muchos compiladores modernos con código fuente disponible, incluso lenguajes relativamente simples.
Referencias: