Por alguna razón el tema de los intérpretes y compiladores me llama mucho la atención. Me sorprende, por ejemplo, saber que algunos compiladores de populares lenguajes se escribieron en esos lenguajes. ¿Cómo es posible esto? La única explicación razonable es que se escribe en código de máquina la parte mínima del lenguaje objetivo y entonces con ese núcleo, se empiezan a crear rutinas para extenderlo. En sentido estricto uno no puede compilar un lenguaje escrito en ese mismo lenguaje (pues no existe compilador para compilar, pues), pero con este truco, en muchos sentidos es cierta la posibilidad de escribir un compilador de un lenguaje con el mismo lenguaje a compilar.

De hecho, es incluso ahora -que hay tantas herramientas de programación- el poder escribir un lenguaje utilizando otro. Uno de los lenguajes más interesantes es Forth, el cual permite al programador manejar directamente el stack de la máquina. En general, en los lenguajes tradicionales, el stack es propiedad del compilador, por decirlo de alguna manera, y el usuario no puede meterse a modificar éste jamás. Forth trabaja la consigna de “palabras de un diccionario”, que son como se llaman las rutinas en ese lenguaje. Estas rutinas pueden tener acceso al stack y poner datos o quitarlos, usando Push y Pop, por ejemplo, de acuerdo a la manera en como funciona un stack (o pila), es decir: “el último dato que entró es el primero en salir”.

Por ello, el saber de wForth, resultó interesante desde el principio. Está escrito en Javascript y de acuerdo al autor del proyecto, es una versión simplificada de Forth, pues no contiene toda la funcionalidad del Forth ANSI. La meta era proveer una plataforma básica desde la web para que las personas pudiesen experimentar con lo que puede hacer Forth. Al mismo tiempo, se buscaba que fuera lo suficientemente flexible para permitir a los programadores a escribir sus propios diccionarios en Javascript Forth para así extender y mejorar el sistema.

wForth soporta entonces:

  1. Creación de nuevas palabras en Forth
  2. Operadores estándar matemáticos, pero sólo de tipo entero
  3. Manipulación de los parámetros del stack
  4. Loops infinitos
  5. Ciclos do
  6. Paso de datos desde o hacia el stack de parámetros al stack de regreso
  7. Condicionales (if.the.else)

Si tiene interés en estos temas, será bueno que le eche un vistazo. Es interesante este tipo de trabajos, pues independientemente que pudiesen popularizarse, se aprende mucho de ver cómo se programan los intérpretes.

Referencias:

wForth