# Forth/Préparatifs
## Histoire et concepts
### Un langage de programmation

Forth est un langage de programmation. C'est un outil que le développeur utilise pour parvenir à ses fins : mettre en place son logiciel. C'est l'américain Charles H. Moore qui imagine Forth et qui, en partenariat avec Elizabeth Rather, fonde en 1973 la société FORTH, Inc. pour promouvoir son langage et ses logiciels.
Forth gagne vite en popularité, alors que Moore change régulièrement de job et déploie son langage sur des architectures toujours plus nombreuses. Ainsi Forth s'illustre dans des projets renommés, comme lorsqu’il devient en 1984 un système de développement prépondérant chez les premiers Macintosh d'Apple (le MacForth). Il est alors normalisé sous la forme du FORTH-83. Dès lors, dans les années quatre-vingts, le logiciel gagne en notoriété dans le milieu de la micro-informatique de par sa légèreté et sa portabilité.
Aujourd'hui, la société FORTH, Inc. est toujours active, et ses services sont utilisés par des entreprises majeures dans le domaine de l'aérospatial, des transports ou encore de l’instrumentation. Le langage en lui-même a été normalisé par l’ANSI et est devenu le ANS Forth ; depuis 1958, de nombreuses implémentations ont vu le jour, mais beaucoup ont disparu. Ses attraits pour le développement bas niveau et celui d’applications embarquées furent évincés par la popularité montante du langage C, qui proposa alors plus simplement des mécanismes tout aussi puissants.

### Atypique

Forth est atypique. Du moins il l'est pour les programmeurs d'aujourd'hui. En effet, il fait partie d'une catégorie très particulière de langages dits langages à pile ; cela signifie que les piles de données constituent un élément central des programmes Forth.
Cette section est difficile à comprendre. Même si elle ne fait intervenir que des notions du niveau indiqué, il est conseillé d'avoir du recul sur les notions présentées pour bien assimiler ce qui suit. Cependant, ce contenu n'est pas fondamental et peut être sauté en première lecture.
Les différentes composantes d'un programme Forth communiquent effectivement entre elles via une pile des paramètres (parameter stack), globale au programme. Ainsi, les fonctions s'enchaînent les unes à la suite des autres sans passage d'arguments explicite, chacune faisant son travail avec ce qu'elle trouve sur la pile : un dispositif aussi intéressant que dangereux, puisque c’est l'incarnation même des effets de bord contre lesquels se battent désormais de nombreux programmeurs. Cette particularité des procédures Forth donne lieu à une nomenclature bien spécifique : les fonctions sont des mots qui les uns à la suite des autres forment des phrases, phrases qui viennent définir de nouveaux mots dans le dictionnaire (l'ensemble des mots employés par un programme Forth).
D'ailleurs un programme Forth se reconnaît facilement. Premièrement, il est d’usage qu'une partie ou la totalité des mots soit en capitales, et la ponctuation est abondamment utilisée (un mot peut contenir n’importe quel caractère ASCII). Ensuite, Forth utilise la notation polonaise inversée pour le calcul numérique : « 34 3 2 * / » divise ainsi 34 par le produit de 3 par 2. Mais cette notation inversée influe aussi sur l'allure des expressions : en Forth on écrit « 3 TROIS ! » là où un pythonneux aurait écrit « trois = 3 ». Par ailleurs, la communauté Forth a mis en place de nombreuses conventions de nommage, et notamment des abréviations à base de symboles, ce qui rend les sources particulièrement cryptiques pour le néophyte :

### Efficace

Enfin, Forth assume bien sa tâche, à savoir : être léger, rapide et puissant.
Sa légèreté vient du fait qu'un système Forth est un logiciel très compact, qui comporte essentiellement des routines pour manipuler les nombres et la mémoire. Ensuite, sa rapidité est due au cœur du système souvent écrit directement en Assembly. Pour finir, sa puissance vient de l'infinie liberté laissée au développeur : on fait tout simplement ce que l’on veut.

## Installation d'un système Forth

La première chose à faire est de choisir son Forth. La plupart des « gurus » Forth utilisent ce langage depuis des temps reculés, et possèdent de vieux Forth bien souvent non standards (comme Turbo Forth). Dans le cadre de ce cours, nous allons utiliser un système classique pour PC, normalisé (ANS Forth) et le plus portable possible.
Je vous en propose un écrit en C : GForth.

### GForth

GForth est le système Forth du projet GNU, il s'agit donc d'un logiciel libre. Il fonctionne sur de nombreuses plates-formes dont UNIX, Microsoft Windows et MS-DOS. Il est très simple à installer, puisqu’il suffit d'aller sur le FTP du projet et de télécharger la version adaptée à son système ; le « windowsien » choisira alors l'installateur gforth-0.7.0.exe.
Parmi ses atouts, on peut souligner un grand respect de la norme ANSI et une vélocité tout à fait honnête ; voici d'ailleurs un petit benchmark réalisé sous une machine GNU/Linux avec un PIII 650 Mhz (sur un algorithme MD5) :
Performances de différents Forths (chiffrage MD5) :
| | Bigforth | GForth | pForth | Ficl |
| Temps (ms) | 0,73 | 10 | 44 | 48 |
Le système développé et soutenu par FORTH, Inc. est SwiftForth™. C'est de loin le plus abouti, mais il n'est ni portable, ni libre, ni gratuit.
Libre à vous de choisir un autre Forth. Étant donné l'ancienneté du langage, on peut dire que vous avez l'embarras du choix !

### Premiers pas

Pour lancer GForth, tapez gforth dans un terminal (sous Windows : Exécuter → gforth). Après un bref accueil de l'interpréteur (le logiciel qui va analyser nos programmes Forth), on vous invite à taper du code (prompt en anglais) :
C'est parti : tapez « 2 40 + . », validez avec la touche Entrée. Vous obtiendrez quelque chose comme :
* 2 40 + additionne 2 et 40 ;
* . (dot) afficher le résultat ;
* et le « ok » nous indique que l'interprétation du code est terminée, on retourne au prompt.
Tapez « bye » afin de quitter GForth.