Activa las notificaciones para estar al tanto de lo más nuevo en tecnología.

tinybasic00Nunca he estado muy de acuerdo con que se enseñe BASIC en ninguna de sus modalidades. La razón principal es que el lenguaje per se no permite estructuras de datos más sofisticadas, amén deno poder  crear en el programador una abstracción de las instrucciones de manera que puedan pensar a un nivel más profundo. Por ejemplo, pensemos en la instrucción “FOR”. Esta finalmente se puede simular usando “IF”s y “GOTO”s. En última instancia el intérprete de BASIC hace precisamente esto en tiempo de ejecución, pero uno como programador ya no ve estos GOTOs. Igualmente, BASIC no tiene estructuras dinámicas, apuntadores, que permiten poder expresar mejor muchas ideas en programación. Y sí, ya sé que alguien me va a decir que Visual Basic tiene apuntadores y todas las estructuras de datos de los lenguajes modernos, y puede ser, nada más que Visual Basic es un monstruo al que le han pegado todo lo que el BASIC originalmente no tenía.

El punto es que por motivos realmente académicos, me he puesto a investigar en cómo escribir un intérprete, que resulta siempre más fácil que escribir un compilador. Digamos que en muchos sentidos, un intérprete solamente tiene que hacer la labor lexicográfica, la de entender que la instrucción es correcta sintácticamente y entonces ejecutarla, mientras que si pensamos en un compilador, hay que hacer todo esto y además, generar código de máquina que traduzca cada instrucción. La realidad es que no es nada fácil hacer un compilador. Recuerdo que me dijeron que el primer compilador de Fortran llevó un par de años horas/hombre. No sé si sea cierto, pero es claro que la historia atrás de este tipo de programas es muy interesante.

Regresando al tema, ¿qué tan difícil será escribir un intérprete? Se me ocurrió que debería empezar por ver los más elementales y hallé que Adam Dunkels escribió un pequeño intérprete de BASIC para su primera computadora (una ABC80). Dice el autor que en un par de horas tuvo una primera versión, mientras estaba en las sesiones de ACM/Usenix MobiSys del 2006. Su BASIC se denomina uBASIC y no es interactivo, es decir, se escribe el programa y se ejecuta. Puede manejar las siguientes instrucciones: if/then/else, for/next, let, goto, gosub, print, y desde luego, analizar las expresiones matemáticas. Soporta solamente variables del tipo entero y solamente éstas pueden tener un solo caracter para identificarlas, así, en principio solamente hay 26 variables (las letra del alfabeto). El autor ha hecho un API de su uBASIC con la intención de servir para quizás un pequeño lenguaje de scripts. La idea puede ser además útil para aplicaciones en donde hay severas limitaciones de memoria.

El autor ha puesto a disposición de la comunidad su código, y puede verse aquí . Sin duda que un lenguaje interpretado tan simple puede ser muy útil para entender qué pasos seguir para escribir intérpretes. Evidentemente BASIC está literalmente muerto, pero no por ello es totalmente inútil. Puede servir para enseñarnos aún algunas cosas.

Referencias:

uBASIC

Desde la Red…
Comentarios