Les Racines de Lisp
Mai 2001
(J'ai écrit cet article pour m'aider à comprendre exactement ce que McCarthy a découvert. Vous n'avez pas besoin de connaître ces choses pour programmer en Lisp, mais cela devrait être utile à quiconque souhaite comprendre l'essence de Lisp — à la fois dans le sens de ses origines et de son cœur sémantique. Le fait qu'il possède un tel cœur est l'une des caractéristiques distinctives de Lisp, et la raison pour laquelle, contrairement à d'autres langages, Lisp a des dialectes.)
En 1960, John McCarthy a publié un article remarquable dans lequel il a fait pour la programmation quelque chose de similaire à ce qu'Euclide a fait pour la géométrie. Il a montré comment, à partir d'une poignée d'opérateurs simples et d'une notation pour les fonctions, on peut construire un langage de programmation entier. Il a appelé ce langage Lisp, pour "List Processing" (Traitement de Listes), car l'une de ses idées clés était d'utiliser une structure de données simple appelée une liste pour le code et les données.
Il est utile de comprendre ce que McCarthy a découvert, non seulement comme un jalon dans l'histoire des ordinateurs, mais aussi comme un modèle de ce que la programmation tend à devenir à notre époque. Il me semble qu'il y a eu jusqu'à présent deux modèles de programmation vraiment clairs et cohérents : le modèle C et le modèle Lisp. Ces deux-là semblent être des points élevés, avec des terres basses marécageuses entre eux. À mesure que les ordinateurs sont devenus plus puissants, les nouveaux langages développés se sont déplacés constamment vers le modèle Lisp. Une recette populaire pour les nouveaux langages de programmation au cours des 20 dernières années a été de prendre le modèle de calcul C et d'y ajouter, petit à petit, des parties tirées du modèle Lisp, comme le typage dynamique (runtime typing) et le ramasse-miettes (garbage collection).
Dans cet article, je vais essayer d'expliquer dans les termes les plus simples possibles ce que McCarthy a découvert. L'objectif n'est pas seulement d'apprendre un résultat théorique intéressant que quelqu'un a trouvé il y a quarante ans, mais de montrer où les langages se dirigent. La particularité de Lisp — en fait, la qualité qui définit Lisp — est qu'il peut être écrit en lui-même. Pour comprendre ce que McCarthy voulait dire par là, nous allons retracer ses pas, avec sa notation mathématique traduite en code Common Lisp fonctionnel.