mercredi 6 février 2013

forth n'est pas mort

Cette chronique est en réaction à un commentaire d'un internaute sur un forum qui s'étonnait qu'un programmeur utilise le langage forth. N'en déplaise à certains ce language de programmation inventé dans les années 60 par Charles H. Moore est encore utilisé de nos jours. Si on consulte l'index Tiobe sur l'utilisation des différents langages de programmations forth se retrouve en 38ième position. Considérant qu'il existe des centaines de langages ce n'est pas si mal.

Même si je n'ai personnellement pas utilisé beaucoup le forth, j'en apprécie néanmoins la grande simplicité de la syntaxe. Cette syntaxe est déroutante au début car les langages les plus utilisés de nos jours ont tous une syntaxe qui ressemble à celle du C/C++. Le forth c'est totalement différent. En forth tout est affaire de vocabulaire. Une programme est un mot qui est défini à partir des mots de bases. Donc au départ il y a un dictionnaire qui contient un certains nombres de mots et à partir de ceux-ci on défini de nouveaux mots en utilisant les mots primitifs.

En forth il n'y a pas de mots réservés, on peut même donner une novuelle définitions aux mots primitifs.

En forth la pile est la structure de donnée de base. Toutes les opérations sont effectuées sur les objets qui sont préalablement empilés par exemple pour additionner 2 nombres la sequénce est la suivante:
23 24 +

le nombre 23 est envoyé sur la pile ensuite le nombre 24 puis le mot primitif + effectue l'addition. Les arguments précèdent tourjours l'action. Si je veux définir le mot carre
: carre dup * ;
le mot : appelle le compilateur, il est suivit du nom du mot à définir ensuite de sa définition. Le mot ; termine la définition. Le seul séparateur est l'espace et un mot peut contenir n'importe quel caractère sauf l'espace, par exemple:
: 2 2 * ;
je viens de définir un nouveau mot qui s'appelle 2 et c'est tout à fait valide. Ce mot multiplie par 2 le nombre qui est au sommet de la pile. Pour ce faire il commence par empiler le nombre 2 et ensuite il appelle le mot * qui effectue la multiplication. Le résultat remplace les arguments au sommet de la pile. Bien sur il n'est pas conseiller de définir un nombre comme mot car on ne pourra plus l'utiliser jusqu'à ce qu'on est supprimer du dictionnaire le mot 2.

Le forth n'a pas simplement une syntaxe très simple il est aussi très simple de créer un compilateur pour ce langage et aussi simple de créer une machine virtuelle pour interpréter du bytecode forth. Si je devais créer une machine virtuelle pour un MCU j'utiliserais sans doute une machine à piles forth, pour sa simplicité et son économie d'espace.

Même si forth n'est pas main stream les machines virtuelles qui utilise le modèle à pile sont nombreuses, Java vm, javascript vm, .net vm, postscript vm, le firmware des imprimantes HP (HPGL), etc.

Voici quelques liens concernant forth
Introduction à forth (dernière mise à jour 2009).
rforth1 sur PIC18
groupe d'intérêt du forth (anglais)
GA-144, un chip qui contient 144 ordinateurs forth en réseau (anglais). La compagnie GreenArray a été fondée par Charles H. Moore lui-même. A 75 ans il est toujours actif.
swift forth, un produit commercial (anglais).
Le logiciel libre gforth (anglais)

Aucun commentaire:

Publier un commentaire