💻 Le langage Forth
Forth est un langage de programmation étonnant, à la fois retro (datant des années 70) et présentant des caractéristiques qui lui permettent de rester d'actualité.
Quelques versions de Forth
gforth ou pforth sont des versions libres de forth. Du fait de la profusion des implémentations de forth, et de la grande disparité dans la syntaxe, il peut être intéressant de choisir une version qui colle au plus près au standard ANS FORTH de 1994 (ANSI), ce que fait parfaitement pforth.
uf forth est intéressant parce qu'il utilise comme base la machine virtuelle varvara (uxn), et c'est un des rares forth moderne permettant d'afficher directement des pixels.
UF Forth (basé sur UXN et Varvara)
UF Forth (version de dev sur gitlab)
pforth, Portable ANS Forth in 'C'
ciforth (common intel forth), suit le standard ISO
Portable Forth Environment (n'est plus mis à jour depuis des années, mais suit le standard ANS)
Forth Interpreter+Compiler for WebAssembly (ANS)
Présentation de Forth pour Arduino (notamment FlashForth)
ueFORTH, avec graphisme et son
ueFORTH, version pour le web, et explications
À noter
- Une chaîne de caractères s'entre avec un point collé aux guillemets, mais il est nécessaire d'avoir un espace entre le premier guillemet et le texte qui suit :
." Ceci est du texte"
- Pour mettre une chaîne de caractères en mémoire :
s" Ceci est du texte"
- Pour l'afficher :
: chaine s" Un petit texte" ;
chaine type
- Sous gforth, pour passer des commandes à l'OS, on peut utiliser cette syntaxe en créant un nouveau mot :
: ls s" ls -alh" system ;
ensuite "ls" listera les fichiers du répertoire courant...
- Pour convertir un nombre vers une chaîne de caractères
: to-string ( n -- addr c ) s>d <# #s #> ;
- Pour simuler une boucle ("DO ... LOOP") entre 0 et 10 sur un forth qui ne possède pas ces mots :
: SIMPLELOOP CR 0 BEGIN DUP 11 < WHILE DUP 5 * . CR 1+ REPEAT ;
ce qui fera la même chose que :
: SIMPLELOOP CR 11 0 DO 5 I * . CR LOOP ;
- Utilisation de [ ] : place en mode interprétation à l'intérieur d'une définition, puis retourne en mode compilation. Par exemple :
: test 4 [ HEX ] A [ DECIMAL ] + . ;
donnera 14.
- Utilisation de LITERAL : exécute le calcul défini par les [ ]
: test 2 [ 4 1 + ] LITERAL * ;
sera équivalent à :
: test 2 5 * ;
- Pour afficher avec gforth un caractère unicode, il est possible d'utiliser xemit à la place de emit (limité aux 127 premiers caractères ascii)
240 xemit
affichera ð
Il est également possible d'entrer directement le caractère unicode dans gforth:
." 🐉"
Exemples
informatique/forth/carre.fs.txt
- Calculer si un nombre est pair ou impair :
: OddOrEven? dup 2 mod 0 = if . ." is even " else . ." is odd " then ;
Tutoriels
forth in 15 minutes ("Learn X in Y minutes")
"Starting FORTH", an essential beginner guide by Leo Brodie (en anglais)
D'autres livres, parfois obsolètes. "The complete forth" par Alan Winfield est intéressant.
Simple forth, cours en anglais
Learn 4tH the easy way (en anglais)
Manuels et références
Forth 200x Standard liste core bib
Exemples
Rosettacode Forth section (programming examples and samples)
4th
4th cx circdemo2.4th && feh circle.ppm
Autres Forth plus exotiques
ACME cross assembler compiler (C64)
Outils en Forth
Lichen, un CMS (gestion de contenu html) à partir de gemtext et gforth
Fendo, autre générateur de site statique en gforth
Galope, General-purpose Forth library.
Diverses expérimentations dans divers Forth (ANS)
Tavern, un système de fictions interactives, avec une syntaxe proche de Forth
Reflexions sur Forth
Why forth? (+ miniforth in Lua)
"Forgotten languages from my past"
Forth: The programming language that writes itself