Le langage FORTH, inventé par Charles Moore dans les années 1960, pourrait facilement laisser penser qu'il est devenu totalement désuet : en effet, sa dernière version officielle, FORTH 2012, date de 2014, et il en va de même pour son implémentation libre la plus avancée, GNU FORTH (gforth 0.7.3), qui remonte également à la même année.
Qu'en est-il ?
Dans les faits, il semble effectivement un peu passé de mode, et ne possède évidemment pas l'engouement actuel pour Python ou Rust, ni la formidable quantité de bibliothèques additionnelles qui forment un écosystème pour du développent moderne. Est-ce un avantage, ou un inconvénient ?
Le Forth est un langage à pile possédant un dictionnaire de mots agissant sur cette pile. Un programme Forth définit de nouveaux mots qui s'ajoutent à ce dictionnaire. De part sa forte expressivité, il est possible de l'étendre et de le personnaliser facilement, aussi ce langage organique voire anarchique a été standardisé en 1994 et adopté en tant que standard international en 1997.
Les critiques que l'on fait souvent au Forth c'est que c'est un langage parfois en « lecture seule », dans le sens où le code peut devenir difficile à suivre et relire s'il n'est pas suffisamment commenté, notamment pour suivre les échanges avec la pile.
Néanmoins, sa force est également l'extrême liberté que l'on peut ressentir en l'utilisant, car il n'y a pas de garde-fou ni de limite à ce que l'on peut faire avec.
Ainsi si par exemple on redéfinit un nombre (dans l'exemple plus bas 8 en 4), il prendra pour la suite la nouvelle valeur assignée à ce symbole :
: 8 4 ;
*terminal*:1:7: warning: defined literal 8 as word ok
5 8 + . 9 ok
On peut ensuite revenir au symbole d'origine :
: 8 #8 ." c'est redevenu un huit ! " cr ;
*terminal*:12:38: warning: redefined 8
*terminal*:10:3: warning: original location ok
5 8 + . c'est redevenu un huit !
13 ok
C'est un exemple extrême, mais qui illustre bien que tout est possible en Forth : on définit les nouveaux mots du vocabulaire avec la notation :
:
définition
;
Ce qui est appréciable également avec cette notion de mots à créer, c'est que contrairement à d'autres langages, il n'y a pas obligatoirement de parenthèses pour indiquer les passages de paramètres, et cela rend l'écriture plus directe et expressive. Pour certains programmeurs, Forth c'est un mode de vie, et c'est également un retour aux fondations de l'informatique.
Les communautés existantes se comptent en quelques milliers d'adeptes seulement (sur reddit, sur facebook ou ailleurs), malgré tout elles sont dynamiques et originales. Il ressort également que beaucoup de monde a écrit "son" propre FORTH, comme une sorte de rite de passage. Et le fait est que même si c'est sans doute pas trivial, ça ne semble pas être si compliqué que ça. La recette, c'est un cœur souvent écrit en assembleur ou en C, avec quelques mots de base permettant de définir de nouveaux mots.
Un exemple : milliforth, dérivé de sectorforth, le coeur est en asm : https://github.com/fuzzballcat/milliForth/blob/master/sector.asm
le reste de la programmation s'effectuera en forth pur, à partir des quelques 13 mots de base :
https://github.com/fuzzballcat/milliForth/blob/master/hello_world.FORTH
Et la petite cinquantaine de mots rajoutés dans ces définitions permettront de sortir enfin un "hello world".
En plus de la gymnastique mentale qu'implique de l'utiliser sur son PC, et qui reste d'actualité, il y a quantité d'excellents FORTH sur les microcontrôleurs de type Arduino, ESP32 ou Raspberry Pico, et ils présentent des avantages en terme d'empreinte mémoire ou de praticité (on peut éditer le code directement sans reflasher la carte). Voici un site complet sur le sujet, en français, avec de nombreuses documentations et didacticiels : https://esp32.arduino-forth.com/
Ce système a donc ses partisans, souvent de vieux geeks pionniers de l'informatique qui ne jurent que par FORTH, mais aussi ses détracteurs qui notent également à juste titre un héritage un peu lourd et qui peut s'avérer obsolète ou fastidieux.
Mais on trouve également de nouveaux adeptes qui viennent apporter un sang neuf à la communauté du FORTH. Je vais lister ici quelques projets qui ont attirés mon attention récemment :
Un "notebook" (façon Jupiter Notebook) en Forth, avec Web Assembly, pour afficher des graphismes de type "Tortue" : https://mko.re/waforth/drawing-with-forth/
un autre forth en we assembly : https://chochain.github.io/weForth/ref/weforth.html
une démo sur le vénérable Atari TT, sortie en 2022 : https://demozoo.org/productions/310231/
un éditeur de texte fonctionnel en 164 lignes : https://github.com/flagxor/ueforth/blob/main/common/visual.fs
un kit de développement pour gameboy : https://gbforth.org/
Un petit jeu récent porté sur différents langages (Forth, Go, Pygame, Ruby, C…) : https://github.com/JeremiahCheatham/Yellow-Snow
et divers exemples comparatifs, du même auteur (Forth, Cobol et C…) https://github.com/JeremiahCheatham/SDL2-Examples/tree/main/Gforth-SDL2
des effets visuels dans le navigateur : https://forthsalon.appspot.com/
Un gestionnaire de paquet anecdotique : https://theforth.net/ (on peut voir que l'offre par rapport à Ruby, nodejs ou python est vraiment réduite
Un os complet basé sur Forth, grand frère de CollapseOS : http://duskos.org/
-
ou encore un FORTH basé sur ColorForth, avec un clavier spécifique, qui tourne dans qemu et sur certains matériels. Le PDF montre bien le côté un peu extra-terrestre de l'interface.
PC32, un autre forth basé sur ColorForth, avec rendu 3D et un potentiel intéressant : https://youtu.be/LT3BkLAZKwE?si=i3hj5BAOGhrjTj5M&t=670
Un mini ordinateur FORTH constitué de composants basiques : http://mynor.org/my4th_forthdeck.htm
Un microcontrôleur moderne dédié au Forth : https://udamonic.com/getting-started.html
encore des listes d'implémentations, comme s'il n'y en avait pas assez : https://github.com/ForthHub/wiki/wiki/Forth-Systems
Il y a pléthore de logiciels permettant de faire tourner FORTH, certains sont compatibles entre eux, d'autres moins ou pas du tout, certains donnent accès à l'interface graphique et d'autres pas du tout. Il est difficile de s'y retrouver, mais l'exploration et la découverte sont un exercice divertissant, voire rafraîchissant. Je n'ai pas réellement trouvé de logiciel tout en un qui réunit toutes les qualités pour permettre de développer facilement des logiciels avec des interfaces modernes, même si gforth semble s'en rapprocher le plus. D'ailleurs si vous souhaitez vous lancer dans cette aventure, je vous conseille de compiler la version de développement de gforth, qui a beaucoup plus de fonctionnalités que la version stable d'il y a 10 ans. Parfois je me dis que plutôt que de m'obstiner dans la voie du FORTH, je ferais mieux d'étudier python (mais je n'aime pas du tout), ou ruby, ou autre chose, mais malgré tout, on retrouve une sorte d'ascèse qui m'attire encore et toujours dans le FORTH…
J'ai réalisé un petit site qui présente mes recherches, pour le moment surtout dans des essais graphiques en mode turtue, des aventures textuelles, donc ça ne va pas bien loin, mais je m'amuse bien avec tout ceci :
Le plus complexe que j'ai pu réaliser jusqu'à présent c'est un petit générateur de schéma en origami pour réaliser des pochettes de cartes (à partir de la largeur et l'épaisseur), ainsi que l'ébauche d'un petit jeu (du cochon) tournant sur Nintendo DS via la machine virtuelle UXN.
FORTH est une sorte d'ovni dans le paysage de l'informatique, plus en avance que le Basic dans les années 70 et 80, mais également plus complexe, il a toujours été un marché de niche, et il peut sembler anachronique de continuer à l'utiliser en 2024. Pourtant FORTH a et aura toujours sa raison d'être, il semble indéboulonnable et continue d'attirer la curiosité.
# Merci pour la news
Posté par totof2000 . Évalué à 7.
J'ai toujours aimé ce langage et je le suis toujours un peu. Et aussi surprenant que celà puisse paraître, apprendre Forth a changé ma manière de développer dans tous les langages que j'utilisais : ça m'a appris à avoir un certain nombre bonnes pratiques générales telles que faire des choses simples, ne pas avoir de code trop long pour un mot (une fonction dans les autres langages), ne pas passer trop de paramètres ni avoir trop de valeurs de retour à un mot ou fonction (s'il y a besoin de beaucoup de paramètres, c'est bien souvent qu'une structure serait mieux adaptée). Avec Forth (peut-être plus qu'avec d'autres langages), si on ne respecte pas ces pratiques, on se perd bien plus vite qu'avec d'autres langages.
[^] # Re: Merci pour la news
Posté par Pol' uX (site web personnel) . Évalué à 4.
À avaler, c'est un langage un peu forth de café.
Adhérer à l'April, ça vous tente ?
[^] # Re: Merci pour la news
Posté par undeuxtroisout . Évalué à 1.
Que le Forth soit avec toi !
[^] # Re: Merci pour la news
Posté par totof2000 . Évalué à 2.
C'est vrai que parfois on se forth pour le boire.
[^] # Re: Merci pour la news
Posté par zurvan . Évalué à 2.
le livre "Starting Forth" de Leo Brodie est considéré comme un modèle du genre (https://www.forth.com/starting-forth/) mais il a également écrit un autre, intitulé "Thinking Forth", qui est une réflexion sur la manière de programmer, j'ai commencé à le lire, et les concepts sont très intéressants : https://thinking-forth.sourceforge.net/ (c'est sous licence CC-BY-NC-SA)
En gros ça met l'emphase sur le fait de simplifier au maximum le problème en le découpant en plusieurs éléments (méthode agile ?), et que chaque élément doit avoir une entrée et une sortie pour le passage des paramètres. Ensuite, le design de FORTH permet de décrire et appeler les différentes phases sans que chaque phase soit nécessairement codée.
Je ne suis pas spécialement un bon programmeur, mais j'imagine que des développeurs pro peuvent en retirer des idées intéressantes.
« Le pouvoir des Tripodes dépendait de la résignation des hommes à l'esclavage. » -- John Christopher
[^] # Re: Merci pour la news
Posté par totof2000 . Évalué à 3.
C'est effectivement par ces deux livres (je ne sais plus dans quel ordre) que je me suis mis à Forth. Ils sont très bien faits (+1 aux illustrations pour décrire les mots : les petits personnages qui amenaient les valeurs sur la pile, pour ensuite les dépiler et y empiler le résultat de ses actions …).
# gforth 0.7.9
Posté par BAud (site web personnel) . Évalué à 4.
En fait, moi aussi j'ai une 0.7.3 sur ma distribution…
Pour autant, à regarder les snapshots, il y a une 0.7.9 en cours (depuis pas mal de temps)
à partir de https://www.gnu.org/software/gforth/
il y a des snapshots référencés pour la 0.7.9 : https://www.complang.tuwien.ac.at/forth/gforth/Snapshots/
et le git indique de l'activité récente : https://git.savannah.gnu.org/cgit/gforth.git
des tar.gz sont disponibles dans le git…
[^] # Re: gforth 0.7.9
Posté par Thierry Thomas (site web personnel, Mastodon) . Évalué à 2.
D’après repology, pratiquement tout le monde reste en 0.7.3 :
gforth packages versions.
[^] # Re: gforth 0.7.9
Posté par BAud (site web personnel) . Évalué à 3.
oui, c'est une version en cours de développement…
J'ai essayé de l'empaqueter pour Mageia/Cauldron, mais ça ne compile pas avec un rebuild :/ Va falloir que je creuse du côté upstream pour voir quels changements sont nécessaires pour compiler selon leur méthode (il y a peut-être quelques changements de dépendances).
Il ne me génère même pas le configure… en même temps yavait déjà un patch pour cela dans le
gforth.spec
Il y a la procédure sur
https://git.savannah.gnu.org/cgit/gforth.git/tree/BUILD-FROM-SCRATCH
Si quelqu'un veut essayer sur debian, ça passera peut-être mieux (je regarderai peut-être semaine prochaine sinon).
[^] # Re: gforth 0.7.9
Posté par zurvan . Évalué à 2.
je ne connais pas trop l'empaquetage Debian, en tout cas ça compile facilement sur ce système. Je n'ai pas trop compris ce qui bloquait sur cette vieille version, parce qu'elle est largement obsolète, la version 0.7.9 possède une aide intégrée, une barre de tâche avec les diverses piles etc.
Peut-être qu'ils attendent que 0.7.3 sorte de stable et que la 0.7.9 soit considérée comme la nouvelle version stable.
« Le pouvoir des Tripodes dépendait de la résignation des hommes à l'esclavage. » -- John Christopher
# écriture seule
Posté par martoni (site web personnel, Mastodon) . Évalué à 6.
C'est pas plutôt «écriture seule» ?
J'ai plus qu'une balle
[^] # Re: écriture seule
Posté par Christophe "CHiPs" PETIT (site web personnel) . Évalué à 4.
"et ne possède évidemment pas l'engouement" => "et ne suscite évidemment pas l'engouement" ?
[^] # Re: écriture seule
Posté par barmic 🦦 . Évalué à 3.
Peut être que tout le monde le trouve cool à lire sans oser en écrire ? :)
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: écriture seule
Posté par Pol' uX (site web personnel) . Évalué à 4.
Le « cool à lire sans oser en écrire » est un peu l'effet que me fait les programmes Coq dans les cours de Xavier Leroy. Mais c'est pas le même genre que Forth. :)
Adhérer à l'April, ça vous tente ?
[^] # Re: écriture seule
Posté par zurvan . Évalué à 3.
oui, tu as raison, on voit parfois les deux (j'avais peut-être lu ça ici : http://www.phaedsys.org/library/blog/data/Forth_versus_C%20Howerd_Oakford%20%20v3.pdf) mais la mention "write only" est plus courante !
« Le pouvoir des Tripodes dépendait de la résignation des hommes à l'esclavage. » -- John Christopher
# The Forth Legacy
Posté par Claude SIMON (site web personnel) . Évalué à 5.
Comme sans doute quelques autres ici, j'ai adoré l'utilisation de piles et la notation polonaise inversée héritées de Forth sur mes calculateurs HP…
Pour nous émanciper des géants du numérique : Zelbinium !
[^] # Re: The Forth Legacy
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
Ce n’est pas hérité… Une calculatrice RPN est une calculatrice Forth tout simplement. Et quand on regarde le RPL (arrivé avec le modèle 28C), en interne c'est du Forth-object en quelque sorte, avec une interface type Lisp pour les nouveaux objets utilisateurs (listes, vecteurs, matrices, algébriques, chaînes) :)
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
# Postscript
Posté par dcp . Évalué à 3.
Dans le genre langage inattendu et sympa, il existe aussi Postscript qui s'inspire très forthement de Forth, si je puis dire…
# Ça ne nous rajeuni pas
Posté par Wawet76 . Évalué à 3.
Si je ne me trompe pas, la dernière fois que j'ai fait du Forth c'était sur un Palm Pilot.
[^] # Re: Ça ne nous rajeuni pas
Posté par Tonton Th (Mastodon) . Évalué à 3.
Et pour moi, un Jupiter ACE :)
[^] # Re: Ça ne nous rajeuni pas
Posté par jseb . Évalué à 4.
C'est vrai ? Le Jupiter Ace est une machine très rare, rarement mentionnée même à l'époque. "Il parle haut et forth" avait écrit Hebdogiciel, qui ne proposait d'ailleurs pas de listings pour cette machine.
Discussions en français sur la création de jeux videos : IRC libera / #gamedev-fr
[^] # Re: Ça ne nous rajeuni pas
Posté par zurvan . Évalué à 5.
C'est vrai que cette machine est devenue mythique. J'en ai vu passer une sur ebay il y a peu, c'était minimum 1300 € de mémoire.
Certain ont recréé la machine de toute pièce :
https://hackaday.io/project/165772-recreating-the-jupiter-ace
Il existe sur les cartes FPGA (type MiST), mais le clavier en qwerty le rend difficile à utiliser, sinon on trouve des émulateurs et ressources ici : https://www.jupiter-ace.co.uk/
« Le pouvoir des Tripodes dépendait de la résignation des hommes à l'esclavage. » -- John Christopher
[^] # Re: Ça ne nous rajeuni pas
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
Le bien connu Quartus Forth ou quelque chose de plus confidentiel comme ppforth ?
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
# Merci pour les nouvelles
Posté par hocwp (site web personnel) . Évalué à 6. Dernière modification le 20 juillet 2024 à 00:02.
Je suis aussi un grand fan de Forth sous toutes ses formes depuis de nombreuses années. Je pense aussi, comme totof2000 au dessus, qu'il a eu une grande influence sur ma manière de coder. Méthode très bien résumée ici Forth Methodology Applied to Programming. Comme dans le livre Thinking Forth.
Le Forth est un vrai terrier de lapin (en bon français) : on trouve toujours des choses super intéressantes dans les différentes implémentations (Gforth, pForth, zForth, retroForth, eForth, Dragon Forth et j'en passe d'autres milliers).
La dernière en date pour ma part étant Forsp qui mêle le Forth, le Lisp et le Lambda-calcul en ~700 lignes de C. Impressionnant !
De même que ce port d'eForth sur une machine SUBLEQ à 1 seule instruction. Ce qui prouve que le Forth peut vraiment tourner sur n'importe quelle machine ! Certain (ici présent) en ont même fait un OS bootable sur un vrai PC.
J'aime bien aussi la blague de
2 + 2 = 5
:Ou dans une version en colorForth custom :
Ce qui est rigolo avec le Forth c'est qu'on peut le transformer à sa manière. On veut des coroutines, il suffit de les ajouter. Des quotations (une forme de lambdas en Forth), pareil, quelques lignes.
Bref d'énormes possibilités d'exploration. Toujours un truc à trouver !
[^] # Re: Merci pour les nouvelles
Posté par zurvan . Évalué à 3.
merci pour ton témoignage :)
Intéressant ce colorforth, il faudra que je l'essaye, de même que retroforth qui semble avoir un développement continu et des facilités pour inclure du graphisme.
Ces machines subleq semblent au moins aussi compliquée que du brainfuck ! 🫠
Je n'avais pas trop compris ton exemple (qui ne fonctionne pas avec gforth, sauf si la pile n'est pas vide initialement), jusqu'à ce que je remarque que dans la plupart des FORTH, sauf gforth, DUP ne se plaint pas d'être appelé si la pile est vide. D'un autre côté, s'il n'y a rien à dupliquer, cela peut sembler logique de retourner 0. Cela fait la même chose avec OVER, mais retourne un "stack underflow" en cas de DROP.
Et pour ceux qui se demanderaient comment le 2 numéral peut encore être utilisé en tant que 2 (et non pas appelé une nouvelle fois) une fois qu'il a été "transformé" en mot forth avec la définition
: 2 dup 2 = if 3 else 2 then ;
c'est juste que lors de la définition, si je ne me trompe pas, le 2 qui est comparé (avant le =) et celui qui est renvoyé (après le "else 2") sont les versions d'origine, donc numérales.« Le pouvoir des Tripodes dépendait de la résignation des hommes à l'esclavage. » -- John Christopher
[^] # Re: Merci pour les nouvelles
Posté par hocwp (site web personnel) . Évalué à 2.
Ce colorForth est un fork de celui là. Je l'étend au grès des envies. Ce que je trouve sympa c'est qu'il tourne aussi bien sur un PC 64 bits que sur Arduino, sous DOS ou sur le web en webAssembly. J'ai encore quelques idées à mettre dedans avant de le considérer comme fini (au moins la partie centrale).
Désolé pour le
0
manquant. Il est très discrètement mis au début sur le screencast.Et oui, avec un Forth standard, la définition courante est insérée avec le mot
;
.Le colorForth utilisé ici est 'tail call' optimisé. C'est pour ça qu'il faut commencer par garder l'ancienne référence
two
au2
d'origine.Écrire
:2 ^2 ; ~2
fait partir en boucle infinie (qui n'explose pas le stack). Mais c'est volontaire d'avoir ce type de récursion.Une interrogation que j'ai à propos du Forth (ou des logiciels maison en général) est de savoir à quel point on doit / peut communiquer dessus.
Ce Forth est tellement custom et adapté à ce que je recherche que je ne suis pas sûr qu'il convienne à quelqu'un d'autre ou que ça vaille le coup d'en parler.
D'un autre côté j'ai été super content d'avoir trouver la version d'Esr35 : c'était la version minimale d'un colorForth en C sur laquelle je suis tombé.
Il y a sûrement un juste milieu à trouver (ici mettre les sources sous licence libre).
# Utilisation
Posté par barmic 🦦 . Évalué à 4.
Pardon mais est-ce qu'il est utilisé ? Les exemples que tu donne et que je trouve sur internet donnent l'impression qu'il y a plus d'implémentations que de programmes pour tourner dessus. La plupart si ce n'est tous les programmes que je trouvent ont plus l'air de toy project fait pour s'amuser avec que pour répondre à un besoin autre que d'avoir une excuse pour écrire du forth.
Ce n'est pas un mal en soit, mais c'est juste mon impression quand je tente de comprendre l'écosystème.
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: Utilisation
Posté par hocwp (site web personnel) . Évalué à 2.
Si on en croit ce que disent les personnes de chez MPE, oui il semble utilisé : https://www.mpeforth.com/sample-page/46-2/ et https://www.mpeforth.com/sample-page/about-forth-2/
GreenArrays a toujours l'air vivant https://www.greenarraychips.com/index.html
Et des fois il y a des descendants du Forth qui sortent du garage. Comme Factor par exemple https://factorcode.org/. (juste un cas au hasard)
[^] # Re: Utilisation
Posté par barmic 🦦 . Évalué à 2.
Oh c'est intéressant. De ce que je comprends ils font du matériel embarqué avec support (uniquement ?) de forth.
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: Utilisation
Posté par hocwp (site web personnel) . Évalué à 2.
Oui embarqué avec support+consulting pour MPE.
GreenArrays est à un tout autre niveau : la boite a été créée par Charles Moore, l'inventeur du Forth. Ils développent leur propre stack hardware basée sur des mini ordinateurs en parallèle, qui consomment très peu, programmés en colorForth.
[^] # Re: Utilisation
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
La plupart des programmes sont souvent soumis à des clauses ou sont dans des contextes qui rendent difficile la communication dessus.
Ceci dit, c'est effectivement plus présent dans l'embarqué où les constructeurs ont l'implémentation minimale qui répond à leur besoin (au passage ça n'aide pas à communiquer sur Forth de façon globale et générique) quitte à ce que d'autres qui vont utiliser le produit final programment avec une pile qui n'a plus rien à voir.
Du coup, ton impression n'est ni fausse ni vraie.
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
# Forth GA144
Posté par emmanuel_ . Évalué à 1.
Salut a tous ,
j'ai mis en ligne un simple article et lien vers mon site et github concernant le forth , en particulier le forth embarque avec le chip GA144.
https://www.elektormagazine.com/labs/ga144-forth-144-processeurs-programmable-en-langage-forth
http://esaid.free.fr/tutoriel_arrayforth/tutoriel_arrayforth.html
bonne lecture
[^] # Re: Forth GA144
Posté par hocwp (site web personnel) . Évalué à 1.
Mille mercis pour le partage !
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.