Skip to content

2.6 Implanter un interpréteur en C : Lisp est mon Guide (brouillon 1)

Claude Roux edited this page May 31, 2022 · 1 revision

Une vieille histoire

J'ai commencé l'informatique il y a longtemps... Très longtemps... Avant Internet... Bien avant Internet. Ma première machine offrait 15,772 octets de mémoire vive, un fichier Word vide n'aurait pu y tenir. C'était il y a plus de 40 ans, en 1981.

BASIC

A l'époque, BASIC était le seul langage disponible. Enregistré dans la ROM, il se lançait en même temps que la machine. Tout était «BASIC»... y compris le shell et l'éditeur lui-même. Pour aller plus loin, il n'y avait qu'une solution, programmer directement en langage machine, et quand c'était possible en assembleur.

Assembleur

Je fais la distinction, ce qui peut surprendre un lecteur moderne averti. En effet, l'assembleur est en fait un langage où les codes machines sont traduits sous la forme de mnémoniques. Un compilateur traduisait ces mnémoniques en une suite d'octets que l'on stockait dans une section data et que l'on plaçait en mémoire via des instructions peek et poke.

Comme vous pouvez le deviner à la lecture de ce paragraphe, la programmation était on ne peut plus fastidieuse. De toute façon, de nombreux logiciels étaient à l'époque développés sur mini-ordinateurs puis portés pour les différents processeurs et architectures présentes sur le marché.

Mais bon, à ma petite échelle, l'accès à de telles machines étaient inconcevables. Si vous pensez que j'ai la nostalgie de cette époque... Ben non... Vraiment pas. Mais les contraintes que de telles machines imposaient obligeaient malgré tout à de belles gymnastiques de l'esprit. Mais soyons clairs, ces trucs et astuces pour aller plus vite ou économiser de la mémoire n'ont absolument plus aucun sens aujourd'hui. Même si je pense qu'un informaticien digne de ce nom doit avoir au moins une fois dans sa vie implanté quelque chose en assembleur, juste pour comprendre ce qui se trame dans un processeur, je ne suis pas sûr qu'apprendre l'informatique dans 15,772 octets amène grand chose.

Revenons à nos moutons

Evidemment, cette introduction peut paraitre un peu bizarre par rapport au titre de cet article. C'est quoi le rapport?

En fait, dès cette époque, les limitations du BASIC avaient commencé à me porter sur les nerfs. Tout était tellement lourd, tellement compliqué et pourtant tellement accessible.

Python

Aujourd'hui, le langage qui se rapproche le plus de cette expérience est certainement python. On entre dans le shell, on commence à jouer avec les structures de données, à faire des bouts de programme de façon dynamique, une approche légère, sans trop de contrainte, qui rappelle bien cette époque où les limitations de la machine nous épargnait la vraie complexité sous-jacente.

Notre propre interpréteur

Nous avons voulu redonner cette expérience ici avec notre propre interpréteur LispE, qui permet aussi de jouer avec le langage dans un interpréteur dynamique.

Mais, notre propos ici n'est pas uniquement de parler de LispE, il s'agit plutôt d'expliquer comment il fonctionne.

Clone this wiki locally