1. Intentions
2. Contraintes techniques
3. Pistes poursuivies
4. Les aides reçues
5. Documentations en ligne
6. Documentation de Gforth
7. Premiers essais de scripts
Dernière intervention le : 16/11/2003
Au départ, l'intention était de trouver un
hébergeur amical permettant d'installer un site
consacré au langage Forth, avec la possibilité
d'avoir des rédacteurs multiples et la gestion d'un ou de
plusieurs forums (foras ?).
La solution libre et gratuite SPIP semblait
évidente, jusqu'à ce qu'un copain bien
intentionné me dise : "Et pourquoi tu ne le ferais
pas en Forth... cela aurait au moins le mérite de la
cohérence...".
Pourquoi non ? la réponse est évidente : je ne
sais pas faire, alors que pour SPIP, j'ai une longue pratique et que je
sais qu'il est facile ensuite de le transmettre à d'autres
sans douleur.
Pourquoi ne pas essayer tout de même ? La seule chose que
cela va coûter, c'est du temps, or du temps,
précisément je peux en libérer pour ce
projet.
Ce qui suit est un bloc-note des expérimentations, au fil du
temps. Cela vaut ce que ça peut... A vous de voir si vous y
trouverez quelque chose d'utile. Retour
au menu
Avant de pouvoir mettre en place chez un hébergeur, il faut
pouvoir expérimenter en local à partir des
possibilités de sa propre machine. Voici donc la liste des
"contraintes" imposées par l'équipenment
personnel ainsi que par l'hébergeur pressenti (il n'en sera
pas question ici, cela reste dans le "domaine
réservé").
Système de la famille UNIX,
libre et gratuit, très répandu chez les
hébergeurs. Installé sur ma machine personnelle
ainsi que chez l'hébergeur pressenti. Le Forth retenu devra
fonctionner avec ce système, ce qui exclut les versions Dos.
La distribution actuellement installée sur la machine est la
Mandrake 9.1, mais toute distribution de Linux correctement
installée et configurée fera l'affaire.
Le dialecte Forth retenu devait fonctionner
sous Linux et éventuellement sous Windows (y compris les
Windows serveurs). Il devait surtout être bien
documenté et être assez
utilisé dans le monde pour qu'il soit possible de
récupérer de l'info à l'occasion sur
les mailing-lists.
Pour ces raisons, j'ai retenu Gforth, peut
être par ignorance d'un meilleur candidat. La version
téléchargeable inclut une documentation
hypertextuelle relative à Gforth ainsi qu'à la
norme ANSI.
Pas le choix ici : c'est le serveur de
l'hébergeur.
Pas de regrets à avoir : un ami expert à qui je
demandais :
"Et Apache, c'est un bon cheval ?"
m'a simplement répondu :
"C'est Le cheval !". (sous-entendu : rien d'autre
qui vaille...)
Alors, ce sera Apache.
La Mandrake 9.1 propose deux versions d'Apache : 1.3.27 et 2.0...
La version utilisée ici est la 1.3.27
Apache est fourni avec une documentation en ligne importante (en
anglais) et il existe au moins un livre copieux chez O'Reilly...
Retour au menu
Quand on ne sait pas, on peut emprunter plusieurs cheminements, qui,
par la suite, permettront de bâtir une démarche
méthodologique. Le tout est ici de ne pas se faire trop
d'illusion sur soi-même... J'insiste ici sur la notion de
bloc-notes, qui est comme une sorte de cahier d'expériences.
Jusqu'à présent, j'ai
procédé ainsi :
Ce point sera, bien sûr modifié en fonction de
l'évolution du travail. Retour
au menu
Les différents camarades qui ont accepté
de m'aider dans ma démarche sont
désignés ici par des initiales. Ils se
reconnaîtront mais leur anonymat est ainsi
préservé. Les extraits de
messages sont donnés ici sans "charcutage" afin de respecter
les écrits des auteurs mais aussi de façon
à ce que toute personne intéressée
puisse trouver une information pas trop incohérente..
Quant à savoir si j'ai tout compris, et dans quels
délais, c'est une autre histoire.
... Je suis tombé sur ce site:
http://arizona.speedchoice.com/~scudders/Zen_Soft/
en cliquant sur download on peut récupérer
forthwsrc.zip (...)
dans ce fichier, c'est surtout le httpd.conf qui est
intéressant :
l'exemple est en "oui une dose !" , mais ça se converti
très bien en pingoin
l'extension des fichiers forth est .4hf
F.D. :
D'après mes quelques notions et sous toute
réserve:
Le mécanisme du CGI fait en sorte qu'un programme
exécutable est appelé avec
passage de paramètres, typiquement
récupérés dans une FORM.
Il existe 2 méthodes, GET et POST. L'une fait passer les
paramètres par
l'environnement, l'autre les fait passer sur la ligne de commande. De
l'autre côté, le serveur
récupère la page
génèrée par l'exécutable
sur la
sortie standard.
L'exécutable peut être à peu
près n'importe quoi: programme en C, script
shell, etc. Du moment que Linux le reconnait habituellement en tant que
"truc" exécutable. Dans le cas des langages
ionterprétés, c'est
l'interpréteur qu'il faut lancer. Il faut bien entendu en
même temps
alimenter cet interpréteur avec un source, typiquement celui
qui génère la
page à afficher.
Je crois qu'une méthode possible est de faire en sorte que
gforth ( ou un
autre) exécute automatiquement un fichier source forth au
démarrage ( la
plupart le font). Dans ce fichier, on peut mettre le source qui
génère le
code HTML comme vous l'avez montré dans ce fichier, et au
niveau de la page
qui déclenche le CGI, il suffit d'appeler l'executable Forth.
A.V. :
Un site en Forth fait en Forth. Tu montres que tu y crois vraiment.
A ma question
> Cela s'est déjà fait ?
Il n'y a pas de raison : si tu peux récupérer les
variables d'environnement
et écrire sur la sortie standard, tu peux faire du CGI. Retour au menu
J'ai cherché de la documentation sur d'autres Forth mis en
ligne qui pourraient convenir.
La page
http://www.forth.org/compilers.html propose de nombreux
outils, avec, pour certains le code source (souvent des compilateurs
écrits en langage C).
Au bout de nombreuses heures d'essais et de lectures, j'ai ressenti du
découragement.
Il existe bien des Forth tels que Aforth, pfeforth, eforth... et leur
code source est fourni. Mais ces outils, souvent
réalisés à partir de Windows ne sont
pas facilement compilables avec Linux, dans la mesure où ils
n'intègrent pas la logique confortable :
./configure ; make ; make install
du monde Linux. Non pas que ce soit insurmontable, mais je n'ai pas
envie de perdre du temps : je n'ai pas de Windows sur ma machine
d'assembleur (n'ayant jamais acheté de license) et n'ai pas
envie d'en payer une (trop cher !) ni d'en faire un usage
illégal (affaire de respect de soi : pirater ce qu'on
méprise, c'est assez pitoyable, non ?). Retour
au menu
Elle est en anglais... comme on s'en serait douté.
Il s'agit d'un ensemble touffu de fichiers HTML, ce qui donne une
impression de parcellisation, mais aussi parfois offre une "seconde
chance" de trouver ce qu'on cherche.
A titre d'exemple, un extrait qui m'intéresse beaucoup :
Gforth in
pipes
Gforth can be used in pipes created elsewhere (described here). It can
also create pipes on its own (see Pipes).
If you pipe into Gforth, your program should read with read-file or
read-line from stdin (see General files). Key does not recognize the
end of input. Words like accept echo the input and are therefore
usually not useful for reading from a pipe. You have to invoke the
Forth program with an OS command-line option, as you have no chance to
use the Forth command line (the text interpreter would try to interpret
the pipe input).
You can output to a pipe with type, emit, cr etc.
.....
Pipes involving Gforth's stderr output do not work. Retour au menu
Soyons honnête ici : au
début, parti sur la piste de la configutation d'Apache, je
n'arrivais à rien. Rien.
Afin de ne pas perdre totalement mon temps, j'ai travaillé
sur la possibilité de fabriquer automatiquement des pages
HTML à partir de scripts écrits en Forth. Assez
rapidement, je suis parvenu à quelque chose... Sans
être certain que l'essentiel était
là... mais au moins je sortais du découragement
et pouvais commencer à réfléchir.
Voici le code source d'un fichier texte
appelé "bonjour.fs" :
#! /usr/local/bin/gforth
s" Coucou les amis " type cr
." Hello les amis" CR cr cr
." Coucou les amis "
cr
bye
Ce fichier une fois saisi avec un éditeur de texte, ouvrir
une fenêtre console et lui appliquer la commande suivante :
chmod +x bonjour.fs
Toujour dans la fenêtre console, entrer :
./bonjour.fs
Le script va :
Remarque et critique :
Le texte s'affiche effectivement, mais dans la console texte,
à la suite de la commande ./bonjour.fs. Pas sûr
que ce soit une bonne solution.
Soit le texte contenu dans le fichier
hello.fs
#! /usr/local/bin/gforth
s" /var/www/html/blabla.html" w/o create-file throw Value fd-out
s" <html> <body>Ceci est ma page Zeb"
fd-out write-file throw
s" Et qu'elle est belle..." fd-out write-file throw
s" </body></html>" fd-out write-file throw
fd-out close-file throw
bye
Remarque et critique :
La syntaxe est celle de Gforth (lire la documentation ou me demander
des éclaircissements)
Il serait mieux de désigner la cible /var/www/html/blabla.html
en faisant appel à une variable ou à une
constante.
Il s'agit là d'un exemple de faisabilité
très minimaliste, mais qui donne un résultat.
Afin d'améliorer la
lisibilité, on va créer un mot qui remplacera
fd-out write-file throw
Appelons-le ecri-dans. Cela donne :
: ecri-dans fd-out write-file throw ;
Le fichier texte, appelé ici page.txt
contient le début d'une chanson de Montéhus qui
commémore la révolte d'un régiment en
1907, dans le midi vinicole :
Gloire au dix-septième
Chanson de Montéhus (1907)
Salut, salut à vous,
Braves soldats du dix-septième
Salut, braves Piou-pious
Chacun vous admire et vous aime
Salut, salut à vous,
A votre geste magnifique.
Vous auriez, en tirant sur nous
Assassiné la République.
Le texte du script Forth, appelé creepage.fs, est le suivant
:
#! /usr/local/bin/gforth
256 Constant max-line
Create line-buffer max-line 2 + allot
( ouverture des fichiers cible et source )
s" /home/alain/siteforth/salut.html" w/o create-file throw Value fd-out
s" page.txt" r/o open-file throw Value fd-in
: ecri-dans ( écrit dans le fichier cible ) fd-out
write-file throw ;
: ferm-dans ( ferme le fichier cible ) fd-out close-file throw ;
: ferm-source ( ferme le fichier source ) fd-in close-file throw ;
: vide-fichier ( effectue le transfert source vers cible )
begin
line-buffer max-line fd-in read-line throw
while
line-buffer swap ecri-dans
repeat ;
( création de la page web cible )
s" <html> <body>" ecri-dans
vide-fichier
s" </body> </html>" ecri-dans
( fermeture des deux fichiers )
ferm-source
ferm-dans
bye
Remarque et critiques :
Le programme fonctionne, ce qui démontre qu'il est possible
de générer à la volée des
pages web en utilisant un script en Forth.
Ce résultat est très positif, si l'on
considère les faibles moyens mis en oeuvre.
Moins encourageant est le fait que la structuration du texte est perdue.
Restons modeste :
- ce qui vient d'être fait pouvait l'être tout
aussi bien en C, en Basic, avec Perl ou PhP, avec Python...
- le code Forth du dernier script fait assez baclé, ce n'est
pas "du beau Forth"... mais il est assez compréhensible pour
quelqu'un qui vient d'un autre langage.
A suivre donc.
Retour au menu