Forth est une langue peu commune. C’est avant tout un interprète, et il possède une interface en ligne de commande afin de pouvoir être utilisé en temps réel. Mais il a aussi la capacité de prendre des ensembles de code et de les compiler. C’est donc une sorte d’hybride.
Pour cette raison, Forth est couramment utilisé sur du matériel qui n’a pas de système d’exploitation traditionnel. Il est également largement utilisé pour contrôler des machines, et a été utilisé dans l’exploration spatiale – même sur Philae, la sonde qui a atterri sur la comète 67P/Churyumov-Gerasimenko.
Histoire
Forth a été développé par Charles Moore à partir de 1968 alors qu’il faisait de la programmation graphique chez Mohasco Industries. Mais la première implémentation complète de Forth n’est pas arrivée avant 1971, lorsque Moore a créé un système autonome pour contrôler le télescope de 11 mètres au National Radio Astronomy Observatory (NRAO) américain.
Les versions antérieures de Forth avaient attiré l’attention de la communauté des programmeurs. Mais à ce moment-là, il est devenu très populaire dans la communauté des astronomes. Ainsi, en 1973, Moore a fondé FORTH, Inc avec ses collègues du NRAO, Elizabeth Rather et Edward Conklin.
La société a porté le programme sur de nombreux systèmes différents. Et FORTH, Inc continue d’être une entreprise importante, fournissant des produits liés à Forth aux personnes dans les entreprises, les universités et le gouvernement.
Vue d’ensemble de Forth
Il y a un certain nombre d’aspects uniques au langage de programmation Forth. Nous aborderons ici les plus importants.
Forth Features
Forth offre de nombreuses caractéristiques uniques :
- Programmation interactive
- Création d’extensions compilées du langage appelées « mots »
- Piles et notation polonaise inversée
- Connexion directe entre l’utilisateur et le matériel.
Notation polonaise inversée
Forth effectue des calculs mathématiques en utilisant la notation polonaise inversée. Cela dépend du stockage des nombres dans une pile.
Considérer le calcul : 2 + 3
. En Forth, cela serait fait en plaçant le 2 sur la pile, puis en plaçant le 3 sur la pile, puis en les additionnant. Cela ressemblerait à quelque chose comme ceci : 2 3 +
.
Cela semble un peu bizarre, mais c’est plus facile à analyser pour l’ordinateur, car c’est de cette façon que les ordinateurs font réellement les calculs. Et une fois que vous vous y êtes habitué en tant que codeur, cela devient tout à fait naturel.
En outre, il n’y a pas besoin de parenthèses. Considérez les deux exemples suivants. (Note : le caractère backslash commence un commentaire.)
2 3 + 5 * This is the same as (2 + 3) * 52 3 5 * + This is the same as 2 + 3 * 5
Dans le premier exemple, 2 est poussé sur la pile suivi de 3. Donc 2 est deuxième dans la pile et 3 est premier. L’opérateur « + » est appliqué aux deux premiers éléments de la pile. Cela supprime ces deux éléments de la pile et laisse 5 (2 + 3) sur le dessus de la pile.
Puis on pousse 5 sur la pile. Cela met un 5 dans les première et deuxième positions de la pile. Enfin, nous appliquons l’opérateur « * », ce qui a pour résultat de placer 25 (5 * 5) sur le dessus de la pile.
Dans le deuxième exemple, nous plaçons 2, 3 et 5 sur la pile, de sorte que 5 soit en première position, 3 en deuxième et 2 en troisième. Ensuite, nous appliquons l’opérateur « * » sur les deux premiers éléments de la pile (5 * 3), ce qui a pour résultat de placer 15 au sommet de la pile.
À ce stade, 15 est en première position et 2 est en deuxième position. Lorsque l’opérateur + est appliqué, il laisse 17 (15 + 2) sur le dessus de la pile.
Programme d’exemple
Le programme suivant est très simple, mais il démontre beaucoup de ce qui se passe dans le langage.
: OUTMATH Output a mathematical calculation ." We will now calculate: (2 + 3) * 5" CR 2 3 + 5 * ." This equals: " . CR ; OUTMATH
La première chose que fait ce programme est de définir une fonction nommée OUTMATH
. Les lignes qui la suivent font partie de la fonction jusqu’à la ligne qui se termine par un point-virgule. La première ligne imprime le texte « Nous allons maintenant calculer : (2 + 3) * 5 » et la fait suivre d’un retour chariot.
La ligne suivante effectue le calcul dont nous avons parlé plus haut, ce qui fait que 25 est placé en haut de la pile. La dernière ligne de la fonction sort, » Ceci est égal à : » suivie de la valeur en haut de la pile (représentée par « . ») et d’un retour chariot.
Puis nous exécutons simplement la fonction. Ainsi, lorsque le programme s’exécute, il sort :
We will now calculate: (2 + 3) * 5This equals: 25
Apprendre le Forth
Pour la plupart des programmeurs, c’est une nouvelle façon de penser. Mais il est surprenant de voir à quel point cela semble naturel une fois que vous commencez à travailler avec. Voici quelques tutoriels et livres qui vous permettront de travailler avec le langage.
Tutoriels Forth
Il existe de nombreux tutoriels en ligne. Parce que Forth est étrange pour les programmeurs non-Forth en même temps qu’il est évident pour les utilisateurs actuels, beaucoup de tutoriels glissent sur des choses qui peuvent être confuses pour les débutants. Ces tutoriels n’ont pas ce problème.
- Easy Forth : ce court Ebook est une excellente introduction. Son seul inconvénient est qu’il n’est pas très riche en exemples. Vérifiez donc certains des exemples ci-dessous.
- A Beginner’s Guide to Forth : c’est une autre bonne introduction. C’est un peu plus technique, mais a plus d’exemples.
- And So Forth… : c’est une introduction très complète à Forth – presque aussi bien qu’un livre.
Forth Books
Il est souvent plus facile d’apprendre un nouveau langage en obtenant un livre qui peut vous prendre étape par étape à travers le processus. Il y a beaucoup de bons livres sur Forth – surtout ceux qui datent des années 1980, lorsque Forth a vraiment pris son essor. Voici une collection des meilleurs et des plus importants.
- Discover Forth : Learning and Programming the Forth Language (1982) par Thom Hogan : c’est une bonne et concise introduction au langage Forth.
- Starting Forth : Une introduction au langage Forth et au système d’exploitation pour les débutants et les professionnels (1982) par Leo Brodie : c’est un classique et un excellent moyen d’apprendre le Forth. Il est épuisé, mais il n’est pas difficile de trouver des copies d’occasion pour un prix modique. Il est également disponible gratuitement en ligne. Les programmeurs Forth avancés pourraient vouloir consulter le plus récent de Brodie, Thinking Forth.
- Programming a Problem Oriented Language : Forth – How the Internals Work (2014) par Charles Moore : il s’agit d’une version Kindle du livre que le créateur de Forth a écrit il y a longtemps. Il fournit encore des aperçus aigus du langage, mais n’est pas le meilleur choix pour commencer.
- Forth Programmer’s Handbook (2007) par Elizabeth Rather et Edward Conklin : c’est un livre plus avancé sur Forth par les deux autres pionniers de Forth. Voir aussi le livre de Rather, Forth Application Techniques (2006).
Autres ressources
- Forth Interest Group : ce site a toutes sortes d’informations intéressantes, y compris de vieux documents historiques. Malheureusement, il a aussi beaucoup de liens brisés. Mais il vaut quand même la peine d’être consulté.
- Liens vers des programmes Forth : il s’agit d’une grande collection de programmes d’exemples réels comme un tableur et un résolveur de puzzle Sudoku.
- Forth Google Group : il s’agit d’un groupe très actif d’utilisateurs de Forth qui posent et répondent à des questions.
- Forth Subreddit : ce n’est pas un forum terriblement actif, mais il y a quand même des gens bien informés dessus.
Mise en œuvre de Forth
Il y a eu beaucoup de mises en œuvre de Forth au fil des ans. Le groupe d’intérêt Forth a une longue page sur les compilateurs Forth. Ainsi, s’il vous arrive d’avoir un PDP-11 qui traîne dans votre garage, vous pouvez obtenir un compilateur Forth pour lui ! Mais pour les systèmes plus modernes, voici les options les plus courantes.
bigFORTH
Au milieu des années 1980, Dietrich Weineck, Georg Rehfeld et Klaus Schleisiek ont développé volksFORTH pour les machines 16 bits comme le PC IBM 8086 et les machines Apple, Commodore et Atari 6502.
Eventuellement, ils ont créé une version 32 bits pour l’Atari ST basée sur le 68000 (bus 16 bits). Même si volksFORTH faisait des progrès, le projet est pratiquement mort (bien qu’il ait été relancé plus tard).
Bernd Paysan était suffisamment intéressé par cette version de volksFORTH (appelée turboFORTH à l’époque), cependant, pour en faire la base de bigFORTH.
Sa première version a été publiée pour l’Atari ST en 1990. En 1995, bigFORTH avait été porté sur le 386, et l’année suivante était disponible sur Windows NT, OS/2 et Linux.
Interface graphique
À ce moment-là, Paysan a commencé à travailler sur MINOS. (Techniquement, c’est « MINOS », mais on s’y réfère normalement comme simplement « MINOS ».)
C’est une interface graphique pour bigFORTH. Il pourrait être plus facile de le considérer comme « Visual bigFORTH » comme Visual Basic, parce que c’est plus ou moins ce qu’il est. Il a d’abord été créé pour le système X-Windows. Mais il a rapidement été disponible pour Windows également.
Le développement à la fois sur bigFORTH et MINOS semble s’être arrêté autour de 2010. Cependant, ils sont tous deux facilement disponibles et assez utiles (bigFORTH est conforme à la norme ANSI). En fait, MINOS est très amusant à jouer.
ressources bigFORTH
Si vous voulez utiliser bigFORTH ou même développer pour lui, vous aurez tous les outils dont vous avez besoin :
- Code source : c’est le code de la dernière version officielle du 22 mars 2010, la version 2.4.
- Paquet Debian : un paquetage facile à installer pour toute distribution Linux basée sur Debian (par exemple, Ubuntu, Mint). Il s’installe dans /usr/local/bin, et inclut MINOS, bien qu’il soit appelé xbigforth.
- Exécutable auto-installable pour Windows : le même que le paquet Debian, mais pour Windows. MINOS est même nommé xbigforth.exe.
- Documentation (PDF) : ce livre de près de 300 pages fait office de tutoriel et de référence, écrit par JL Bezemer. Une grande partie porte sur le Forth générique et c’est de lui qu’est tiré « And So Forth… ».
- Page d’accueil de Bernd Paysan : cette page contient de nombreuses informations et exemples intéressants liés à Forth. A noter en particulier le langage de balisage basé sur Forth de Paysan.
- Dépôt bigFORTH : la destination ultime pour tous vos besoins en bigFORTH.
Gforth
Gforth est l’implémentation GNU de Forth. Il a un pedigree distingué.
Le projet Gforth a été lancé en 1992 par le créateur de bigFORTH, Bernd Paysan et Anton Ertl, avec des contributions substantielles de Jens Wilke.
C’était une combinaison de bigFORTH et du beaucoup plus ancien fig-FORTH (voir ci-dessous). Mais son histoire est tordue, puisque bigFORTH venait de volksFORTH, qui était basé sur fig-FORTH.
Etant un projet GNU, beaucoup de travail a été fait dessus depuis son démarrage. Il est maintenant complètement conforme à la norme ANSI et a atteint tous ses objectifs initiaux. La version la plus récente est 0.7.3, avec la dernière entrée (par Paysan) le 25 février 2013.
En termes d’implémentations libres de Forth, Gforth est la plus utilisée. Une partie de cela est juste parce qu’il fait partie du projet GNU et de sa disponibilité. Mais c’est aussi parce qu’il est puissant et rapide.
Ressources Gforth
Gforth a toutes les ressources dont vous avez besoin pour le mettre à n’importe quel usage :
- Code source : cette page fournit le code source de Gforth depuis la version 0.2.1 jusqu’à l’actuelle, 0.7.3.
- Paquets Debian : il existe différents paquets disponibles pour la distribution Debian Linux. Notez que selon le paquet que vous choisissez, vous devrez peut-être installer d’abord un ou plusieurs autres paquets.
- Exécutable auto-installable pour Windows : il s’agit d’une version antérieure (0.7.0) de Gforth, mais d’un moyen rapide de démarrer.
- Documentation (PDF) : ce livre de 250 pages s’applique à la version 0.7.0 de Gforth. Il est également disponible au format HTML.
- Dépôt Gforth : à peu près tout ce qui concerne Gforth peut être trouvé ici.
pForth
pForth ne semble plus être supporté, mais c’est une implémentation si intéressante de Forth qu’il vaut la peine de vérifier.
Comme nous l’avons discuté, Forth a toujours été associé au contrôle matériel. Il n’était donc pas du tout surprenant qu’une implémentation de Forth ait été créée pour le kit robotique LEGO MINDSTORMS – plus précisément, le RCX 16 bits qui est sorti en 1998.
Il semble ne jamais avoir été mis à jour pour fonctionner avec la deuxième génération, la série NXT, qui est sortie en 2006, ni avec l’actuel MV3, qui est sorti en 2013.
Bien qu’il n’y ait pas de site officiel pour pbForth, il est toujours possible d’apprendre à le connaître et même de l’utiliser. Cependant, il peut y avoir une courbe d’apprentissage abrupte, car il n’y a pas tant d’informations que ça. Et clairement, vous auriez besoin d’un LEGO MINDSTORMS RCX (ils ne sont pas si difficiles à trouver d’occasion).
Le NXT utilise un processeur complètement différent (et 32 bits), donc pbForth ne fonctionnerait certainement pas avec lui. Néanmoins, cela pourrait être amusant. Et si vous en êtes capable, vous pourriez concevablement le porter sur les kits de deuxième et troisième génération.
Ressources pbForth
Les informations disponibles sur l’internet normal sont généralement laconiques et renvoient toujours à la page d’accueil de pbForth, qui n’est plus en service depuis au moins 2010. Ce n’est que grâce à l’Internet Archive qu’une grande partie est disponible.
- Histoire de la robotique LEGO : bien que ne concernant pas pbForth, il fournit un aperçu rapide des produits LEGO MINDSTORMS.
- Introduction à pbForth (PDF) : ce tutoriel de 30 pages vous permettra de démarrer avec le langage.
- Code source de phForth : notez que pbForth est écrit en langage assembleur et en Tcl, vous devrez donc disposer de ces outils.
- Interface graphique Windows : ce fichier s’exécute, bien que le faire faire quelque chose puisse être plus compliqué. Si vous voulez pbForth pour Linux ou Mac, vous devrez utiliser le code source.
- Page d’accueil phForth Circa 2009 : cette page fournit des liens vers pas mal d’informations intéressantes sur pbForth, plus particulièrement une demi-douzaine d’exemples de scripts.
Autres implémentations
- fig-FORTH : c’était l’une des premières implémentations de Forth, créée par le Forth Interest Group. Il s’agit d’une implémentation 16 bits. Elle est disponible pour certains vieux ordinateurs merveilleux comme l’Eclipse de Data General et l’Alpha Micro, ainsi que pour les ordinateurs basés sur 8086 et 6502. Le problème est qu’il n’y a pas de fichiers exécutables – seulement du code en langage d’assemblage. Et dans la plupart des cas, seulement des fichiers PDF bitmap du code. Le code réel ne semble disponible que pour les 8088/8086, PDP-11 et 6800. (Le 6800 est un processeur 8 bits, donc apparemment, il y avait une version 8 bits de fig-FORTH.)
- SP-Forth : il s’agit d’une implémentation Forth libre pour Windows et Linux.
- 4tH : il s’agit d’une implémentation Forth facile à utiliser qui est disponible pour une large gamme de matériel (y compris le Raspberry Pi), et comprend une bonne documentation.
- SwiftForth™ : c’est le compilateur Forth de la société originale qui a apporté Forth au monde. C’est un produit commercial, mais son prix est raisonnable.