Forth: Un extraño lenguaje de programación. Aquí está la razón por la que usted puede amar de todos modos.

Divulgación: ¡Su apoyo ayuda a mantener el sitio en funcionamiento! Ganamos una cuota de referencia para algunos de los servicios que recomendamos en esta página. Más información

Forth es un lenguaje inusual. Es principalmente un intérprete, y tiene una interfaz de línea de comandos para que pueda ser utilizado en tiempo real. Pero también tiene la capacidad de tomar conjuntos de código y compilarlos. Así que es una especie de híbrido.

Debido a esto, Forth se utiliza comúnmente en el hardware que no tiene un sistema operativo tradicional. También se utiliza ampliamente para controlar la maquinaria, y se ha utilizado en la exploración espacial – incluso en Philae, la sonda que aterrizó en el cometa 67P/Churyumov-Gerasimenko.

Historia

Forth fue desarrollado por Charles Moore a partir de 1968 mientras realizaba la programación de gráficos en Mohasco Industries. Pero la primera implementación completa de Forth no llegó hasta 1971, cuando Moore creó un sistema autónomo para controlar el telescopio de 11 metros del Observatorio Radioastronómico Nacional de Estados Unidos (NRAO).

Las versiones anteriores de Forth habían llamado la atención de la comunidad de programadores. Pero en ese momento, se hizo muy popular en la comunidad astronómica. Así que en 1973, Moore fundó FORTH, Inc con sus colegas del NRAO Elizabeth Rather y Edward Conklin.

La compañía portó el programa a muchos sistemas diferentes. Y FORTH, Inc sigue siendo una empresa importante, proporcionando productos relacionados con Forth a la gente en los negocios, la academia y el gobierno.

Overview of Forth

Hay una serie de aspectos únicos en el lenguaje de programación Forth. Aquí discutiremos los más importantes.

Características de Forth

Forth ofrece muchas características únicas:

  • Programación interactiva
  • Creación de extensiones compiladas del lenguaje llamadas «palabras»
  • Pilas y Notación Polaca Inversa
  • Conexión directa entre el usuario y el hardware.

Notación Polaca Inversa

Forth realiza cálculos matemáticos utilizando la Notación Polaca Inversa. Esto depende del almacenamiento de números en una pila.

Considera el cálculo: 2 + 3. En Forth, esto se haría colocando el 2 en la pila, luego colocando el 3 en la pila, y luego sumándolos. Esto se vería algo así: 2 3 +.

Parece un poco extraño, pero es más fácil para el ordenador de analizar, porque esta es la forma en que los ordenadores realmente hacen los cálculos. Y una vez que te acostumbras como codificador, se vuelve bastante natural.

Además, no hay necesidad de paréntesis. Considere los dos ejemplos siguientes. (Nota: el carácter de la barra invertida inicia un comentario.)

2 3 + 5 * This is the same as (2 + 3) * 52 3 5 * + This is the same as 2 + 3 * 5

En el primer ejemplo, 2 es empujado en la pila seguido de 3. Así que 2 es el segundo en la pila y 3 es el primero. El operador «+» se aplica a los dos primeros elementos de la pila. Esto elimina estos dos elementos de la pila, y deja 5 (2 + 3) en la parte superior de la pila.

Entonces empujamos 5 en la pila. Eso pone un 5 en la primera y segunda posición de la pila. Por último, aplicamos el operador «*», con lo que colocamos 25 (5 * 5) en la parte superior de la pila.

En el segundo ejemplo, colocamos 2, 3 y 5 en la pila, de forma que el 5 está en la primera posición, el 3 en la segunda y el 2 en la tercera. A continuación, aplicamos el operador «*» sobre los dos primeros elementos de la pila (5 * 3) dando como resultado la colocación de 15 en la parte superior de la pila.

En este punto, 15 está en la primera posición y 2 en la segunda. Al aplicar el operador +, deja 17 (15 + 2) en la parte superior de la pila.

Programa de ejemplo

El siguiente programa es muy sencillo, pero demuestra mucho de lo que ocurre en el lenguaje.

 : OUTMATH Output a mathematical calculation ." We will now calculate: (2 + 3) * 5" CR 2 3 + 5 * ." This equals: " . CR ; OUTMATH

Lo primero que hace este programa es definir una función llamada OUTMATH. Las líneas que le siguen son parte de la función hasta la línea que termina con un punto y coma. La primera línea imprime el texto «Ahora calcularemos (2 + 3) * 5» y le sigue un retorno de carro.

La siguiente línea realiza el cálculo que comentamos anteriormente, dando como resultado que 25 se coloque en la parte superior de la pila. La última línea de la función da como resultado «Esto es igual a: » seguido del valor en la parte superior de la pila (representado por «.») y un retorno de carro.

Entonces simplemente ejecutamos la función. Así que cuando el programa se ejecuta, produce:

We will now calculate: (2 + 3) * 5This equals: 25

Aprendiendo Forth

Para la mayoría de los programadores, esta es una nueva forma de pensar. Pero es sorprendente lo natural que parece una vez que se empieza a trabajar con él. Aquí hay algunos tutoriales y libros que te harán trabajar con el lenguaje.

Tutoriales de Forth

Hay muchos tutoriales en línea. Debido a que Forth es extraño para los no programadores de Forth al mismo tiempo que es evidente para los usuarios actuales, muchos de los tutoriales pasan por alto cosas que pueden ser confusas para los principiantes. Estos tutoriales no tienen este problema.

  • Easy Forth: este breve Ebook es una excelente introducción. Su único inconveniente es que no tiene muchos ejemplos. Así que echa un vistazo a algunos de los ejemplos de abajo.
  • A Beginner’s Guide to Forth: esta es otra buena introducción. Es un poco más técnico, pero tiene más ejemplos.
  • And So Forth…: esta es una introducción muy completa a Forth – casi tan buena como un libro.

Libros de Forth

A menudo es más fácil aprender un nuevo lenguaje consiguiendo un libro que pueda llevarte paso a paso a través del proceso. Hay un montón de buenos libros sobre Forth – especialmente que se remontan a la década de 1980, cuando Forth realmente despegó. Aquí hay una colección de los mejores y más importantes.

  • Discover Forth: Learning and Programming the Forth Language (1982) de Thom Hogan: es una buena y concisa introducción al lenguaje Forth.
  • Starting Forth: An Introduction to the Forth Language and Operating System for Beginners and Professionals (1982) de Leo Brodie: es un clásico y una gran manera de aprender Forth. Está descatalogado pero no es difícil encontrar copias usadas por poco dinero. También está en línea de forma gratuita. Los programadores avanzados de Forth podrían querer consultar el más reciente de Brodie, Thinking Forth.
  • Programming a Problem Oriented Language: Forth – How the Internals Work (2014) de Charles Moore: se trata de una versión Kindle del libro que el creador de Forth escribió hace tiempo. Sigue proporcionando una visión aguda del lenguaje, pero no es la mejor opción para empezar.
  • Forth Programmer’s Handbook (2007) por Elizabeth Rather y Edward Conklin: este es un libro más avanzado sobre Forth por los otros dos pioneros de Forth. Véase también el libro de Rather, Forth Application Techniques (2006).

Otros recursos

  • Forth Interest Group: este sitio tiene todo tipo de información interesante, incluyendo documentos históricos antiguos. Por desgracia, también tiene muchos enlaces rotos. Pero aún así vale la pena echarle un vistazo.
  • Links to Forth Programs: esta es una gran colección de programas de ejemplo reales como una hoja de cálculo y un solucionador de rompecabezas Sudoku.
  • Forth Google Group: este es un grupo muy activo de usuarios de Forth que hacen y responden preguntas.
  • Forth Subreddit: no es un foro terriblemente activo, pero sigue habiendo gente con conocimientos en él.

Implementaciones de Forth

Ha habido un montón de implementaciones de Forth a lo largo de los años. El Grupo de Interés de Forth tiene una larga Página de Compiladores de Forth. Así que si por casualidad tienes un PDP-11 dando vueltas en tu garaje, ¡puedes conseguir un compilador de Forth para él! Pero para los sistemas más modernos, aquí están las opciones más comunes.

bigFORTH

A mediados de la década de 1980, Dietrich Weineck, Georg Rehfeld y Klaus Schleisiek desarrollaron volksFORTH para máquinas de 16 bits como el 8086 IBM PC y el 6502 de Apple, Commodore y Atari.

Con el tiempo, crearon una versión de 32 bits para el (bus de 16 bits) Atari ST. A pesar de que volksFORTH estaba progresando, el proyecto prácticamente murió (aunque más tarde se reinició).

Bernd Paysan estaba lo suficientemente interesado en esta versión de volksFORTH (llamada turboFORTH por entonces), sin embargo, que la convirtió en la base de bigFORTH.

Su primera versión fue publicada para el Atari ST en 1990. En 1995, bigFORTH había sido portado al 386, y al año siguiente estaba disponible en Windows NT, OS/2 y Linux.

Interfaz Gráfica

En ese momento, Paysan comenzó a trabajar en MINOS. (Técnicamente, es «MINOS», pero normalmente se le llama simplemente «MINOS»)

Es una interfaz gráfica para bigFORTH. Podría ser más fácil pensar en él como «Visual bigFORTH» como Visual Basic, porque eso es más o menos lo que es. Se creó primero para el sistema X-Windows. Pero pronto estuvo disponible para Windows también.

El desarrollo tanto de bigFORTH como de MINOS parece haberse detenido alrededor de 2010. Sin embargo, ambos están fácilmente disponibles y son bastante útiles (bigFORTH es compatible con ANSI). De hecho, MINOS es muy divertido para jugar.

Recursos de bigFORTH

Si quieres usar bigFORTH o incluso desarrollar para él, tendrás todas las herramientas que necesitas:

  • Código fuente: este es el código de la última versión oficial del 22 de marzo de 2010, la versión 2.4.
  • Paquete Debian: un paquete de fácil instalación para cualquier distribución de Linux basada en Debian (por ejemplo, Ubuntu, Mint). Se instala en /usr/local/bin, e incluye MINOS, aunque se llama xbigforth.
  • Ejecutable autoinstalable para Windows: lo mismo que el paquete Debian, pero para Windows. MINOS se llama incluso xbigforth.exe.
  • Documentación (PDF): este libro de casi 300 páginas actúa como tutorial y referencia, escrito por JL Bezemer. Gran parte de él es sobre el Forth genérico y es de donde se ha extraído «And So Forth…».
  • Página de Bernd Paysan: esta página tiene mucha información y ejemplos interesantes relacionados con Forth. Cabe destacar el lenguaje de marcado basado en Forth de Paysan.
  • Repositorio de bigFORTH: el destino definitivo para todas sus necesidades de bigFORTH.

Gforth

Gforth es la implementación GNU de Forth. Tiene un distinguido pedigrí.

El proyecto Gforth se inició en 1992 por el creador de bigFORTH Bernd Paysan y Anton Ertl, con importantes contribuciones de Jens Wilke.

Fue una combinación de bigFORTH y el mucho más antiguo fig-FORTH (ver más abajo). Pero su historia es retorcida, ya que bigFORTH vino de volksFORTH, que estaba basado en fig-FORTH.

Al ser un proyecto GNU, se ha trabajado mucho en él desde su inicio. Ahora es completamente compatible con ANSI y ha logrado todos sus objetivos originales. La versión más reciente es 0.7.3, con la última entrada (por Paysan) el 25 de febrero de 2013.

En términos de implementaciones libres de Forth, Gforth es la más utilizada. Parte de eso es sólo porque es parte del proyecto GNU y su disponibilidad. Pero también es porque es potente y rápido.

Recursos de Gforth

Gforth tiene todos los recursos que necesita para darle el uso que necesite:

  • Código fuente: esta página proporciona el código fuente de Gforth desde la versión 0.2.1 hasta la actual, 0.7.3.
  • Paquetes para Debian: hay varios paquetes disponibles para la distribución Debian de Linux. Tenga en cuenta que, dependiendo del paquete que elija, es posible que tenga que instalar primero uno o más paquetes.
  • Ejecutable de autoinstalación para Windows: se trata de una versión anterior (0.7.0) de Gforth, pero es una forma rápida de empezar.
  • Documentación (PDF): este libro de 250 páginas se aplica a la versión 0.7.0 de Gforth. También está disponible en formato HTML.
  • Repositorio de Gforth: prácticamente todo lo relacionado con Gforth se puede encontrar aquí.

pbForth

pbForth ya no parece estar soportado, pero es una implementación de Forth tan interesante que merece la pena echarle un vistazo.

Como hemos comentado, Forth siempre ha estado asociado al control de hardware. Así que no fue en absoluto sorprendente que se creara una implementación de Forth para el kit de robótica LEGO MINDSTORMS – específicamente, el RCX de 16 bits que salió en 1998.

Parece que nunca se actualizó para trabajar con la segunda generación, la serie NXT, que salió en 2006, ni la actual MV3, que salió en 2013.

Aunque no hay un sitio oficial para pbForth, todavía es posible aprender sobre él e incluso utilizarlo. Sin embargo, puede haber una curva de aprendizaje empinada, porque no hay tanta información. Y claramente, necesitarías un LEGO MINDSTORMS RCX (no son tan difíciles de encontrar usados).

El NXT utiliza un procesador completamente diferente (y de 32 bits), por lo que pbForth ciertamente no funcionaría con él. Aun así, podría ser divertido. Y si te animas, es posible que puedas portarlo a los kits de segunda y tercera generación.

Recursos de pbForth

La información disponible en la Internet normal es generalmente escueta y siempre enlaza con la página de inicio de pbForth, que no ha estado en funcionamiento desde al menos 2010. Sólo gracias al Archivo de Internet está disponible gran parte de ella.

  • Historia de la Robótica de LEGO: aunque no trata sobre pbForth, proporciona una rápida visión general de los productos LEGO MINDSTORMS.
  • Introducción a pbForth (PDF): este tutorial de 30 páginas te permitirá iniciarte en el lenguaje.
  • Código fuente de pbForth: ten en cuenta que pbForth está escrito en lenguaje ensamblador y Tcl, por lo que necesitarás disponer de esas herramientas.
  • GUI de Windows: este archivo se ejecuta, aunque conseguir que haga algo puede ser más complicado. Si quieres pbForth para Linux o Mac, tendrás que usar el código fuente.
  • Página principal de phForth Circa 2009: esta página proporciona enlaces a bastante información interesante sobre pbForth, sobre todo una media docena de scripts de ejemplo.

Otras implementaciones

  • fig-FORTH: esta fue una de las primeras implementaciones de Forth, creada por el Forth Interest Group. Es una implementación de 16 bits. Está disponible para algunos maravillosos ordenadores antiguos como el Data General Eclipse y el Alpha Micro, así como para ordenadores basados en 8086 y 6502. El problema es que no hay archivos ejecutables, sólo código en lenguaje ensamblador. Y en la mayoría de los casos, sólo archivos PDF de mapa de bits del código. El código real parece estar disponible sólo para 8088/8086, PDP-11 y 6800. (El 6800 es un procesador de 8 bits, por lo que aparentemente, había una versión de 8 bits de fig-FORTH.)
  • SP-Forth: se trata de una implementación de Forth libre para Windows y Linux.
  • 4tH: se trata de una implementación de Forth fácil de usar que está disponible para una amplia gama de hardware (incluyendo la Raspberry Pi), e incluye una buena documentación.
  • SwiftForth™: este es el compilador de Forth de la compañía original que trajo Forth al mundo. Es un producto comercial, pero tiene un precio razonable.

Resumen

Deja una respuesta

Tu dirección de correo electrónico no será publicada.