# Forth

Forth o FORTH és un llenguatge de programació de pila, inventat per Charles H. Moore i Elisabeth Rather a la Dècada del 1960 entre els anys 1965 i 1970 en el National Radio Astronomy Observatory de Kitt Peak, a Arizona.. Va ser estandarditzat per ANSI el 1994, després adoptat tal com està per ISO el 1997 i una nova versió, Forth 2012, es va publicar el 2014.

## Història

Forth és un llenguatge de programació interessant per la història de la informàtica i, per tant, per entendre les bases de la programació. Encara que no és gens corrent al món professional, ja que en te prou amb un ordinador dels anys 80 i no està gens orientat al mercat mediàtic.
El 1958, un jove informàtic anomenat Charles Moore, responsable del càlcul de trajectòries de satèl·lit, es va comprometre, per facilitar el seu treball diari, a la construcció d'una caixa d'eines en forma d’intèrpret de comandaments. Any rere any, aquest intèrpret es millora i es fa independent de la màquina host. El 1968 va prendre el nom de Forth, i el 1970 ja era prou madur com per ser objecte d'una primera publicació com Llenguatge per al càlcul interactiu.
El 1971 es va produir la primera aplicació important: Moore utilitza Forth per desenvolupar el programari per controlar el radiotelescopi Kitt Peak (Arizona) en dos miniordinadors de 16 bits. Aviat se li va unir Elizabeth Rather, que es va convertir en la segona programadora de Forth. A causa del seu rendiment i flexibilitat d'ús, l'aplicació va interessar ràpidament altres observatoris, i el 1976, Forth va ser adoptat com a estàndard per la Unió Internacional d'Astronomia.
Després d'una modernització inicial del programari de Kitt Peak el 1973, Moore i Rather van fundar Forth, Inc., per promocionar el llenguatge i les seves aplicacions. El 1976, una primera versió executable en microprocessadors de 8 bits estava disponible amb el nom de MicroFORTH.
L'any 1978 es va crear una associació, el Forth Interest Group (FIG), per promoure una versió domini públic en tants processadors com sigui possible i publicar la revista Forth Dimensions. El FIG-FORTH, lleugerament diferent del MicroFORTH, contribuirà molt a la difusió del llenguatge.
Es fa evident la necessitat d'estandarditzar un llenguatge que cadascú pugui modificar com vulgui. Un primer intent (FORTH77) va donar com a resultat el primer estàndard àmpliament distribuït, FORTH79. Aquest estàndard va evolucionar quatre anys més tard cap a FORTH83, però les incompatibilitats entre les dues versions van causar problemes de portabilitat i van ser la causa d'una divisió a la comunitat de programadors FORTH.

## Denominació

El seu nom és una contracció de la quarta anglesa, que significa quart: Moore ho va veure com un llenguatge per a ordinadors de quarta generació. Aleshores, la màquina IBM utilitzada, una IBM 1130, només permetia noms de cinc lletres.

## Principis

Forth es basa en l'ús explícit de piles, mentre que altres llenguatges utilitzen piles que són invisibles per al programador.

### Pila de dades

Una característica important del llenguatge és l'ús d'una pila de dades per passar arguments entre paraules, que són els components d'un programa Forth.
Un exemple senzill: l'expressió 2+3*4 es traduirà posteriorment 2 3 4 * +, en notació polonesa inversa.
Aquesta seqüència de paraules actua sobre la pila de dades. El seu efecte és:
* per apilar successivament els valors 2, 3, després 4;
* després substituïu els dos números a la part superior de la pila (3 i 4) pel seu producte, 12;
* i finalment substitueix els dos nombres a la part superior de la pila (2 i 12) per la seva suma, 14.
A partir de les paraules predefinides del llenguatge, com ara +, *, DUP (que duplica l'element a la part superior de la pila), SWAP (que intercanvia els dos elements de la part superior), etc., el programador construeix el vocabulari del seu aplicació definint les seves pròpies paraules, que després reutilitza:
Una conseqüència important de l'ús d'una pila és l'eliminació virtual dels noms de variables locals, que esdevenen innecessaris.

### Pila de retorn

Com en gairebé tots els idiomes, Forth utilitza una pila per emmagatzemar les adreces de retorn de les subrutines en execució. L'originalitat aquí és posar aquesta pila a disposició del programador, principalment per a l'emmagatzematge temporal de dades, mitjançant dos operadors que permeten les transferències de pila de dades - pila de retorn.

### Subrutines

Una quarta paraula és l'equivalent de subrutines, funcions o procediments en altres idiomes. Tanmateix, Moore descriu les paraules més com a abreviatures que com a funcions d'estil C. La consigna a Forth és factorització, és a dir, la divisió de l'aplicació en paraules petites la definició de les quals encaixa en una o dues línies.
Les «paraules» de Forth són «compilat», és a dir convertit en una forma executable i afegit al diccionari de paraules. La forma executable difereix segons el compilador o intèrpret utilitzat: generació directa de codi màquina o bytecode per exemple (hi ha moltes variants intermèdies).
En altres idiomes, s'utilitza una subrutina amb una sintaxi diferent de les funcions bàsiques del llenguatge: en endavant una subrutina és una paraula més, que s'utilitza de la mateixa manera que les paraules bàsiques de la llengua: aquest comportament idèntic de les funcions bàsiques i subrutines facilita la redefinició d'una funció bàsica per millorar un programa
No hi ha cap declaració GOTO. La sintaxi particular de la IF... ELSE... THEN resol elegantment el problema de que, en la programació estructurada, resulta en la introducció d'una variable booleana addicional si volem evitar absolutament el GOTO.

#### Les variables

No hi ha cap operador d'assignació de dos operands (incorporat per = en molts altres idiomes). Les variables sempre estan pensades com a adreces a la memòria, no com a valor emmagatzemat a la memòria. La transferència de dades la fan els dos operadors @ (fech) i ! (magatzem), que corresponen a les instruccions LDA (Load Accumulator) i STA (Store Accumulator) d'un assemblador, la pila aquí juga el paper de l'acumulador.
A l'última línia, invocar toto empeny l'adreça toto a la pila. @ substitueix aquesta adreça pel valor contingut en aquesta ubicació a la memòria, és a dir, 3. Al seu torn, invocar titi empeny l'adreça titi a la pila. Actualment conté el valor 3 i l'adreça titi. Finalment ! escriu 3 a la memòria a l'adreça titi i deixa la pila buida.

## Implementació

La barreja d'interpretació/compilació, associada a tècniques de compilació eficients i la possibilitat que ofereixen molts sistemes de definir també nous primitius en assemblador, fa de Forth un dels llenguatges interpretats més ràpids i compactes.
Molt proper al material, Forth és un llenguatge que es pot descriure com nivell baix, però que disposa de recursos que li permeten apropar-se al alt nivell. De fet, el llenguatge es basa en un nombre reduït de primitius prou elementals per ser implementats directament en silici (és a dir, ser les instruccions d'un processador de maquinari; per tant, els primitius del Quart són de fet un llenguatge ensamblador per a aquests processadors. Hi ha alguns exemples de processadors Forth).
Al mateix temps, el llenguatge permet definir paraules que afecten la compilació; així podem definir noves estructures de control (per exemple, l'estructura switch/case es pot escriure des de l'estructura if/then/else). Aquesta característica fa de Forth un llenguatge extensible.
Així és com, a partir d'uns quants primitius escrits en llenguatge màquina, podem construir un intèrpret de línia d'ordres, un assemblador, un compilador, un editor de fonts. La compacitat és extrema: en una màquina de 8 bits, 7 kilobytes són suficients per tenir un intèrpret de línia d'ordres, dels quals només 700 octets són codi màquina, la resta està formada per taules de punters. En afegir uns 5 ko, tenim l'editor, un assemblador i un sistema d'emmagatzematge rudimentari en disquets, tot funcionant sense un sistema operatiu amb uns quants kilobytes de memòria RAM i encaixant en un disquet senzill (font complet inclòs); és a dir, un microentorn de desenvolupament capaç d'autocompilar-se des de la seva pròpia font des d'una plataforma amb recursos modestos com ara aplicacions incrustades.
La llenguatge Forth ha estat objecte d'una normalització oficial, ANS-FORTH, basada en els estàndards no oficials anteriors Forth-79 i Forth-84. La majoria de Forths comercials segueixen aquest estàndard. A causa de l'extrema facilitat d'implementar un intèrpret per a aquest idioma, hi ha un nombre molt gran de sistemes Forth de domini públic, que o bé estan alineats amb l'estàndard ANS-Forth (com el gforth de GNU), o són més o menys dialectes. lluny de Forth (sobretot ColorForth de Charles Moore), i això per a gairebé totes les plataformes, des de l'Intel 8051 fins a Windows, inclòs Linux.

## Aplicacions

Forth es va fer per aplicacions d'astronomia i no és difícil. És lògicament molt consistent i resulta ser més complex entendre un Forth actual que fer un Forth modest des del principi. Forth és per tant més aviat un tipus o estil de llenguatge que un llenguatge. Hi ha diversos Forth. Si un programador vol fer el seu propi llenguatge sense comptar amb les eines dedicades per aquesta funció sovint comença fent la seva pròpia mena de Forth, ja que Forth neix de manera natural com una extensió del llenguatge ensamblador.
Tal com succeeix amb altres llenguatges ben dissenyats com rebol, ruby, brainfuck o ocaml la qualitat de Forth és reconeguda pels entesos i no solament pel mercat. Forth s'ha utilitzat principalment en sistemes i controladors encastats, a causa de la seva compacitat i la facilitat d'utilitzar paraules definides en conjunt en programes de nivell superior. Entre les aplicacions més prestigioses, destacarem la seva presència en algunes missions de la NASA.
Les ROM Open Firmware per als productes Apple i Sun, així com part de l'arrencada FreeBSD, es van escriure fins fa poc a Forth, permetent la portabilitat de codi de baix nivell entre processadors.
L'augment del rendiment dels microcontroladors permet ara la programació d'aplicacions d'aquest tipus en llenguatge C, ara establert com un assemblador universal, l'ús de Forth està retrocedint al seu terreny preferit. De manera més general, la tendència és que el programador es converteixi en un recurs intercanviable (que ja permet l'externalització de determinats desenvolupaments) en detriment de l'experiència i la competència, l'ús de Forth només pot disminuir.
Tot i que la mort de Forth s'ha anunciat una i altra vegada, i alguns l'anomenarien moribund, els nous programadors de diferents orígens curiosos i atrets per la seva notable actuació i dissenys s'hi interessen i s'inspiren regularment.; la supervivència d'unes poques empreses proveïdores de serveis que basen la seva oferta en Forth i duen a terme desenvolupaments per a projectes d'avantguarda (gestió del trànsit aeri per exemple), fa pensar que Forth no és un llenguatge mort.
ASYST era un programari d'automatització de mesura de PC amb càlcul de coma flotant i un munt de possibilitats molt potents per a l'època, tot en quarta sintaxi (a PC xt); sovint els usuaris d'aquest programari no sabien que estava disponible: encara hi havia diferències en comparació amb la quarta com dues piles diferents per a textos i números.
El llenguatge de programació de contracte intel·ligent de Bitcoin, anomenat script, utilitza una sintaxi inspirada en Forth, amb notació polonesa inversa i piles.

## Característiques destacades

* En ser RPN adopta una solució als errors de l'excés de parèntesi en el desenvolupament històric de l'àlgebra que han heretat la majoria dels llenguatges de programació. El paper fonamental de les piles a Forth és un dels seus trets més característics.
* No estar ni tan sols mínimament lligat a un tipus de sistema de fitxers no solament té raons històriques (no existien als microordinadors quan es va fer forth) sinó que seguint el principi de la navalla d'Occam els seus dissenyadors no han acceptat les linees més corrents de desenvolupament. Forth evoluciona des del punt de vista d'un científic amb canvis mínims i molt prudents i un sistema de fitxers pot fer més nosa que altra cosa si el que vols fer és un registre de temperatures a un aparell fet a mida per exemple.
* No estar lligat tampoc en absolut a cap sistema operatiu per la mateixa raó.
* Amb la implementació d'un sistema de repart de flux de procés Round Robin cooperatiu Forth per si sol es pot considerar llenguatge i alhora sistema operatiu.
* Suport per control de llistes de diccionaris.
* No fa servir gramàtica formal.
* Fa servir l'espai com a delimitador.
* Optimització Peep Hole.
* No força la consistència de tipus i, per tant, fa més responsable al programador.
* El compilador estén les funcions de l'interpret.
Forth es resumeix com allò que reflecteix el pas gradual d'un intèrpret a un compilador i per aquesta raó és important.

## Referències

* ↑ ANSI X3.215-1994
* ↑ ISO/IEC 15145:1997 "Information technology -- Programming languages -- FORTH".
* ↑ Forth 2012, version du 10|novembre|2014}} PDF
* ↑ The first time I combined the ideas I had been developing into a single entity, I was working on an IBM 1130, a "third-generation" computer. The result seemed so powerful that I considered it a "fourth-generation computer language.", Charles H. Moore dans la préface de Starting Forth, de Leo Brodie
* ↑ Le 1130/1800 devait au départ être un machine à mots de 18 bits. Pour se normaliser sur l'octet, elle fut contrainte à adopter une architecture à 16 bits.
* ↑ gnu.org - GForth
* ↑ Campbell et al, "Up and Running with Asyst 2.0", MacMillan Software Co., 1987
* ↑ «Script - Bitcoin Wiki». en.bitcoin.it. [Consulta: 28 juny 2020].

## Enllaços externs

* Pàgina oficial de FORTH, Inc.
* Open Directory Project Arxivat 2006-06-12 a Wayback Machine.: una llista de links útils sobre Forth (cf. especialment Open Firmware).
* Introducció a Forth Arxivat 2009-03-12 a Wayback Machine.
* Hi ha un wiki específic a http://www.forthfreak.net/wiki/