août
2010
Le projet dodo a commencé il y a bien longtemps, et l’idée de mettre ses concepts en pratique me trottait dans la tête depuis un bon moment. Malheureusement je ne voyais pas clairement comment m’y prendre.
Eh bien grâce à une suggestion que l’on m’a faite, il semble que j’aie finalement la solution.
Pour pouvoir exécuter un programme dodo, le plus simple serait probablement d’écrire un interpréteur. Cependant j’anticipais des difficultés certaines avec cette approche et comme il faudra de toute façon écrire un jour un compilateur pour questions de performance, le jeu n’en vaut pas la chandelle.
Donc je voulais écrire un compilateur. Celui-ci va prendre en entrée un programme dodo, et produire en sortie un programme que l’ordinateur peut exécuter. L’ordinateur exécute les instructions en langage machine, mais on passe généralement par l’assembleur pour le générer. Très bien. Seulement je ne suis pas exactement confortable avec l’assembleur; la recherche d’un expert pour m’aider s’est conclue en rentrée bredouille.
Il y a d’autres solutions. Par exemple, la JVM (le programme qui exécute Java) possède un assembleur simplifié, de même pour LLVM. Cependant ces assembleurs ont l’inconvénient de ne pas offrir le GOTO. Certes, l’instruction GOTO n’est pas appropriée pour un langage de haut niveau qui se doit d’être maintenable, mais son absence d’un langage de très bas niveau comme un assembleur me chagrine.
J’ai découvert que le langage C, dans la version étendue de gcc, permet le GOTO local à une procédure. J’ai pu l’utiliser pour traduire un petit programme « HelloWorld » de dodo en C. Il semblait y avoir une possibilité de traduire automatiquement les programmes dodo en C et de les compiler grâce à gcc, ce qui me convenait bien. Cependant le GOTO de gcc est limité à 255 labels ce qui n’est pas suffisant pour dodo.
Une autre idée est de remplacer le GOTO par un SWITCH, et en effet on peut aller plus loin de cette façon. Mais à ce point je me préoccupait déjà de la gestion de la mémoire pour les variables et cette approche n’était pas des plus prometteuses.
C’est alors qu’en visite auprès de ma famille, un parent (merci Romain!) à qui je parlais de dodo m’a suggéré les pointeurs de fonction. C’était suffisant pour m’orienter vers une nouvelle solution.
Le site du projet dodo:
http://dodo.sourceforge.net