ACBM - Le Virus Informatique qui vous défend !Retour à l'accueilLes brèvesLe magasinContacts Ecrire dans le virusListe de diffusionPetites annoncesLes concours



Paru dans Le Virus Informatique n°1
1997-02-01 00:00

Que le Forth soit avec vous


Avec l'avènement de Windows et des langages visuels, beaucoup de programmeurs amateurs se sont détournés de cette activité. Les langages objets, très attirants au demeurant, masquent en réalité une bonne partie du travail nécessaire - un programme se résumant à l'utilisation de bibliothèque de fonctions déjà développées. Nous allons tenter dans cette rubrique de vous faire découvrir quelques langages qui vous donneront à nouveau le goût de la programmation et de mettre les mains dans le cambouis informatique.

Le Forth fut créé dans les années 60, par un homme seul : Charles Moore. Ses caractéristiques étant très différentes des langages disponibles à ce moment, il fut nommé Fourth pour langage de quatrième génération. Mais programmant sur un IBM 1130 qui n'acceptait pas les identificateurs de plus de 5 caractères, le nom fut tronqué en Forth. On le voit, IBM bridait déjà la créativité des programmeurs... Comme tous les langages de cette époque, mais plus particulièrement pour le Forth, la faible puissance de calcul et les quelques kilo-octects de mémoire des machines obligeaient à utiliser un code compact, optimisé afin d'utiliser au mieux les ressources disponibles. Comme vous avez pu le remarquer, Bill n'a jamais été un accroc du Forth... Même si nos ordinateurs sont bien plus puissants maintenant, cette compacité et cette optimisation sont toujours de réels avantages. Quel utilisateur se plaindra d'une vitesse accrue ? Et côté programmeur, une application écrite en Forth demande quelques lignes là où en Pascal, plusieurs procédures avec échange de paramètre seraient nécessaires. De plus, le Forth fonctionne à la fois de manière interprétée et compilée. Il cumule ainsi les avantages de la souplesse de débogage et de la rapidité d'exécution (une fois qu'on est sûr de soi). Enfin, c'est un langage qui s'adapte très bien aux contraintes des petites et anciennes machines, PC XT d'origine avec 64 ko (!) de Ram ou même aux portables de poches du type Atari Portfolio.

Un langage de 4ème dimension

Regardons de plus près les particularités de ce langage. La grande différence de conception avec les autres est l'utilisation explicite d'une pile. Non, non, rangez votre Duracell bâton AA 1,5 V et laissez votre micro branché sur le secteur 220 V... Cette pile est l'endroit où sont stockées vos variables. Pour ceux qui ne pigent pas les piles, l'analogie classique se fait avec une pile d'assiette. Seule l'assiette supérieure est accessible, les autres se découvrant au fur et à mesure du dépilage. L'utilisation de cette pile force à une optimisation de chaque instant des variables utilisées et rend l'accès aux données extrêmement rapide, le microprocesseur sait toujours où les chercher. Dans cette pile, les valeurs stockées peuvent être de différents types : numériques, alphanumériques ou adresses mémoire d'une variable de n'importe quel type.

Une autre différence est l'utilisation de la notation polonaise inverse qui, même si elle peut être déconcertante pour nous autres habitués à la notation classique, permet de régler définitivement les problèmes de priorité des opérateurs arithmétiques et de ne plus utiliser de parenthèses. Chaque expression en notation polonaise inversée est univoque.

Comme tous les langages, le Forth contient un certain nombre de fonctions qui forment son dictionnaire. A ce dictionnaire, viendront s'ajouter toutes les procédures que vous allez créer. La conception d'un programme consistera donc à enrichir ce dictionnaire.

Une gymnastique intellectuelle

Conséquence : le programmeur habitué au C ou au Pascal devra faire quelques efforts pour s'adapter à ce mode de pensée. Occuper au minimum la pile, ne conserver que le nécessaire et utiliser la notation polonaise inverse rend la programmation propre et optimisée obligatoire. Dans un premier temps, le travail sera peut être plus long mais au final on gagnera du temps. Un proverbe ne dit-il pas " on ne programme qu'une fois alors qu'on exécute le programme plusieurs fois " ? Les quelques exemples joints illustrent la puissance du Forth, mais également le raisonnement particulier qu'il faut suivre pour programmer dans ce langage.

Dernier avantage du Forth et non le moindre : complètement délaissé par les grands éditeurs de logiciels, le langage est à un prix accessible de tous. Vous trouverez des compilateurs dans le domaine public (gratuits) ou à des prix très réduits : environ 100 F pour le Turbo Forth (édité par MP7), y compris dans sa version Windows ! Comme rien n'est rose, je garde le défaut pour la fin. Trop rapide, ce langage est inutilisable sur Pentium. Je recherche donc pour un usage personnel un 8088 à 4,77 Mhz qui me sera amplement suffisant. (écrire à la rédaction qui transmettra).


Les secrets d'une telle vitesse

Utilisation de pile, langage semi-compilé, préférence pour les entiers... Les raisons de la vitesse exceptionnelle du Fort sont nombreuses. En voici une autre qui risque d'en choquer certains parmi vous : il n'y a aucun contrôle sur la validité des opérations. En effet, ces contrôles se paient par une perte de temps. A l'utilisateur donc de savoir s'ils sont utiles ou non et de les placer lui même.

Un exemple : tapez 1 0 / . (diviser 1 par 0), vous n'obtiendrez aucun message d'erreur mais -1. Un résultat négatif ? Les initiés auront compris qu'il s'agit aussi du plus grand nombre connu par leur ordinateur sur 16 bits non signé, c'est à dire 65535. L'ordinateur essaie donc de s'approcher au mieux de l'infini, véritable résultat de l'opération précédente. Moi, je dit bravo.


Premiers pas

On arrête le verbiage et on regarde à quoi cela ressemble. Tous ces exemples sont en Turbo Forth, une évolution du Forth 83-standart. Commençons par un exemple de polonaise inverse. En mode direct interprété, calculons :

5 8 *

Cette ligne empile 5, puis 8 et enfin multiplie ces deux valeurs, le résultat est stocké au sommet de la pile.

La commande '.' dépile et affiche le sommet de la pile. C'est à dire : 40.

Mettons tout ça en procédure, que l'on appelle " mot " en Forth.

: addition

+ . ;

Entre les deux points et le point virgule, Forth compile, avant et après, il interprète. On a donc défini le mot addition, par l'addition des deux valeurs au sommet de la pile et l'affichage du résultat.

5 8 addition

affiche 13.

addition fait maintenant parti du dictionnaire de votre Forth. La commande dark words qui liste le dictionnaire vous le confirmera.

Un peu plus dur :

: carre

dup * . ;

Plusieurs commandes manipulent la pile : drop, swap, over, rot, -rot, pick, roll, etc. Dup duplique le sommet de la pile. Carre calcule donc le carre du sommet de la pile.

Encore mieux :

: debile

dup 1 - dup 1 >

IF RECURSIVE THEN *;

Debile duplique le sommet de la pile, lui soustrait 1, le compare à 1, puis si la comparaison est vrai, debile multiplie le sommet de la pile, sinon il recommence. Vous avez trouvé à quoi sert ce mot ? Allez, un petit effort... Le mot RECURSIVE devrait vous aider. Factorielle remplace débile pour ceux qui ont trouvé, les autres le gardent.

Ces mauvais exemples n'ont pour simple but que d'attiser votre curiosité sur cette syntaxe particulière et de vous inciter à redécouvrir le plaisir de programmer soi-même. Souvenez vous de votre premier Print, de vos Goto et autres If then else... N'hésitez pas, apprenez un nouveau langage, et cela vous réconciliera avec votre Pentium W95.


Sylvain Cadet


Vous aimez cette page ? Partagez-en le lien sur les réseaux sociaux !

Facebook
Twitter
Google+
LinkedIn


Retour aux archives
Retour à l'accueil
[RSS]
Legal & cookies