Adelante | |
---|---|
Semántica | imperativo |
clase de idioma | lenguaje de programación, lenguaje de programación interpretado y lenguaje de programación compilado |
tipo de ejecución | intérprete/compilador |
Apareció en | 1971 |
Autor | charles h moore |
sistema de tipos | sin escribir |
Implementaciones principales | gAdelante , pAdelante, kAdelante, SP-Adelante [1] , win32adelante [2] |
Dialectos | FORTH-79, FORTH-83, ANSI FORTH 1994, ColorForth , RetroForth . Cuarta Norma 2012 |
sido influenciado | APL , ceceo |
influenciado | PostScript , Factor y otros lenguajes concatenados |
Archivos multimedia en Wikimedia Commons |
Forth ( ing. Forth ) es uno de los primeros lenguajes de programación concatenativos , en los que los programas se escriben como una secuencia de lexemas ("palabras" en la terminología del lenguaje Forth). Las expresiones matemáticas se representan mediante notación de sufijo cuando se utiliza la notación de pila . Soporta mecanismos de meta-extensión de la semántica y sintaxis del lenguaje para adaptarse al área temática deseada. La sintaxis de nivel base en Forth es simple y consta de una sola regla: "todas las definiciones están separadas por espacios". Las definiciones de Forth pueden tener cualquier combinación de caracteres.
Una serie de propiedades, a saber, la interactividad , la flexibilidad y la facilidad de desarrollo, hacen de Forth un lenguaje eficaz para la investigación aplicada y la creación de herramientas. Los sistemas de control integrados son áreas obvias de aplicación para este lenguaje . Debido a su simplicidad , el compilador , ya menudo el compilador Forth , se implementa fácilmente para la gran mayoría de los microcontroladores y también se utiliza como una herramienta de programación cruzada . También se usa cuando se programan computadoras que ejecutan varios sistemas operativos o como un entorno operativo independiente.
El idioma Forth fue creado por Charles X. Moore a fines de la década de 1960 y principios de la de 1970. Moore llamó a su lenguaje Cuarto , creyendo que sería el lenguaje informático de cuarta generación . Pero como estaba trabajando en una máquina IBM 1130 , que permitía nombres compuestos de no más de cinco letras mayúsculas, el nombre se convirtió en FORTH ( ing. adelante - adelante). Sin embargo, los primeros experimentos de Moore sobre la creación de un intérprete simple que facilita la escritura de programas para controlar equipos astronómicos se remontan a finales de la década de 1950. [3]
Desde 1971, Moore trabajó en el Observatorio Nacional de Radioastronomía , participando en el desarrollo de programas para recolectar y procesar los datos recibidos por el radiotelescopio . Fue entonces cuando apareció la primera implementación del lenguaje Forth. En este trabajo también participó la colaboradora de Moore, Elizabeth Rather , quien puede ser considerada la segunda programadora fuerte del mundo .
El lenguaje recién creado fue aceptado como el principal lenguaje de programación por la Sociedad Astronómica Estadounidense . Más tarde, en 1973, Charles Moore y Elizabeth Rather fundaron FORTH, Inc [4] , durante la cual el lenguaje fue portado a muchas plataformas durante la siguiente década.
A fines de la década de 1970, los programadores interesados en desarrollar el lenguaje formaron el FORTH Interest Group (FIG). Este grupo desarrolló el concepto de FIG Forth Model, un sistema de Forth disponible públicamente que se puede trasladar fácilmente a arquitecturas informáticas populares. Este sistema de referencia de Forth, FIG-FORTH, a menudo se considera el estándar del idioma original.
La idea de la estandarización oficial de Forth se originó originalmente dentro de la Asociación Internacional de Astrónomos ( English Astronomical Sciences, AST ). En mayo de 1977, en una reunión en el Observatorio Nacional de Kitt Peak ( EE . UU .), se elaboró un glosario del idioma Forth, designado como AST.01.
En febrero de 1978, se adoptó el estándar FORTH-77 en Utrecht , destinado a la implementación de microcomputadoras .
En octubre de 1979 finalizó una reunión en la isla de Santa Catalina ( California ) con el desarrollo del estándar FORTH-79, que se aplica a todo tipo de computadoras.
En el otoño de 1983, se llevó a cabo una reunión para desarrollar el siguiente estándar, aprobado en 1984 como FORTH-83. El estándar Fort-83 difiere del estándar Fort-79 en algunos detalles, pero no en sustancia.
En 1988, el grupo SIGFORTH [5] se organizó como parte de la ACM ; también había un grupo ACM ruso correspondiente (presidente - Prof. S. N. Baranov ( San Petersburgo , SPIIRAS )). SIGFORTH ahora existe como parte del SIGPLAN general
En 1994, después de una larga negociación en la que participaron muchas empresas interesadas, se adoptó el estándar de lenguaje ANSI Forth. [6]
El estándar de idioma Forth actual se adoptó en 2012. [7]
Un ejemplo bien conocido del éxito de Fort es su uso en el software de un vehículo de descenso en aguas profundas, durante la búsqueda del Titanic en 1985 . Fort también se utilizó en el software del espectrógrafo en el transbordador , en micromódulos para controlar satélites terrestres artificiales, para el sistema de control en el aeropuerto de Riyadh , sistemas de visión por computadora , automatización de análisis de sangre y control cardiológico, traductores de bolsillo.
El dialecto Forth se utiliza en OpenBoot , el software informático subyacente basado en los procesadores SPARC y PowerPC .
A principios de la década de 1980, John Warnock y Chuck Geschke de Adobe Systems crearon el lenguaje PostScript [8] . A pesar de las similitudes de los idiomas, John Warnock señaló [9] que Forth no influyó en la creación de PostScript.
Hay procesadores y controladores que soportan el modelo computacional del lenguaje a nivel de hardware. Se han creado muchas implementaciones de código abierto de Forth para varias plataformas de hardware. Firmas separadas (entre las que cabe señalar, en primer lugar, FORTH, Inc. fundada por Charles Moore y la empresa británica MicroProcessor Engineering Ltd. [10] ) suministran versiones comerciales del lenguaje con diferentes capacidades.
Dos juegos de computadora para el hogar de Electronic Arts creados en la década de 1980 se escribieron en Forth: Worms? (1983) [11] y Starflight (1986). [12] Canon Cat (1987) utilizó Forth como lenguaje de programación del sistema .
Las conferencias EuroForth se llevan a cabo anualmente, incluso en Rusia, Inglaterra, Austria, Alemania, España, la República Checa (anteriormente en Checoslovaquia). [13]
La parte principal del sistema Forth es una lista enlazada de palabras , o diccionario , desde la cual se llama a una palabra por su nombre para realizar funciones específicas. La cuarta programación consiste en definir nuevas palabras a partir de las palabras previamente definidas en el diccionario. Una vez que las palabras nuevas se compilan en un diccionario, no difieren en forma de las palabras que ya están en el diccionario. La descripción de una palabra en un diccionario se llama entrada .
La estructura de una entrada de diccionario Forth "típica" es:
Convencionalmente, los artículos de Forth se pueden dividir en dos categorías: artículos de bajo nivel y artículos de Forth . Los artículos del primer tipo contienen en el campo de código un puntero a un procedimiento en los códigos del procesador de destino que realiza directamente la semántica de la palabra. El campo de parámetros de tales artículos contiene los parámetros pasados al procedimiento, o su propio código. Los artículos cuartos contienen punteros a otros artículos en el campo de parámetro, y el campo de código apunta a un procedimiento especial llamado intérprete de enlace . En la práctica, la estructura del artículo depende de la implementación, pero, por regla general, es similar a la discutida anteriormente. El principio utilizado dentro del campo de parámetros de un cuarto artículo se denomina código de subprocesos , y el intérprete de enlace se denomina máquina virtual .
Gramaticalmente, el texto procesado por el traductor Forth es una secuencia de tokens ( eng. token ), separados por espacios y caracteres de final de línea. El traductor de cadenas de entrada selecciona el siguiente token y lo busca en el diccionario actual, y la búsqueda se lleva a cabo de las palabras más nuevas a las más antiguas. Si no se encuentra la palabra, se intenta interpretar la ficha como una entrada numérica que, si tiene éxito, se coloca en la parte superior de la pila. Si el token coincide con la palabra Forth, se analiza el estado actual del indicador de compilación del sistema Forth . Si se borra la bandera, se ejecuta la palabra: el control se transfiere de acuerdo con el puntero del campo de código del artículo encontrado. Si se establece la bandera, la palabra se compila , es decir, se agrega un puntero a su campo de código al artículo creado actualmente. Si se ha traducido un número, se saca de la pila y se compila en un código literal , cuya ejecución dentro de una entrada de diccionario empuja el número a la parte superior de la pila. Además, las palabras pueden contener una bandera inmediata , en cuyo caso siempre se ejecutan.
Mecanismo para pasar parámetros entre palabras:
El lenguaje proporciona una forma de trabajar con la memoria del sistema como una región lineal.
Un componente obligatorio del sistema es también la pila de retorno. Disponible programáticamente para cambiar el flujo de control del programa.
Todo lo anterior se aplica al concepto de Fuerte solo en una primera aproximación. Forth no es exactamente un lenguaje de programación; más bien, se superpone a la noción de un lenguaje de programación. Forth es más una máquina virtual y un sistema operativo ForthOS. [catorce]
La sintaxis y la semántica de Forth se pueden extender a cualquier otro lenguaje de programación justo en el momento de la interpretación (compilación) de un programa de Forth. Usar Forth como metalenguaje es conveniente debido a la disponibilidad de herramientas de Forth que admiten aquellos idiomas que ya están en el sistema Forth. Todos los recursos del sistema Forth están disponibles para el usuario y se presentan en forma de entradas de diccionario. Como regla general, las entradas de diccionario definidas por el usuario tienen exactamente la misma representación en el sistema Forth que todas las demás entradas de diccionario que componen todo el sistema Forth.
Se utiliza algún tipo de código enhebrado como una representación de máquina de un programa compilado .
Al utilizar código de subrutinas , se obtiene código máquina, en el que, en comparación con el código generado por el compilador de un lenguaje de programación convencional, donde tanto las variables como las direcciones de retorno de las subrutinas se colocan en una sola pila, no hay operaciones de “arrastrar”. y soltar” de los parámetros de la subrutina. La pila principal del procesador se utiliza como pila de retorno, la pila de datos está organizada por software.
Cuando se usa un código enhebrado que no sea un código de subrutina, las definiciones de Forth que consisten solo en código de máquina se denominan primitivas . En un código de subprocesos de este tipo, a menudo intentan usar la pila del procesador principal como una pila de datos y acceder a los datos que se encuentran en ella en forma de instrucciones de máquina popy archivos push.
Una de las ventajas no tan obvias de usar código subproceso indirecto es que todo el código nativo, es decir, primitivas, llamadas de intérprete de código y variables, se pueden colocar en un segmento de código que no se podrá modificar. El resto del código Forth reside en el segmento de datos. Puede haber muchos de estos segmentos, y es más fácil trabajar con un solo número de segmento que con dos.
Los sistemas Forth también pueden usar bytecode como una conclusión lógica para el desarrollo de código de subprocesos indirectos y código de subprocesos plegados con una tabla de direcciones. En este caso, el código del programa (Forth) es una secuencia de bytes, o el código de algún procesador virtual inventado. Para ejecutar este código, debe haber una tabla de 256 direcciones (2 bytes, 4 bytes u 8 bytes) en las que se ubican las primitivas Forth o definiciones complejas.
Esta opción es muy diferente a otros tipos de código y merece especial atención.
Un ejemplo de una definición de palabra .SIGN que imprime la frase apropiada según el signo del número en la parte superior de la pila:
\ Imprimir el signo de un número : .SIGN ( n -- ) ?DUP 0=SI ." CERO" MÁS 0>SI ." NÚMERO POSITIVO" MÁS . "NUMERO NEGATIVO" ENTONCES DESPUÉS ;Un ejemplo de código real que crea una constante de cadena en la forma aceptada en Forth (con un contador):
\ Crear una "constante" a partir de una cadena : S-CONSTANT ( c-addr u "<espacios>nombre" -- ) CREAR DUP , 0?DO DUP C@ C,CHAR+ CAÍDA DE BUCLE 0 C, HACE> DUP CÉLULA+ INTERCAMBIO @ ;Este ejemplo crea una definición de palabra nameusando la palabra CREATE. Cuando se ejecuta el nombre de la palabra, la dirección del puntero al área de memoria que estaba en el momento de compilar la palabra se colocará en la pila. Para que pueda usarse de alguna manera, se escribe una cadena allí ("compilada"). Cuando se ejecuta una palabra, se ejecutan las palabras especificadas después de la palabra DOES>.
Así, en este ejemplo, se ha creado una nueva construcción sintáctica. Rara vez se proporcionan características similares en otros lenguajes de programación.
Además de crear nuevas construcciones sintácticas, una de las funciones más potentes de Forth es la capacidad de interferir en el proceso de compilación con palabras de ejecución inmediata (immediate words).
Ejemplos de tales palabras estándar:
[ - Cambiar temporalmente al modo de ejecución (de hecho, a menudo solo escribe 0 en la variable STATE).
] — Vuelve al modo de compilación.
LITERAL - Compile el número actualmente en la parte superior de la pila como una constante. También es una palabra de ejecución inmediata.
Código de ejemplo donde se usan estas palabras:
\ Cierto tamaño de datos en kilobytes 16 tamaño CONSTANTE \ Imprimir un informe sobre la conversión de kilobytes a bytes :reporte(-) Talla . ." kilobytes equivalen a " [ tamaño 1024 * ] LITERAL . . "bytes" ;Uno de los temas recurrentes de la controversia de Forth es su lugar entre los lenguajes imperativos "clásicos". Los programas de Forth tienen un aspecto extremadamente inusual:
El secreto del habla del maestro Yoda revelado:
el programador de Old Fort era solo él.
El misterio del discurso de Yoda descubierto es:
Yoda era solo un viejo programador de Forth. [quince]
Estas características determinan las ventajas y desventajas del lenguaje Forth:
Quizás lo que realmente obstaculiza el desarrollo del Fuerte es el "legado pesado" que vino de las máquinas de baja capacidad para las que se creó originalmente. El estándar ANSI FORTH 94 tiene, por ejemplo, las siguientes características:
Muchas de estas características se deben al hecho de que en el momento en que se adoptó el estándar, había muchos sistemas Forth poco compatibles que se basaban en dos estándares parcialmente diferentes de 1979 y 1983.
Lenguajes de programación | |
---|---|
|