💾 Archived View for gem.ortie.org › gemlog › 2024-07-15.gmi captured on 2024-12-17 at 09:53:02. Gemini links have been rewritten to link to archived content
-=-=-=-=-=-=-
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 « écriture 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 ;
On peut ensuite revenir au symbole d'origine :
: 8 #8 ." c'est redevenu un huit ! " cr ;
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 :
* https://github.com/Howerd/colorForth
* http://www.inventio.co.uk/cf2023/How_to_program_in_colorForth_cf2023.pdf
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é.