Lorsque les programmeurs discutent des avantages de divers langages de programmation, ils en parlent souvent en termes prosaïques, comme des outils dans un ensemble de différents appareils - l'un est plus approprié pour la programmation système, l'autre pour coller d'autres programmes pour résoudre le problème actuel. Il devrait en être ainsi. Les langues ont des forces différentes, et affirmer qu'une langue est meilleure que les autres langues sans spécifier d'exemples spécifiques ne signifie que provoquer des débats improductifs et vifs.
Cependant, il existe une langue qui suscite étrangement le respect universel: le
lisp . Les croisés des claviers, prêts à attaquer tous ceux qui osent déclarer que n'importe quelle langue est meilleure que les autres, conviennent que Lisp est à un niveau différent. Cela va au-delà des critères utilitaires jugés par d'autres langages, car le programmeur moyen n'a jamais utilisé Lisp pour créer quoi que ce soit de pratique, et ne le sera probablement jamais, cependant, le respect pour Lisp est si profond qu'il est souvent crédité de propriétés mythiques. Les bandes dessinées xkcd préférées de tous ont donc dépeint Lisp au moins deux fois: dans une bande dessinée, un personnage atteint l'illumination de Lisp, ce qui l'aide à comprendre la structure fondamentale de l'univers. Dans un autre, un ancien programmeur en robe de chambre remet une pile de parenthèses à son padawan, expliquant qu'il s'agit «d'une arme élégante pour des temps plus civilisés», faisant allusion aux possibilités occultes de la
Force inhérente à Lisp.
Un autre excellent exemple est la parodie de la chanson «God lives on Terra» de Bob Kanefsky. Sa parodie a été écrite au milieu des années 90 et s'appelle "Eternal Flame". Elle décrit comment, apparemment, Dieu a créé le monde avec l'aide de Lisp. Ce qui suit est un extrait, et la version complète peut être trouvée sur le site Web de
GNU Humor Collection :
Après tout, Dieu a écrit en Lisp
Quand il a rempli les feuilles de vert.
Fleurs fractales et racines récursives:
Le plus beau hack que j'ai jamais vu.
Et quand j'étudie les flocons de neige
Et je n'en trouve pas deux identiques
Je sais que Dieu aime la langue
Avec son propre nom à quatre lettres.
Je ne parle que pour moi, mais il me semble que le mème culturel «Lisp est une magie secrète» est le phénomène le plus étrange et intéressant. Lisp a été conçu dans une tour d'ivoire comme un outil de recherche sur l'intelligence artificielle, il sera donc toujours un peu inconnu et mystérieux pour les programmeurs ordinaires. Cependant, maintenant les programmeurs se
poussent mutuellement "essayez Lisp avant de mourir", comme s'il s'agissait d'une sorte de drogue psychédélique qui élargit la conscience. Ils le font malgré le fait que Lisp est le deuxième plus ancien des langages de programmation qu'ils utilisent encore, juste derrière
Fortran , et ce n'est qu'un an. Imaginez que la société ou l'équipe qui l'a développé vous demanderait de publier un nouveau langage de programmation. Ne serait-ce pas cool de pouvoir convaincre tout le monde que votre nouvelle langue a des pouvoirs divins? Mais comment y parvenir? Comment le langage de programmation est-il devenu célèbre en tant que source de connaissances secrètes?
Comment Lisp en est-il arrivé là?
Couverture du magazine Byte, août 1979Théorie A: langage axiomatique
John McCarthy , le créateur de Lisp, n'a pas initialement cherché à faire de Lisp l'essence élégante des principes de calcul. Mais, après une ou deux idées réussies et plusieurs améliorations, Lisp est devenu exactement cela.
Paul Graham - nous en parlerons plus tard - a écrit que, après avoir créé Lisp, McCarthy "a fait la même chose pour la programmation qu'Euclid pour la géométrie". Peut-être que les gens recherchent un sens plus profond en Lisp, parce que McCarthy l'a créé à partir de parties si fondamentales qu'il est difficile de dire s'il l'a inventé ou découvert.
McCarthy a commencé à réfléchir à la création de la langue lors du
projet de recherche sur l'intelligence artificielle d'été de Dartmouth en 1956 . Cet atelier était une conférence académique continue de plusieurs semaines, la toute première dans le domaine de l'IA. Soit dit en passant, c'est McCarthy, alors professeur agrégé de mathématiques à Dartmoor, qui a inventé le terme «intelligence artificielle», proposant de tenir cette réunion. La conférence a réuni une dizaine de personnes. Parmi eux, Allen Newel et Herbert Simon, deux chercheurs associés à RAND Corporation et à l'Université Carnegie Mellon, qui venaient de terminer le développement du langage
IPL .
Newel et Simon ont essayé de créer un système capable de fournir des preuves dans la
logique des énoncés . Ils ont réalisé qu'il serait difficile de le faire, en restant au niveau de leurs propres instructions informatiques, alors ils ont décidé de créer un langage - ou, comme ils l'appelaient, un "pseudo-code" - qui les aiderait à exprimer plus naturellement le travail de leur "machine de logique théorique". Leur langage, IPL, le "langage de traitement de l'information", ressemblait plus à un dialecte d'assembleur de haut niveau qu'à un langage de programmation au sens moderne. Newel et Simon, faisant peut-être référence à Fortran, ont noté que les «autres pseudo-codes» alors en développement étaient «occupés» à représenter les équations en notation mathématique standard. Au lieu de cela, leur langage s'est concentré sur la présentation des déclarations comme des listes d'expressions symboliques. Les programmes IPL ont utilisé des séquences d'assemblage de macros pour traiter et évaluer des expressions dans une ou plusieurs de ces listes.
McCarthy a pensé qu'il serait utile d'avoir des expressions algébriques dans une langue similaire à Fortran. Par conséquent, il n'aimait pas l'IPL. Mais il pensait que les listes symboliques sont un bon moyen de modéliser les tâches du domaine de l'IA, en particulier celles qui incluent la déduction. C'était le germe du désir de McCarthy de créer un langage de traitement de liste algébrique, un langage qui ressemblait à Fortran, mais qui pouvait gérer des listes symboliques comme l'IPL.
Bien sûr, aujourd'hui, Lisp ne ressemble pas à Fortran. Au cours des prochaines années, les idées de McCarthy pour un langage de traitement de liste idéal ont évolué. Ses idées ont commencé à changer en 1957 quand il a commencé à écrire des procédures pour le programme d'échecs de Fortran. La longue exposition de Fortran a convaincu McCarthy qu'il y avait plusieurs points négatifs dans sa conception, le principal étant la déclaration maladroite de la FI. McCarthy a inventé une alternative, l'expression conditionnelle "true", renvoyant la sous-expression A si la vérification donnée a réussi, et la sous-expression B dans un autre cas, et exécutant uniquement la sous-expression qui a été renvoyée. À l'été 1958, alors que McCarthy travaillait sur un programme capable de différenciation, il s'est rendu compte que son expression conditionnelle «vraie» rendait l'écriture des fonctions récursives plus simple et plus naturelle. Le problème de différenciation a également incité McCarthy à écrire une fonction maplist qui prend une autre fonction comme argument et l'applique à tous les éléments de la liste. Il était utile pour différencier les sommes d'un nombre arbitraire de membres.
Fortran ne pouvait pas exprimer de telles choses, donc à l'automne 1958 McCarthy a demandé à plusieurs étudiants la tâche d'implémenter Lisp. Puisque McCarthy était maintenant professeur agrégé au MIT, tous les étudiants ont étudié au MIT. En traduisant les idées en code de travail, McCarthy et les étudiants ont apporté des modifications qui ont encore simplifié la langue. Le plus grand d'entre eux était la syntaxe Lisp. McCarthy voulait d'abord le soi-disant «M-expressions», une couche de «
sucre syntaxique » qui faisait ressembler la syntaxe Lisp à Fortran. Bien que les expressions M puissent être traduites en expressions S - une simple liste entre crochets pour laquelle Lisp est célèbre - les expressions S étaient vraiment une représentation de bas niveau pour un ordinateur. Le seul problème était que McCarthy désignait les expressions M avec des crochets, et il n'y avait pas de crochets sur le poinçon IBM 026 utilisé dans le MIT. Par conséquent, l'équipe Lisp s'est limitée aux expressions S et les a utilisées pour représenter non seulement des listes de données, mais aussi l'utilisation de fonctions. McCarthy et les étudiants ont fait plusieurs autres simplifications, y compris le passage à l'enregistrement de préfixe et un modèle de mémoire dans lequel la langue n'avait qu'un seul type de réel.
En 1960, McCarthy a publié le célèbre ouvrage sur Lisp "Fonctions récursives des expressions symboliques et leur calcul par la machine]. D'ici là, le langage avait été réduit à un point tel que McCarthy s'est rendu compte qu'il avait créé un «système mathématique élégant», et pas seulement un autre langage de programmation. Il a écrit plus tard que la plupart des simplifications de Lisp en faisaient une "façon de décrire les fonctions calculées, beaucoup plus précises que les machines de Turing ou les définitions récursives générales utilisées dans la théorie des fonctions récursives". Dans son travail, il a introduit Lisp comme langage de programmation de travail et comme formalisme pour étudier le comportement des fonctions récursives.
McCarthy a expliqué Lisp aux lecteurs, en le construisant à partir d'un petit ensemble de règles. Plus tard, Paul Graham a suivi les traces de McCarthy en utilisant un langage plus facile à lire dans son essai
Roots of Lisp . Graham peut expliquer Lisp avec seulement sept opérateurs primitifs, deux entrées différentes pour les fonctions et six fonctions de haut niveau définies via des opérateurs primitifs. La capacité de définir Lisp avec une si petite séquence de règles simples ajoute certainement à son mystère. Graham a qualifié le travail de McCarthy de "axiomatiser le calcul". Je pense que c'est une excellente façon de réfléchir à l'attrait de Lisp. Dans d'autres langues, il existe clairement des constructions artificielles décrites par des mots réservés tels que while, typedef ou public static void; il semble que la description Lisp soit limitée par la logique même des calculs. Cette qualité et la connexion originale de Lisp avec un champ ésotérique tel que la «théorie des fonctions récursives» devraient expliquer le prestige actuel de la langue.
Théorie B: La machine du futur
Deux décennies après sa création, Lisp est devenu, selon le célèbre "
dictionnaire des informaticiens ", la "langue maternelle" de la recherche en IA. Lisp s'est rapidement répandu dans les premiers stades, probablement en raison du fait que sa syntaxe systématique a rendu la tâche de sa mise en œuvre sur de nouvelles machines relativement simple. Plus tard, les chercheurs ont continué à l'utiliser en raison de sa bonne gestion des expressions symboliques, ce qui était important à une époque où la plupart des IA étaient symboliques. Lisp a été utilisé dans des projets d'IA prolifiques tels que le programme de langage naturel
SHRDLU , le
système d'algèbre informatique
Macsyma et le système logique
ACL2 .
Au milieu des années 1970, les chercheurs en IA ont commencé à manquer de puissance informatique. Par exemple, le PDP-10 - la machine IA préférée de tous - avait un espace d'adressage de 18 bits, ce qui manquait de plus en plus pour les programmes d'IA à Lisp. De nombreux programmes d'IA devaient également être interactifs, et la création d'un grand programme interactif qui fonctionne bien sur un système de partage de temps était une tâche difficile. La solution que Peter Deutsch du MIT a d'abord proposée était de développer un ordinateur dédié pour Lisp.
Ces machines devraient donner à chaque utilisateur un processeur dédié optimisé pour Lisp. Ils devaient également avoir un environnement de développement écrit en Lisp pour les programmeurs Lisp hardcore. Les machines Lisp, inventées à un moment inconfortable à la fin de l'ère des mini-ordinateurs, mais avant l'apogée de la révolution des micro-ordinateurs, étaient des ordinateurs personnels hautes performances pour l'élite des programmeurs.
Pendant un certain temps, il semblait que les machines Lisp seraient la vague du futur. Plusieurs entreprises ont commencé à concurrencer pour la commercialisation de cette technologie. Le plus réussi d'entre eux était Symbolics, créé par des vétérans du MIT AI Lab. Dans les années 1980, Symbolics a lancé sa série d'ordinateurs 3600, populaire dans l'industrie de l'IA et dans les industries nécessitant un calcul haute puissance. La gamme 3600 comprenait des ordinateurs avec de grands écrans, des graphiques bitmap, une interface basée sur la souris et des programmes graphiques et d'animation puissants. Ce sont des machines impressionnantes qui ont permis d'écrire des programmes impressionnants. Par exemple, Bob Cali, qui a travaillé dans le domaine de la recherche en robotique, m'a écrit via Twitter qu'il était capable d'implémenter et de visualiser l'algorithme de recherche de chemin sur Symbolics 3650 en 1985. Il a dit que les graphiques raster et OOP (disponibles sur les machines Lisp grâce à l'extension Flavors) étaient nouveaux dans les années 1980. La symbolique était au premier plan.

Mais en conséquence, les ordinateurs Symbolics étaient incroyablement chers. Symbolics 3600 a coûté 110 000 $ en 1983. La plupart des gens ne pouvaient qu'émerveiller devant la puissance des machines Lisp et la magie des opérateurs écrivant à distance à Lisp. Mais ils se sont émerveillés. Le magazine Byte a décrit plusieurs fois les machines Lisp et Lisp entre 1979 et la fin des années 1980. Dans le numéro d'août 1979 de Lisp, le rédacteur en chef était enthousiasmé par les nouvelles machines développées au MIT, "avec une montagne de mémoire" et un "système d'exploitation avancé". Il les considérait si prometteurs que les deux années précédentes au cours desquelles l'Apple II, le Commodore PET et le TRS-80 sont apparus ennuyeux. Cinq ans plus tard, en 1985, l'auteur du magazine Byte a décrit le processus d'écriture des programmes Lisp pour le «Symbolics 3670 complexe et extrêmement puissant», et a encouragé les lecteurs à apprendre le Lisp, déclarant que c'était à la fois «le langage dont la plupart des chercheurs en IA ont besoin». et un candidat pour une future langue d'usage général.
J'ai demandé à Paul MacJones,
qui avait beaucoup fait pour sauver Lisp au Mountain View Museum of Computer History, quand les gens ont commencé à parler de Lisp comme un cadeau de créatures de dimensions supérieures. Il a déclaré que les caractéristiques du langage lui-même y contribuaient certainement, mais également le lien étroit entre Lisp et les puissantes applications d'IA dans les années 1960 et 1970. Quand il est devenu possible d'acheter des machines Lisp dans les années 80, quelques personnes de plus se sont rencontrées en dehors d'endroits comme le MIT ou Stanford, et la légende a continué de grandir. Aujourd'hui, peu de gens se souviennent des machines Lisp et de la symbolique, mais ils ont contribué à maintenir l'aura du mystère Lisp jusqu'aux années 1980.
Théorie B: formation à la programmation
En 1985, des professeurs du MIT, Harold Abelson et Gerald Sasman, ainsi que l'épouse de Sasman, Julia, ont publié le manuel Structure and Interpretation of Computer Programs. Dans le manuel, les lecteurs apprenaient la programmation en langage Scheme, le dialecte Lisp. Il a été utilisé au MIT pour une introduction à la programmation pendant deux décennies. Il me semble que c'est un manuel, SICP, qui a ajouté du mysticisme à Lisp. SICP a pris Lisp et a montré comment il peut être utilisé pour illustrer les concepts profonds, presque philosophiques de l'art de la programmation. Ces concepts étaient assez communs pour utiliser n'importe quel PL, mais les auteurs du SICP ont choisi Lisp. En conséquence, la réputation de Lisp a été complétée par la notoriété de ce livre étrange et brillant qui a intrigué de nombreuses générations de programmeurs (et est devenu un
mème très étrange ). Lisp a toujours été "l'élégant formalisme de McCarthy"; maintenant il est également devenu un langage "vous apprenant les secrets cachés de la programmation").
Il vaut la peine de parler un peu de l’étrangeté de ce livre - car il me semble que son étrangeté et son étrangeté Lisp ont fusionné aujourd’hui en un seul. L'étrangeté commence sur la couverture. Il représente un sorcier ou un alchimiste s'approchant d'une table et prêt à démarrer une sorte de sorcellerie. Dans une main, il a un pied à coulisse ou une boussole, dans l'autre - un globe avec les inscriptions "eval" et "apply". La femme en face de lui montre la table; sur le fond est la lettre grecque lambda rayonnant dans l'air.

Que se passe-t-il ici? Pourquoi y a-t-il une patte d'animal à table? Pourquoi une femme pointe-t-elle la table? Quelle est la signification de l'encrier? Faut-il comprendre que l'assistant a révélé la connaissance secrète de l'univers, et qu'elles consistent en un cycle d'évaluation / application et de
calcul lambda ? Apparemment, ça l'est. Seule cette image aurait dû ajouter beaucoup à la perception actuelle de Lisp.
Mais le texte du livre lui-même s'avère souvent tout aussi étrange. Le SICP n'est pas comme la plupart des autres livres sur l'informatique. Les auteurs de la préface expliquent que le livre ne concerne pas seulement la programmation en Lisp - il parle de «trois astuces ou phénomènes: l'esprit humain, un ensemble de programmes informatiques et un ordinateur». Plus tard, ils décrivent qu'ils sont convaincus que la programmation ne doit pas être considérée comme une discipline de l'informatique, mais comme un nouveau record «d'
épistémologie procédurale». Les programmes sont une nouvelle façon de structurer les pensées qui ne sont saisies qu'occasionnellement dans un ordinateur. Le premier chapitre donne une brève visite de Lisp, mais la plupart du livre concerne des concepts plus abstraits. Il examine divers paradigmes de programmation, la nature du temps et de l'identité dans les systèmes OO, et en un seul endroit, quels problèmes de synchronisation peuvent survenir en raison des limitations fondamentales du passage des messages, qui jouent le rôle de la vitesse de la lumière dans la théorie de la relativité. Ce sont des choses assez abstruses.
Et pour ne pas dire que le livre est mauvais. Elle est magnifique. Il aborde des concepts de programmation importants à un niveau supérieur à celui de tous les autres livres que j'ai lus, des concepts auxquels j'ai pensé pendant longtemps mais que je ne pouvais pas décrire. Étonnamment, l'introduction au manuel de programmation peut si rapidement continuer à décrire les inconvénients fondamentaux de la POO et les avantages des langages fonctionnels qui minimisent un état mutable.
C'est incroyable de voir comment cela se transforme en une discussion sur la façon dont le paradigme de streaming, probablement quelque chose comme le RxJS d'aujourd'hui , peut vous donner le meilleur des deux approches. SICP met en évidence l'essence même du développement de programmes de haut niveau d'une manière qui rappelle le travail original de McCarthy sur Lisp. La première chose que vous voulez faire après avoir lu ce livre est d'amener vos collègues programmeurs à le lire; s'ils le trouvent, voient la couverture et ne lisent pas, alors tout ce qui sera reporté est qu'une chose mystérieuse appelée eval / apply donne aux sorciers un pouvoir spécial sur les tables avec des pattes d'animaux. J'aurais été impressionné par leurs chaussures.Mais la contribution la plus importante du SICP a peut-être été de faire passer Lisp d'un niveau de curiosité drôle à une nécessité pédagogique. Bien avant le SICP, les gens se sont conseillés d'apprendre le lisp afin d'améliorer leur niveau de programmeur. Numéro de 1979 de Byte Magazine. Le même éditeur, qui admirait les nouvelles machines Lisp au MIT, a expliqué qu'il valait la peine d'apprendre ce langage car il «présente un point de vue différent sur les tâches». Cependant, au SICP, Lisp n'a pas été présenté uniquement comme un contraste avec d'autres langues. Il a été utilisé comme langage d'introduction, laissant entendre qu'il s'agit du meilleur langage pour l'apprentissage des concepts de programmation de base. Lorsque les programmeurs d'aujourd'hui se conseillent d'essayer Lisp avant de mourir, ils le font probablement à cause de SICP. Après tout, Brainfuck offre également probablement une «perspective différente sur les tâches».Mais les gens étudient plutôt le lisp, sachant que depuis vingt ans le point de vue de lisp a été si utile que les étudiants du MIT ont enseigné le lisp dans toutes les autres langues.Retour Lisp
L'année de la sortie du SICP, Björn Straustrup a publié la première édition du livre " C ++ Programming Language ", qui a amené la POO à la masse. Quelques années plus tard, le marché des machines Lisp s'est effondré et l' hiver de l'IA a commencé . Au cours des dix années suivantes, C ++ puis Java sont devenus les langages du futur et Lisp a végété.Naturellement, il est impossible d'indiquer quand exactement les gens ont recommencé à admirer Lisp. Cela s'est peut-être produit après que Paul Graham, co-fondateur de Y-Combinator et créateur de Hacker News, a publié plusieurs essais influents décrivant Lisp comme le meilleur langage pour les startups. Dans l'essai avant le milieu"Graham a affirmé que les macros Lisp rendaient le langage plus fort que les autres langages. Il a déclaré que l'utilisation de Lisp dans sa startup Viaweb l'avait aidé à développer certaines choses plus rapidement que ses concurrents. Certains programmeurs étaient convaincus. Mais la plupart ne sont pas passés à Lisp.Au lieu de cela, de plus en plus de fonctionnalités de Lisp ont commencé à tomber dans les langues préférées de tout le monde. Python a ajouté la génération de listes. En C # - Linq. Dans Ruby ... eh bien, Ruby est Lisp. Comme Graham l'a fait remarquer en 2001, «la langue par défaut, intégrée à de nombreuses langues populaires ultérieures, a progressivement évolué vers Lisp.» Et tandis que d'autres langues se rapprochent progressivement de Lisp, Lisp lui-même maintient en quelque sorte sa réputation particulière de langue mystérieuse que peu de gens comprennent, mais tout le monde doit apprendre. En 1980, l'année du 20e anniversaire de Lisp, McCarthy a écrit que Lisp avait survécu aussi longtemps qu'il avait pris «un optimum local approximatif d'une certaine sorte dans l'espace de PL». Mais cela sous-estime la véritable influence de Lisp. Il survit depuis cinquante ans parce que les programmeurs ont reconnu à contrecœur, décennie après décennie, que c'était le meilleur outil pour leur tâche. Il a survécu même sique la plupart des programmeurs ne l'utilisent pas. En raison de son origine et de son utilisation dans la recherche sur l'IA, et peut-être aussi de l'héritage du SICP, Lisp continue de ravir les gens. Et jusqu'à ce que nous puissions imaginer Dieu qui a créé le monde à l'aide d'un langage plus récent, Lisp n'ira nulle part.