Nociones básicas de Forth


Primer contacto

Historia
Preliminares
Características
Forth en la industria
Extensiones
Multitarea
Forth en hardware
Estándares

Primer contacto

Esta es una selección de conceptos tomados de la obra de Peter Knaggs, Forth: An Underview, en los que se glosan aspectos históricos y prácticos de este lenguaje de programación. Contiene algunos añadidos propios, así que no se debe tomar como una traducción literal.

Historia


Charles "Chuck" Moore, creador de Forth, explica así el origen de este nombre:

La primera vez que combiné las ideas que había desarrollado en una única entidad, yo trabajaba con un IBM 1130, un ordenador de "tercera generación". El resultado me pareció tan potente que lo consideré un "lenguaje de ordenador de cuarta generación". Quería llamarlo Fourth ("cuarto"), pero el 1130 sólo permitía identificadores de cinco caracteres. Así que Fourth pasó a llamarse Forth .

El lenguaje "Forth" fue desarrollado en los años sesenta, mientras Moore trabajaba como programador de ordenadores en el Stanford Linear Accelerator Center (Centro del Acelerador Lineal de Stanford), y más tarde como ingeniero independiente. La razón de desarrollar este nuevo lenguaje fue el deseo de superar la necesidad de que un ingeniero tuviera que aprender el uso de un gran número de herramientas (compiladores, enlazadores, ensambladores y directivas de lenguaje de muy alto nivel).

El primer programa llamado Forth fue escrito alrededor de 1970. La primera implementación completa fue usada en 1971 en un DEC PDP-11 del radiotelescopio de 11 metros del National Radio Astronomy Observatory's (Observatorio RadioAstronómico Nacional) en Arizona. Este sistema era el responsable de apuntar y guiar el telescopio, recolectar los datos y registrarlos sobre cinta magnética, soportando además un terminal gráfico interactivo donde los astrónomos podían analizar los datos previamente registrados. La naturaleza multitarea del sistema permitía que todas estas funciones se ejecutaran de forma concurrente, sin conflictos de reparto de tiempos u otras interferencias.

El sistema era tan útil que astrónomos de todo el mundo empezaron a solicitar copias. Su uso se extendió rápidamente y en 1976 Forth fue adoptado como un lenguaje estándar por la Unión Astronómica Internacional.

El éxito de esta aplicación posibilitó a Moore y Elizabeth ("Bess") Rather crear "FORTH, Inc." en 1973, para explorar los usos comerciales del lenguaje.

FORTH, Inc. desarrolló versiones multiusuario de Forth sobre minicomputadoras para diversos tipos de proyectos, desde bases de datos a aplicaciones científicas como procesamiento de imágenes.

Una versión fue desarrollada, en 1977, para los entonces recientemente introducidos microprocesadores de 8 bits, llamada "microFORTH". Esta fue complementada por su producto "miniFORTH" para miniordenadores. Después (en 1979) estos serían reemplazados por el producto "PolyForth", que se convertiría en uno de los sistemas Forth más vendidos del mercado.

"microFORTH" fue usado exitosamente en aplicaciones de microprocesadores embebidos en los Estados Unidos, Europa y Japón. El éxito de microFORTH llevó a la formación del European Forth Users Group (EFUG), y más tarde, en 1978, un grupo de aficionados a los ordenadores de California configuró el Forth Interest Group (FIG).

Los miembros de FIG obtuvieron un sistema Forth de un observatorio. A partir de él desarrollaron un modelo sencillo que implementaron en diversos sistemas y (con permiso de FORTH, Inc.) publicaron listados y discos a muy bajo precio (este modelo posteriormente empezó a conocerse como el "modelo FIG-Forth"), y con dicha acción se contribuyó a la rápida extensión del interés por Forth.

(arriba)
 
 

Preliminares


Forth es un lenguaje de programación inusual, que probablemente se ha usado en mayor variedad de proyectos que cualquier otro. Es la opción evidente cuando el proyecto resulta especialmente exigente en términos de plazos breves de desarrollo, velocidad de ejecución, código compacto o cualquier combinación de las anteriores.

También es conocido como “...uno de los secretos mejor guardados en el mundo de la informática”. Esto no es una exageración: grandes corporaciones han comprado sistemas de desarrollo profesionales de Forth a proveedores como Laboratory Microsystems, Inc., Forth, Inc. o MicroProcessor Engineering, Ltd. y han pedido a estas compañías que lo mantengan en secreto.

Algunos especulan (poco amablemente) que las corporaciones gigantes prefieren esconder su verguenza por usar Forth; pero J. V. Noble cree que lo que hacen es ocultar un arma secreta ante sus rivales. Cualquier Forth puede competir directamente con muchos lenguajes convencionales como C e incluso ganarles produciendo código más pequeño, rápido y seguro en mucho menos tiempo.

(arriba)
 
 

Características


Forth es un entorno de programación interactivo, originalmente diseñado para programadores que desarrollaban aplicaciones usando mini y microordenadores. Su principal uso está en aplicaciones científicas e industriales tales como instrumentación, robótica, control de procesos, gráficos y procesamiento de imágenes, inteligencia artificial y aplicaciones de negocios. La principal ventaja de Forth es el desarrollo rápido e interactivo de software y el uso eficiente del hardware del ordenador.

Forth es a menudo referido como un lenguaje porque este es su aspecto más visible. Sin embargo, Forth es más que un lenguaje de programación convencional, en el que todas las capacidades normalmente asociadas con un gran número de programas separados (compiladores, editores, ensambladores, etc.) están incluidas dentro del mismo.

Forth es también menos complicado que un lenguaje de programación convencional de alto nivel, estando desprovisto de la complejidad sintáctica característica de muchos de ellos.

Las implementaciones originales de Forth fueron sistemas autónomos que incluían funciones normalmente ejecutadas de forma separada por sistemas operativos, editores, compiladores, ensambladores, depuradores y otras utilidades. Un único conjunto de reglas sencillas y consistentes gobernaban este rango de capacidades. Hoy, aunque se venden versiones autónomas muy rápidas para muchos procesadores, hay también muchas versiones que se ejecutan co-residentes con sistemas operativos convencionales, como Windows o Unix.

Forth no se deriva de ningún otro lenguaje. Como resultado, su apariencia y características internas pueden parecer poco familiares para los nuevos usuarios. Pero la simplicidad de Forth, su extrema modularidad y naturaleza interactiva, compensan la extrañeza inicial, haciéndolo fácil de aprender y usar. Un programador Forth novel debe investigar algún tiempo para dominar su largo repertorio de comandos. Después de un mes o así de uso a plena dedicación, el programador comprenderá más sobre su funcionamiento interno de lo que sería posible con compiladores y sistemas operativos convencionales.

La característica menos convencional de Forth es su extensibilidad. El proceso de programación en Forth consiste en definir nuevas palabras, realmente nuevos comandos en el lenguaje. Estos pueden ser descritos en términos de palabras previamente definidas, tal como se enseñan a un niño nuevos conceptos en base a conceptos previamente aprendidos. Tales palabras son denominadas "definiciones de alto nivel". Alternativamente, pueden definirse también nuevas palabras en código ensamblador, ya que muchas implementaciones Forth incluyen un ensamblador para el procesador anfitrión.

Como resultado de su extensibilidad, desarrollar una aplicación tiene el efecto colateral de crear un especial "lenguaje orientado al problema" para ese tipo de tarea que puede ser usado en aplicaciones similares.

(arriba)
 
 

Forth en la industria


La siguiente es una selección de proyectos en los que se ha usado Forth:
 

En este enlace puede encontrarse una lista confeccionada por la NASA de sistemas Forth utilizados por la industria aeroespacial durante los últimos años.

Y en la web de FORTH, Inc. podemos ver la siguiente lista de clientes de esta compañía:

 
Aerospace Corp.
American Airlines
AMTELCO
Applied Biosystems, Inc.
Arabian Bechtel Ltd.
AT&T (Bell Labs)
AVCO/Textron Systems
Avionics Specialities
Babcock & Wilcox
Boeing Computer Svcs.
Boeing Wichita
Borg Warner
Canada-France-Hawaii Telescope
Computer Sciences Corp. (CSC)
Debitek Ingenico
Delta Airlines
Detroit Diesel
Digalog
DirecTV
E.I. Dupont
Eastman Kodak Company
Edwards Air Force Base
Europay, International
Federal Express
Ford Motor Co.
Forest Grove Industries
GE Multilin
General Dynamics
General Electric
Honeywell Avionics Systems
Hughes Aircraft
IT&T Power Systems
Jet Propulsion Labs
John Brown Machine
Land O' Frost, Inc.
Li Gu Industrial
Weighing Systems (Taiwan)
Litton Guidance & Control
Lockheed Missiles & Space
Los Alamos National Laboratory
McDonnell Douglas
Mercedes-Benz
Minnesota Mining & Mfg. (3M)
Motorola
NASA Goddard Space Flight Center
Naval Ocean Systems Ctr.
Northrup Grumman
Oak Ridge National Laboratory
Optical Physics
Orbital Sciences Corp.
Owens-Corning Fiberglas
Procter and Gamble
Quantum Composers
Rockwell International
Sacramento Municipal Utility District
Sandia National Laboratories
Saturn Corp.
Smithsonian Astrophysical Observatory
Spalding Sports Worldwide
Stanford Univ. Medical Center
Teledyne Ryan Electronics
TRW Space & Defense Sector
United Technologies
Univ. of Minnesota
Weightronix
Westinghouse
Varian Ion Implant
Vertex Communications
(arriba)
 
 

Extensiones


Como el lenguaje Forth es extensible, los grandes proveedores han producido un buen número de "ampliaciones" para los sistemas Forth a fin de ajustarlos a necesidades especiales. Tales extensiones incluyen auto-documentación, drivers de terminales, mantenimiento de ficheros de disco, gestores de bases de datos, compiladores de objetivo, compiladores cruzados y meta compiladores.

Un "compilador de objetivo" permite el uso de una CPU anfitriona, como un IBM PC, para el desarrollo de sistemas. Los programas pueden ser editados y probados interactivamente desde el teclado. Estos programas pueden ser compilados entonces para el entorno objetivo y producir el apropiado código ROM. Una función del compilador de objetivo es prescindir de cualquier código requerido improductivo, como el compilador, editor y ensamblador. Haciendo esto, la carga de la ROM en tiempo de ejecución puede reducirse desde 8 Kbytes del sistema de desarrollo hasta un mínimo de aproximadamente 600 Bytes.

El "compilador cruzado" actua en gran parte de la misma forma que el compilador de objetivo, permitiendo al usuario el desarrollar (y comprobar) código en un sistema anfitrión. El compilador cruzado puede compilar el sistema Forth, en gran medida como el compilador de objetivo, excepto en que el objetivo del compilador cruzado es una CPU diferente, con un diferente lenguaje de máquina. Esta facilidad nos permite desarrollar sistemas para nuevas CPU muy rápidamente. Como la mayoría de los sistemas Forth están escritos en Forth sólo necesitamos escribir un ensamblador para el nuevo procesador y usar el compilador cruzado para compilar el sistema Forth para el nuevo procesador. Muchos sistemas Forth se desarrollaron usando este método. En consecuencia, Forth es usualmente uno de los primeros lenguajes en ser implementados en un nuevo procesador.

El proceso de escribir un compilador Forth en otro es denominado "meta-compilación".

(arriba)
 
 

Multitarea


Los sistemas Forth multitarea existen desde el principio. Estos sistemas no son propiamente lenguajes de procesador, pues contienen también características de sistema operativo. Muchos de los sistemas integrados se ejecutan completamente de forma autónoma, desempeñando todas las funciones necesarias de un sistema operativo.

El entorno operativo Forth es rápido y como resultado, los sistemas basados en Forth soportan tanto operaciones multitarea como multiusuario en ordenadores cuyo hardware es usualmente considerado incapaz de realizar semejantes operaciones. Por ejémplo, un controlador de centralitas telefónicas puede ejecutar más de 50 tareas sobre un microprocesador Z80. Existen varios productos de multiprogramación para los IBM PC, algunos de los cuales también soportan múltiples usuarios.

Igualmente sobre ordenadores que son usados generalmente en operaciones multiusuario, el número de usuarios que puede soportarse es mucho mayor que el esperado. Una aplicación de grandes bases de datos ejecutándose sobre un único procesador 68000 tiene más de 100 terminales actualizando y consultando dicha base de datos, sin una degradación significativa.

Los sistemas multiusuario pueden soportar también múltiples programadores, cada uno con su diccionario y pila privados y un conjunto de variables controlando el trabajo. El diccionario privado se enlaza con un diccionario compartido reentrante conteniendo todas las funciones Forth estándar. El diccionario privado puede ser usado para desarrollar código de aplicación que más tarde será integrado en el diccionario compartido.

(arriba)
 
 

Forth en hardware


A principio de los años 80, Rockwell produjo el 65F11. Este era una variante del procesador 6502 con primitivas Forth en una ROM incorporada. Este chip se usó (y aún se sigue usando) exitosamente en muchas aplicaciones de microprocesadores embebidos.

En 1981, Chuck Moore emprendió el diseño de una implementación en chip de la máquina virtual Forth. Elaborado primero en FORTH, Inc. y posteriormente en una nueva compañía creada para el desarrollo del chip, Moore completó el diseño en 1984 y el primer prototipo se produjo a principios de 1985: este chip fue bautizado como NC4000. Más recientemente, se han desarrollado procesadores Forth por parte de Harris Semiconductor Corp. (la serie RTX), Johns Hopkins University y otros. Los chips basados en Forth ofrecen un rendimiento extremadamente alto, generalmente comparable con los chips RISC, pero sin las dificultades de programación que acompañan convencionalmente a estos procesadores.

(arriba)
 
 

Estándares


La comunidad Forth aceptó que se necesitaba una base estándar para crear extensiones y aplicaciones. El primero de esos estándares se puso en marcha a mediados de los 70 por FIG (el Forth Interest Group). Este llegó a conocerse posteriormente como el estádar FIG-Forth.

Sin embargo, el principal esfuerzo para la estandarización de Forth se realizó en el congreso de Utrecht de 1977. Los asistentes produjeron un estándar preliminar y acordaron reunirse al año siguiente. En el congreso de 1978 participaron también miembros del FIG de California. Tras años de congresos, en los que asistieron tanto usuarios como proveedores, se consiguió un estándar más amplio denominado Forth-79.

Aunque Forth-79 fue muy influyente, muchos usuarios y proveedores de Forth encontraron serios defectos en él. En 1983 dos ulteriores congresos dieron a luz Forth-83, un estándar refinado.

Animados por la amplia aceptacion de Forth-83, un grupo de usuarios y proveedores se reunieron en 1986 para investigar la factibilidad de un Estándar Nacional Americano (ANS). El Comité Técnico para ANS Forth, el comité ANS ASC X3/X3J14  tuvo su primera reunión en 1987 con el objetivo "de conseguir un estándar aceptable el cual resulte de una amplia conformidad entre todos los mayores proveedores de productos de lenguaje Forth, con un impacto adverso mínimo en cuanto a transportabilidad desde los sistemas existentes en uso." En 1994, alrededor de siete años después, el nuevo estándar vio finalmente la luz. Este es el de más largo alcance de todos los estándares. La Organización Internacional de Estándares (ISO) lo aceptó como un estándar internacional dos años después (aunque no fue publicado hasta el siguiente año, 1997).

(arriba)

(volver)