Paru dans Technique et Science Informatiques, Volume 14, numéro 4, 1995.
Christian Queinnec
InterEditions, 1994, Paris, 480 pages, ISBN 2 7296 0549 5
--------------
C'est le livre d'un érudit, d'un grand spécialiste des langages de la famille Lisp. L'ouvrage rassemble sous une forme homogène et très pédagogique, un ensemble de connaissances sur les concepts et l'implantation des langages Lisp, habituellement épars ou ancien. Des sujets importants mais rarement présentés dans des livres, tels que la compilation de Lisp, le sens et l'implantation des macros, sont présentés dans cet ouvrage unique et soigné.
Un index et un système de références croisées internes agrémentent la lecture. Une bibliographie consistante et très récente complète l'ensemble. Chaque chapitre se termine par une conclusion, des exercices (corrigés en fin d'ouvrage), et un choix de lectures recommandées. Tous les programmes que contient le livre sont accessibles par Internet.
Le dialecte étudié principalement est Scheme, mais sans exclure des incursions du côté des frères, tels Common Lisp, voire ML.
La progression globale, fort étudiée, est basée sur une modification incrémentielle des concepts et des implantations. Ainsi, les chapitres 1 à 6 présentent une série d'interprètes, distinguant avec soin le langage d'implantation du langage implanté, même si c'est toujours du Lisp. Les premiers interprètes décrivent un langage pauvre avec des moyens riches, et progressivement la proportion s'inverse jusqu'à un interprète dénotationnel capturant l'essence de Scheme. Les moyens d'expression sont variés, incluant les objets. La compilation en code octet est ensuite logiquement rattachée à l'interprétation rapide. Là, on aurait apprécié les talents de l'auteur pour une comparaison avec des modèles plus anciens (SECD) ou plus récents (CAM). Un chapitre ``évaluation et réflexivité'' nous porte vers les sphères supérieures de la réification. Lisp est bien le langage qui fait éclater les limites, à la fois vers l'intérieur et l'extérieur. Le chapitre ``macrologie'' présente de façon approfondie toutes les variantes possibles de macros. Un chapitre est consacré à un sujet à la mode : la compilation de Lisp vers C, domaine dans lequel d'ailleurs l'équipe de l'auteur a obtenu de très bons résultats (Bigloo, par Manuel Serrano). Le dernier chapitre décrit l'implantation complète, en Scheme toujours, du système à objets qui a servi dans l'ouvrage.
L'auteur ne nous noie jamais immédiatement dans les détails d'implantation : les concepts sous-jacents sont toujours clairement expliqués dans des paragraphes introductifs. On comprendra ainsi les raisons profondes qui distinguent un Scheme d'un Common Lisp. Toutes les variétés de liaisons sont abordées. De même, les continuations et le fameux call/cc de Scheme sont parfaitement introduits, ou encore les systèmes à objets. Le programmeur et l'étudiant curieux, autant que le spécialiste, sont donc dans la portée de l'ouvrage. Le tout est d'une grande rigueur, et extrèmement détaillé.
Cette rigueur se trouve huilée par des qualités littéraires tout-à-fait réjouissantes. Voir notre langue si à son aise dans un ouvrage technique n'est pas tellement courant, surtout dans un domaine où l'anglo-saxon règne en despote. L'anglais n'est pas pour autant éradiqué comme une maladie honteuse, mais simplement asservi au rôle de marqueur syntaxique. Des tournures françaises agréables sont toujours là pour remplacer les termes anglais habituels, avec une correspondance immédiatement indiquée. On aimera par exemple : rustine (pour patch), élagueur (pour tree-shaker), position proéminente (pour top level form), arpentage (pour code-walking) ... j'en laisse pour votre plaisir.
En conclusion, c'est un ouvrage brillant et très précieux. Il contient un état de l'art sur un ensemble de techniques élaborées pendant plus de trente ans par une communauté internationale d'informaticiens imaginatifs, dont une bonne part de français. Ces techniques ont servi une certaine philosophie de la programmation, et ont abouti à des outils réellement productifs, dont certains sont normalisés. Lisp est toujours un langage vivant, avec ses parties assagies au cours du temps et ses recoins toujours sulfureux. L'ouvrage de Christian Queinnec nous le montre bien. Étudier les langages Lisp, c'est étudier un peu tous les autres.
Le 27 Février 1995
Michel Lemaître
ONERA/CERT/DERI
e-mail: Michel.Lemaitre@cert.fr