	Un langage original: le FORTH.
	******************************


	Vous en avez plus qu'assez du 'C', votre Basic ne fait pas trs
'pro' et l'assembleur vous rebute? Prenez une voie alternative: celle du
FORTH!
	Plus facile que le 'C', plus patant que le Basic, aussi 'machine'
que l'Assembleur, il ne lui reste qu'un dfaut... Oui: le seul dfaut du
FORTH est que tout le monde s'en fout et que, par voie de consquence,
personne ne s'en sert. Et c'est bien dommage, car on prend inmanquablement
plaisir  programmer avec cet outil hors du commun.

	Un peu d'histoire
	-----------------

	Cr vers la fin des annes 60, ce langage servait  piloter des
systmes en temps rel: aquisition de mesures, robots, etc... Il avait
l'avantage de la compacit et de la rapidit tout en donnant un certain
confort au programmeur que l'assembleur ne lui apportait pas.
	Certaines bornes d'arcade Atari utilisaient galement ce langage:
compacit, rapidit, confort: tout ce qu'il faut pour un jeu!
	Au temps de l'explosion des micro ordinateurs, ce langage fut
rgulirement port sur chaque systme: des versions Commodore, Thomson,
Apple, IBM PC, Atari etc... virent le jour, chacun apportant son lot de
particularits. Une machine fut mme cre autour de ce langage: le
Jupiter Ace qui, une fois n'est pas coutume, n'offrait pas le bon vieux
Basic Microsoft en ROM.
	Le nom mme de FORTH est un raccourci de 'fourth' (quatrime), car
son auteur tait persuad de crer un langage de 4me gnration, et son
systme de fichier refusait les noms de plus de 5 caractres...

	Ben oui, mais la norme?
	-----------------------

	Je crois qu'on peut l'oublier illico. Ce qui fait la puissance et
l'intrt de ce langage c'est son principe et non pas sa syntaxe.
D'ailleurs, il est difficile de parler de syntaxe tellement l'criture est
libre. Quelque soit la version, vous vous amuserez avec.

	Bon d'accord, mais le principe alors?
	-------------------------------------

	Tout tourne autour d'une pile de donnes. Ceux qui ont eu une
calculatrice HP savent de quoi je parle. L'interprteur ne fait que lire
les lignes de commande:
	- tout nouveau nombre rencontr est simplement dpos sur le
	sommet de la pile
	- tout autre mot est une instruction qui va modifier le contenu de
	cette pile
	Par exemple, le mot '+' retire les deux nombres du sommet de la
pile et y dpose en retour leur somme. Donc pour calculer et afficher la
somme 13+45, je tape en FORTH:
	13 45 + . [Return]
	Dtaillons:
	13 -> dpos sur la pile (13)
	45 -> dpos sur la pile (13 45)
	+  -> prend 45 et 13 et dpose 45+13=58  la place  (58)
	.  -> prend 58 et l'affiche (le '.' sert de PRINT pour les
	      nombres)

	Autre exemple: (2+3)*8-(7+5), il suffit de taper:
	2  3  +  8  *  7  5  +  - . [Return]
	Dtaillons:
	2  -> dpos (2)
	3  -> dpos (2 3)
	+  -> calcul (5)
	8  -> dpos (5 8)
	*  -> calcul (40)
	7  -> dpos (40 7)
	5  -> dpos (40 7 5)
	+  -> calcul (40 12)
	-  -> calcul (28)
	.  -> affichage de la valeur 28 ()
	Essayez vous-mmes cette autre squence pas  pas et vous verrez
qu'on arrive au mme rsulat: 8  2  3  +  *  7  5  +  -  .

	Voyez que cette mthode demande un pr-travail  l'utilisateur
mais qu'on y gagne largement  l'excution puisque l'ordinateur n'a plus 
se proccuper de priorits opratoires ni d'optimisations: c'est
le programmeur qui s'en est charg! Ceci permet galement de loger des
interprteurs FORTH dans peu de place et convient bien aux petits systmes
portables.

	Encore mieux: le Dictionnaire
	-----------------------------

	Le FORTH sait aussi traiter les chaines de caractres, les nombres
rels, les structures, les ensembles, les tableaux, etc... Il sait faire
des boucles et des tests. Mais ce qui fait galement sa puissance c'est
sont dictionnaire extensible. En FORTH, on ne parle plus trop de commande,
de fonction ou d'instruction mais uniquement de mot. Un mot est un objet
ayant une action sur la pile et/ou des effets secondaires (affichage,
fichiers, etc...).
	Au lancement, il possde un vocabulaire de base (les oprations,
les E/S...) qu'on peut utiliser, par combinaison, pour crr un nouveau
mot plus complexe. De mme qu'un humain apprend un nouveau mot  partir
d'une dfinition utilisant des termes qu'il connait. Au lieu de dire
'publication qui sort chaque mois' on dit 'mensuel' (ou 'ST Mag').
	C'est le couple ': ;' qui se charge d'une nouvelle dfinition:
	: triple 3 * ;
	Qui est interprt ainsi:
	:       -> le mot suivant est nouveau, crer une entre
	triple  -> ce mot est ajout au dictionnaire
	3	-> ajout  la dfinition de triple
	*	-> ajout  la dfinition de triple
	;	-> fin de dfinition
	De sorte que, maintenant le mot triple lancera l'excution de la
squence '3 *' chaque fois que l'interprteur le rencontrera. Par exemple:
	15 triple . [Return]
	Sera interprt ainsi:
	15      -> empil (15)
	triple  -> lance '3 *' (45)
	.       -> affiche 45

	A son tour, le mot triple peut tre utilis dans la dfinition de
nouveaux mots puisqu'il est maintenant connu. La seule limite est votre
imagination ou la RAM de votre machine.

	Toujours mieux: une conomie de variables
	-----------------------------------------

	Vous remarquerez que le mot 'triple' n'utilise pas de variable, ni
locale, ni globale. Pour avoir l'quivalent en BASIC:
	function triple(a%)
		return(3*a%)
	endfunc
	Qui fait appel  un a%! Rien n'est plus pnible que d'inventer les
noms des variables locales, on hsite entre le nom trs parlant mais 
rallonge et le nom bateau (x,y,i ...) qui peut porter  confusion si il
est employ diverses fois  des fins diffrentes.
	En FORTH, on vite ce casse tte: les variables locales sont le
plus souvent des valeurs sur la pile qui disparatront en fin de mot.

	Sachez que la compilation 'C' d'une fonction amne  la cration
d'une pile dans laquelle seront copies les variables locales! Le FORTH
fait l encore une grande conomie: il utilise de manire visible ce
systme, ce qui amne le programmeur  optimiser (sans le savoir) son code
par rapport  une fonction 'C' dont on ne connait pas forcment le
fonctionnement interne.

	Le summum: l'interactivit
	--------------------------

	Lorsqu'un mot est cr, il est tout de suite disponible. Par
exemple,  des fins de mise au point, je peux crer un mot 'debug'
m'affichant le contenu une zone mmoire. J'excute alors pas  pas mon
programme et utilise 'debug' ds que je veux visualiser cette zone.
	On peut aussi imaginer des mots qui influencent l'diteur mme!
Essayer en GFA de faire une fonction qui modifie le comportement de
l'diteur GFA (pas tout  fait impossible)! Quant au 'C', c'est l'exemple
mme de ce qui n'est pas interactif: ce que vous crez ne sera oprationel
qu'aprs compilation au sein d'un PRG!

	La cerise: une bonne philosophie
	--------------------------------

	Alors que le 'C++' s'oriente vers une globalisation 'tout est
objet', le FORTH est dfinitivement orient vers 'tout est adresse'. Pour
le 'C++', un entier, un pointeur, un ensemble, une procdure: tout est
objet avec ses caractristiques, ses hritages, ces fonctions associes,
etc... Tous ces concepts tentent de rapprocher le langage de conceptions
humaines, mais  mon avis, ne font qu'alourdir la programmation et
loignent le programmeur encore plus du fonctionnement de la machine qu'il
utilise.
	Au contraire, pour le FORTH, une variable entire est une adresse
vers une zone de 4 octets, un mot est une adresse vers sa dfinition,
utiliser une variable c'est lire  une adresse, etc... En peu de temps,
vous devenez un 'pro' de l'adressage, vous manipulez alors, au sein d'un
langage volu, des concepts machine qui vous poussent en douceur  coder
selon des principes machine, ce qui optimise vos programmes de manire
naturelle puisqu'ils seront excuts, non pas par un CPU 'Objet' (a
n'existe pas encore), mais par un CPU manipulant des adresses et des
entiers... ben oui!

	C'est bien beau, mais l'Atari l dedans?
	----------------------------------------

	Comme sur les autres systmes, des FORTH sur nos ST sont apparus
trs tt. L'ennui, c'est qu'ils se contentaient d'une version texte
offrant un simple interprteur de commande. On imagine mal aujourd'hui
accepter cette restriction.
	Dans cette optique, j'ai implant une version GEM du FORTH qui
offre en un seul bloc:
	- un interprteur de commande
	- un diteur en fentre (pour les longs projets)
	- un compilateur en RAM (mot acclrs)
	- le lien avec un assembleur de votre choix (le texte est dans le
	projet FORTH et est assembl par un TTP externe)
	- support d'une grosse partie des appels TOS (GEMDOS, BIOS, XBIOS,
	VDI, AES).

	Il existe galement un vrai compilateur sortant des PRG (GEM ou
logeables dans un dossier AUTO mais avec la VDI utilisable) ou des ACC si
vous avez programm proprement.

	La conclusion
	-------------

	Je n'allais pas squatter la disquette avec un langage oubli de
tous, mais si j'ai russi  veiller votre intrt, sachez que ce fameux
FORTH est disponible chez moi en version 68000 ou 68030/68882 pour toute
la gamme Atari contre une disquette et un timbre  4F50. Veuillez prciser
le type de votre machine ainsi que votre prfrence pour le manuel: *.TXT
(ASCII tout bte) ou *.STW (document Atari Works).
	Je recherche galement la disquette accompagnant l'mulateur
Vortex ATonce 286... merci!

	Guillaume Tello
	240 rue Estienvrin
	49260 Montreuil Bellay
	E-mail: gtello@wanadoo.fr