Pascal es un lenguaje de programación -creado por Niklaus Wirth- y cuya función era la de enseñar la disciplina de programación. A partir de su libro: “Pascal User’s Manual and Report”, hubo mucha gente que escribió un intérprete o compilador del lenguaje tal y como Wirth lo había descrito. Con el nacimiento de la computadora personal, empezaron a salir herramientas de programación y una de las más populares fue Turbo Pascal, promovido por la empresa Borland, cuyo autor fue Anders Helsjberg, que ahora trabaja para Microsoft.
Turbo Pascal fue un caballito de batalla por muchos años y Borland fue creándose adeptos por lo poderoso de la herramienta, amén que cada nueva versión superaba francamente lo que la anterior hacía. Cuando la interfaz gráfica (Windows) se convirtió en el estándar, Turbo Pascal dio un giro y se convirtió en Delphi (1994), que añadió -aparte del manejo fácil de la interfaz gráfica- la capacidad y manipulación del paradigma de objetos. Delphi se convirtió en una gran herramienta y sin embargo, sufrió cambio de empresas una y otra vez hasta que Embarcadero tomó la herramienta y la versión de Delphi XE5 parece ser asombrosa (aunque no la tengo), pues dice poder crear apps para iOS y Androids, amén de código nativo para x86.
Todo esto viene a cuento porque ha aparecido una versión del primer compilador de Turbo Pascal escrito en Javascript. Quien realizó este trabajo incluyó el código p de la máquina virtual, el cual es compatible de manera binaria con los compiladores de Pascal de la UCSD, los cuales tenían una versión para la Apple II.
La implementación de Javascript -de Turbo Pascal 5.5- la cual puede hallarse en GitHub no está completa, pero si se ven las demostraciones, son impresionantes. Incluye la mayoría de lo que el lenguaje tenía e incluso su módulo de gráficas. El autor, Lawrence Kesteloot, solamente implementó lo suficiente del lenguaje y de la biblioteca estándar. Con ello pudo correr 5 programas originales de 1989.
El compilador tiene unas 6,000 líneas de Javascript. El Tubo Pascal original compilaba a código de máquina nativo. Otras implementaciones, como la de la Universidad de California en San Diego (UCSD) usaba una máquina virtual y compilaban a código p. La virtud de esto es que es más fácil portar el compilador a otras plataformas, pues “solamente” hay que escribir la máquina virtual, el intérprete de código p. Un problema con las máquinas virtuales es que siempre han tenido fama de ser lentas, pero es claro que en las computadoras actuales, el código p se ejecuta casi a velocidades parecidas al del código nativo, por lo menos desde el punto de vista de cualquier usuario final.
Así pues, Kesteloot decidió generar código p. Por supuesto que por ello se requiere una máquina virtual para ejecutar el programa “compilado”. Esto puede hallarse en el depósito GitHub. Hay unas 600 líneas de Javascript comentadas, por si le interesa entender qué hizo el autor del software. Se indica que es compatible de forma binaria con el compilador original de Pascal de la USCD (por ejemplo, el de Apple II), lo que significa que en principio podría correr programas heredados en USCD Pascal, Fortran y Basic. Vamos, que la máquina virtual por sí misma puede ser muy útil.
Referencias:
Turbo Pascal en Javascript (demostraciones)
GitHub Turbo Pascal