El Forth fue desarrollado en 1970 por un inquieto programador de mainframes. Charles Moore que contaba con una gran experiencia en la programación de grandes ordenadores. Pronto se dio cuenta de que las soluciones a los problemas que se le planteaban casi nunca eran compatibles con los medios de que disponía.
Durante sus dilatados trabajos en varios sistemas de distíntas característícas, fue perfilando lo que sería el nuevo lenguaje. Experimentó con pilas, notación polaca (coloca los operadores a la izquierda de sus operandos ) y otra serie de elementos que más tarde combinaría dando a luz el lenguaje Forth.
Charles Moore |
Esto ocurría cuando Moore comenzó a trabajar en un observatorio astronómico y fue aquí donde el lenguaje demostró su eficacia. Fue utilizado para el control del radiotelescopio del observatorio con excelentes resultados. Allí conocería al que más tarde sería su socio en la formación de la compañía Forth Inc, de la que Moore saldría no mucho tiempo después.
En un principio el Forth estuvo destinado al desarrollo de programas de control en tiempo real, imprescindible para el funcionamiento como tal del telescopio, pero se aplicó con éxito en desarrollos de todo tipo y gestión de gráficos.
Si bien en Europa su éxito y conocimiento fué nulo, en Estados Unidos fué más reconocido. Un ejemplo de ello es que a mediados de los años 70 un grupo de usuarios de Forth constituyeron el Forth Standar Team, encaminado a dictar una serie de normas que contribuyesen a estandarizar el lenguaje. Así, existen varias revisiones que corresponden a los años 1977, 1978, 1979, 1980 y, la última, que es de 1983.
Otro grupo de usuarios forma el grupo FIG (Forth Interesting Group) que, ante la pasividad de Forth Inc para promocionar el lenguaje, decidieron aceptar ellos el reto. Así, el grupo formado por cinco programadores experimentados, desarrollará una versión denominada FIG-Forth, que podía correr en seis ordenadores distintos. En 1979 presentaron esta versión en San Francisco, con motivo de la feria Informática de la Costa Oeste. En ella explicaron sus características y vendieron los listados fuentes y los manuales de instalación al irrisorio precio de 20 dólares. De esta forma consiguieron que gran número de personas conociera el lenguaje y comprobase sus posibilidades, aumentando su popularidad.
Un desconocido
Apesar de su probada eficacia, el Forth es el gran desconocido de los lenguajes de programación. Varias son las razones que han contribuido a este hecho.
Si se estudia la trayectoria desde su nacimiento, se puede apreciar que, al contrario de otros lenguajes, no ha sido ni desarrollado ni promocionado por ninguna gran firma de ordenadores y ni siquiera ha sido reconocido por organismos oficiales. Al contrario que el ADA, que fue desarrollado bajo los auspicios del Pentágono.
Otra de las posibles causas de este «olvido» es que el lenguaje, si bien puede ser usado por cualquier persona sin dificultad, está más bien dirigido a experimentados programadores que necesiten de una herramienta potente. De esta manera su llegada al gran público se ve más restringida.
Características
Forth es un lenguaje que se sitúa en ese nivel intermedio que delimita las fronteras entre los lenguajes de alto nivel y los lenguajes máquina. De ello se derivan dos de sus principales características, la excasa ocupación de memoria y la rapidez. Un intérprete Forth viene a ocupar unos 8 Kbytes de memoria RAM, lo que determina su simplicidad y facilita su implementación en microordenadores que cuenten con escasez de memoria, por ejemplo, los domésticos. En cuanto a la rapidez, baste decir que cualquier realización sobre este lenguaje se comporta diez veces más rápida que otra realizada, por ejemplo, en Basic.
Forth cuenta con tres elementos fundamentales: verbos, nombres y definición de palabras. Los verbos provocan la ejecución de determinadas acciones, los nombres facilitan la dirección de rutinas objeto y, la definición de palabras, crea nuevos verbos, nombres o palabras que pueden ser usados por el programador como si fueran originales del lenguaje.
Este último elemento es el que le proporciona más potencia. A través de él, el programador puede añadir a su versión de Forth todos aquellos elementos específicos de su problema o aquellos que considere que pueden serle útiles en un momento determinado. Es decir, el lenguaje se comporta como un entorno abierto que permite configurarlo según las necesidades de cada uno.
Forth es un lenguaje altamente estructurado, lo que se demuestra por el hecho de que las palabras deben ser definidas antes de su utilización o que el programador pueda operar con procedimientos independientes, lo que le provee de una mayor rapidez y fiabilidad.
Dentro del lenguaje se pueden definir cinco partes fundamentales: el diccionario, los stacks, el intérprete, el ensamblador y el almacenamiento virtual.
Diccionario
Todos los elementos de Forth están organizados dentro de un diccionario. En él se encuentran los verbos, nombres y palabras definidas, que pueden ser de varios tipos. Pero, como ya se ha comentado, el lenguaje es abierto y el diccionario puede ser ampliado con nuevas palabras. La definición es bastante sencilla, por ejemplo para determinar el cubo de un número se puede defmir la palabra CUBO.
:CUBO
DUP DUP
* - *;
Los dos puntos le indican que lo que viene a continuación es una nueva palabra que deberá ser incluida en el diccionario. Lo siguiente debe ser un conjunto de palabras ya definidas en el diccionario, en esta caso DUP (duplicar) y * (multiplicar). La definición debe termmar con un punto y coma. Así, la palabra CUBO pasa a formar parte del diccionario y puede ser utilizada para realizar operaciones o participar en otras definiciones, por ejemplo:
3 CUBO
Calcula el cubo de 3.
: PEPE
3 CUBO *;
Define una nueva palabra que permitirá multiplicar el cubo de un número por tres.
Pero el diccionario no contiene sólo palabras propiamente dichas, como puede ser DUP o CUBO, sino que también dispone de los símbolos aritméticos, *, +, -, =, /, y los lógicos como <, >, <=, >=. Por tanto, cualquier símbolo, palabra o procedimiento estará recogido en el diccionario.
Stack
Para la realización de cálculos, el Forth utiliza un método muy peculiar. Organiza los datos en pilas (stacks), utilizando el método LIFO (Last Input First Output -Ultima Entrada Primera Salida). De esta forma, si se desean multiplicar dos números, por ejemplo, 4 por 5 se escribirá así:
4 5 *
Entonces colocará el 4 en la primera posición de la pila, a continuación situará en esta posición el 5, pasando el 4 a la segunda, al encontrar el asterisco se da cuenta de que se trata de una palabra del diccionario y ejecutará el procedimiento correspondiente, es decir multiplicar. Así, cogerá el número que se encuentra en la parte superior de la pilta (Ultima entrada primera salida) y lo multiplicará por el que se encuentra en segundo lugar, colocando el resultado (20) en la parte más alta de la pila.
En el caso de utilizar más números, lejos de complicarse, se hace más sencillo y rápido. Por ejemplo, sumar tres números, seguiría el siguiente procedimiento:
2 3 + 4 +
Colocará el 2 en primer lugar, luego el 3 y el 2 pasa a la segunda posición, calcula el resultado de la suma (5) y la coloca en la parte más alta. A continuación recojerá el 4, situándolo en esta posición y pasando el resultado anterior a la segunda posición y sumará, obteniendo el total fmal (9) que, lógicamente, quedará en la posición superior de la pila.
Como se ha podido ver hasta aquí, la sintaxis utilizada para los cálculos es bastante extraña. La suma de dos números en cualquier lenguaje se realizará como 2 + 3, mientras que en Forth se hace 2 3 + . Esto se debe a que se utiliza la notación Polaca. Esta elección está fundamentada precisamente en la utilización de las pilas. En la lógica de las pilas se colocan primero los dos números y luego se realiza el cálculo conveniente. Si se utilizase la notación normal sería el lenguaje el que tendría que desmenuzar la expresión y colocar los datos en la pila. Al ser el programador el que lo hace se gana en velocidad y además se abre otra vía de flexibilidad al poder jugar con las pilas como más convenga.
El intérprete
El lenguaje Forth está definido como un lenguaje intérprete, pero con la característica de ser muchísimo más rápido que cualquier otro lenguaje de estas características. Esto se debe, de un lado, a la ya mencionada definición entre lenguaje máquina y lenguaje de alto nivel y, por otro, a la peculiar forma de interpretación.
El Forth utiliza para la interpretación dos niveles, un intérprete de palabra y un intérprete de direcciones. El primero se encarga de recoger las palabras que se introducen en el programa, ya sea desde la consola o desde un medio de almacenamiento externo, y realiza una búsqueda en el diccionario. Una vez hecho esto llama al intérprete de direcciones, el cual se encarga de ejecutar los procedimientos asociados a la palabra recogida. Por ejemplo, en el caso de CUBO el intérprete de palabras buscaría en el diccionario su existencia y mandaría al intérprete de direcciones buscar el procedimiento que corresponde, es decir DUP DUP *-*.
Ensamblador
El lenguaje provee de una potente herramienta que permite al programador definir palabras con un macroemsamblador residente. Para ello se utiliza la palabra CODE. A través de ella se consigue un absoluto y directo control de la CPU del sistema por lo que usado convenientemente, se pueden optimizar aún más los tiempos de ejecución, así como contar con un elemento de control de cualquier dispositivo del sistema.
Almacenamiento virtual
Para el almacenamiento en disco, Forth utiliza el método de almacenamiento virtual. Otros lenguajes almacenan los datos y programas en los lugares del disco que están libres y posteriormente para localizarlos, deben recorrer todo el disco hasta dar con ellos. Forth organiza el disco en una serie de bloques de 1 Kbyte. Estos bloques están contenidos en dos o más Buffer, de forma que cuando se hace referencia a un bloque el sistema accede directamente a la posición de disco en el que se encuentra, sin necesidad de tener que recorrerlo.
Por otro lado, existen diversos tipos de bloques según la información que contengan, así se disponen unos para datos, otros para programas, para el editor, etc. .Este acceso directo agiliza enormemente las operaciones de lectura y escritura, que por regla general son las operaciones más lentas de un programa. Además, se añade la característica de que las direcciones de los bloques suelen coincidir con la dirección correspondiente a su posición física dentro del disco.
Encontrar un sistema Forth que se ajustara a un equipo en concreto no suponía ningún problema. Se disponía de numerosas versiones para los más variados equipos. Desde el legendario Apple al IBM PC, pasando por cualquier doméstico.
Concretamente en nuestro país, existió un ordenador doméstico que lo incorporó de forma estándar en lugar del acostumbrado Basic. Se trata del Jupiter ACE de procedencia inglesa. El fabricante consideró que era más interesante icluir este lenguaje que cualquier otro debido a su potencia y facilidad de manejo, además al ocupar muy poca memoria se optimiza ésta y se abarata el sistema.
Enlaces de interés :
- Página oficial de Forth.-
- Intérprete Forth en Retrowiki
José Ignacio Salmerón con modificaciones y revisiones de Drachco.
Yo tengo un Fignition y se programa en Forth! Muy bueno el artículo.
ResponderEliminarhttp://sites.google.com/site/libby8dev/fignition
Hola.
ResponderEliminarInteresante aparatejo!!. Tengo pendiente el montaje de un clón del Jupiter Ace para poder programar y experimentar con el Forth. La verdad es que es un lenguaje pontente y con muchas posibilidades por descubrir.
Me da gusto que alguien mas entienda los alcances de un lenguaje verdaderamente potente, felicidades por el aporte y muchas gracias.
ResponderEliminarSaludos
Gracias por tus palabras. ;)
ResponderEliminara mi tambien me sirve falta mucho mas por investigar
ResponderEliminarunos para datos, otros para programas, para el editor, etc. .Este acceso directo agiliza enormemente las operaciones de lectura y escritura, que por regla general son las operaciones más lentas de un programa. Además, se añade la https://coaching-mastery.com/el-mejor-software-o-programa-de-contabilidad/
ResponderEliminar