Forth (langage)

Un article de Wikipédia, l'encyclopédie libre.

Pour les articles homonymes, voir Forth.

Forth est un langage de programmation interactif atypique, découvert (comme il aime à le dire) par Charles H. Moore dans les années 1960.

À cette époque, l'informatique en était encore à ses débuts ; si on reprend la distinction entre préhistoire et histoire faite par rapport à l'apparition de l'écriture, on peut dire que l'informatique en était à l'époque de Forth, à l'aube de son histoire. Son nom est une contraction du mot anglais « fourth », qui signifie « quatrième » : c'était à l'origine un langage pour les machines de quatrième génération (et non un langage de quatrième génération, comme il est souvent dit), machines dotées de lecteurs de disquettes ; mais, à l'époque, la machine IBM utilisée ne permettait que des noms de cinq lettres (ce qui suggère qu'il s'agissait d'un IBM 1130). Et pourtant, Forth utilisait des concepts extrêmement novateurs pour l'époque : multiprogrammation et cache-disque notamment.

Sommaire

[modifier] Principes

Une de ses importantes caractéristiques est l'utilisation d'une pile de données pour passer des arguments entre les mots, qui sont les constituants d'un programme Forth.

Un simple exemple : l'expression 2+3*4 sera traduite par la suite 2 3 4 * +, dans la notation polonaise inversée.

Cette suite de mots agit sur la pile de données, son effet est

  • d'empiler successivement les valeurs 2, 3, puis 4
  • de remplacer ensuite les 2 nombres du sommet de la pile (3 et 4) par leur produit 12.
  • et enfin de remplacer les 2 nombres en haut de pile (2 et 12) par leur somme 14.

À partir des mots prédéfinis du langage, comme +, *, DUP (qui duplique l'élément en sommet de pile), SWAP (qui échange les deux éléments du sommets), etc. le programmeur construit le vocabulaire de son application en définissant ses propres mots, qu'il réutilise ensuite :

: CARRE DUP * ;      ( définition de CARRE )
11 CARRE             ( on obtient 121 en sommet de la pile )
: CUBE DUP CARRE * ; ( usage de CARRE dans une définition )
2 CUBE               ( retourne 8 )

Un mot Forth est l'équivalent des sous-programmes, fonctions ou procédures dans les autres langages. Cependant, Moore décrit les mots plus comme des abréviations que comme des fonctions "à la C". Le mot d'ordre en Forth est la factorisation, c'est-à-dire le découpage de l'application en petits mots dont la définition tient sur une ligne ou deux. Les "mots" de Forth sont "compilés", c'est-à-dire convertis en une forme exécutable et ajoutés au dictionnaire des mots. La forme exécutable diffère suivant le compilateur/interpréteur utilisé: génération directe de code machine ou "bytecode" par exemple (il existe de nombreuses variantes intermédiaires).

[modifier] Implémentations

Le mélange interprétation/compilation, associé à des techniques de compilation efficaces et à la possibilité offerte par nombre de systèmes de définir aussi de nouvelle primitives en assembleur, font de Forth l'un des langages interprétés les plus rapides et les plus compacts.

Très proche du matériel, le Forth est un langage que l'on peut qualifier de "bas niveau", mais qui dispose de ressources qui lui permettent de se rapprocher du "haut niveau". Le langage est en effet basé sur un petit nombre de primitives suffisamment élémentaires pour être implémentées directement "dans le silicium" (c'est-à-dire être les instructions d'un processeur matériel ; les primitives de Forth sont donc bel et bien un "assembleur" pour ces processeurs. Il existe quelques exemples de processeurs Forth).

Dans le même temps, le langage permet de définir des mots qui ont une action sur la compilation ; on peut ainsi définir de nouvelles structures de contrôle (par exemple la structure switch/case peut s'écrire à partir de la structure if/else/then). Cette caractéristique fait de Forth un langage extensible.

C'est ainsi qu'à partir de quelques primitives écrites en langage machine, on peut construire un interpréteur en ligne de commande, un assembleur, un compilateur, un éditeur de source, le tout pouvant fonctionner avec quelques kilo-octets de mémoire vive, et tenant sur une simple disquette (source intégrale incluse) ; autrement dit un micro-environnement de développement capable de s'autocompiler à partir de son propre source depuis une plateforme disposant de ressources modestes comme les applications embarquées.

Un des aspects de Forth est de tenter de trouver un juste milieu entre la langue naturelle du programmeur et la "langue" artificielle du processeur, contrairement aux autres langages qui prennent nettement le parti du programmeur au détriment du processeur. Ce compromis donne au langage son aspect exotique et déroutant de prime abord, et requiert sans conteste une certaine capacité d'adaptation de la part du programmeur.

Le langage Forth a fait l'objet d'une normalisation officielle, l'ANS-FORTH, fondé sur les standards "officieux" précédents Forth-79 et Forth-84. La plupart des Forth commerciaux suivent cette norme. De par l'extrême facilité d'implémentation d'un interpréteur pour ce langage, il existe un nombre incalculable de systèmes Forth de domaine public, qui sont soit alignés sur le standard ANS-Forth (comme gforth de GNU), soit sont des dialectes plus ou moins éloignés de Forth (notamment ColorForth de Charles Moore), et ce pour à peu près toutes les plateformes, du 8051 à Windows, en passant évidemment par Linux.

[modifier] Utilisations

Forth a été utilisé principalement dans des systèmes embarqués et des contrôleurs, en raison de leur caractère compact et de la facilité d'utiliser des mots définis en assembleur dans des programme de plus haut niveau. Parmi les applications les plus prestigieuses, on relèvera sa présence sur quelques missions de la NASA. Les ROMs Open Firmware des produits d'Apple et de Sun, ainsi qu'une partie du boot de FreeBSD, étaient jusqu'à récemment écrites en Forth, permettant la portabilité du code de bas niveau entre les processeurs.

L'augmentation de performance des micro-contrôleurs permettant désormais la programmation des applications de ce type en langage C, désormais érigé en assembleur universel, l'utilisation de Forth régresse sur son terrain de prédilection. Plus généralement, la tendance étant à ce que le programmeur devienne une ressource interchangeable (ce qui permet déjà l'externalisation de certains développements) au détriment de l'expérience et de la compétence, l'utilisation de Forth ne peut que décliner. Bien que la mort de Forth ait été annoncée maintes et maintes fois, et que d'aucuns le qualifieraient de moribond, de nouveaux programmeurs de divers horizons curieux et attirés par ces performances et ces conceptions remarquables s'y intéressent régulièrement et s'en inspirent; la survie de quelques sociétés prestataires de services qui basent leur offre sur Forth et réalisent des développements pour des projets de pointe (gestion de trafic aérien par exemple), laissent à penser que Forth n'est pas une langue morte.

[modifier] Voir aussi

[modifier] Articles connexes

  • Persistance : Forth a été au nombre des premiers langages persistants.
  • PostScript : dans ses principes fondamentaux (pile, notation polonaise inversée, dictionnaire de mots...) le langage PostScript est très voisin de Forth, il en diffère cependant dans la gestion dynamique de la portée des identificateurs (au moyen d'une pile de contexte contenant un nombre indéfini de dictionnaires, laquelle pile est aussi indépendante de la pile de données constamment utilisée pour l'exécution), et un contrôle complet des modes de fonctionnement entre interprétation, compilation et exécution, le langage permettant même de définir ses propres interprètes, compilateurs et exécuteurs, et la génération dynamique (pendant l'exécution du programme) de code exécutable par le programme lui-même.

[modifier] Liens externes