Cours Lisp


Cours programmation Lisp : Opérateurs et fonctions

Cours programmation Lisp : Opérateurs et fonctions
Le langage lisp i - introduction lisp signifie list cours programmation lisp : opérateurs et fonctions processing (traitement de liste). ce langage a été inventé par j. mccart...

Cours les Listes dans Lisp

Cours les Listes dans Lisp
15. retour vers les listes 15.1. l’organisation de cours les listes dans lisp pdf la memoire lisp comment lisp utilise-t-il la mémoire de l’ordinateur ? nous savons qu’en lisp...

Apprendre LISP cours complet

Apprendre LISP cours complet
Semaine 11 : lisp nous présentons maintenant les principes apprendre lisp cours complet en pdf d’un autre langage fonctionnel: lisp. lisp est le premier langage fonctionnel à ...

Initiation à la programmation fonctionnelle Lisp

Initiation à la programmation fonctionnelle Lisp
Initiation a` la programmation fonctionnelle myriam initiation à la programmation fonctionnelle lisp pdf desainte-catherine enseirb – labri – université bordeaux i première an...

Cours langage LISP avancé

Cours langage LISP avancé
Master mention informatique spécialité informatique cours langage lisp avancé en pdf recherche et professionnelle fmin 106 compilation petit imprécis de lisp version common li...

La programmation orientée objet dans Lisp a une longue histoire. Les chercheurs ont expérimenté avec des extensions orientées objet à Lisp pendant au moins quinze ans. Les idées de Smalltalk ont ​​été importées en Lisp plusieurs fois. En outre, de nombreuses personnes ont utilisé Lisp pour expérimenter des idées entièrement originales sur la façon d'organiser des programmes orientés objet.


En 1986, une situation de «tour de Babel» s'était développée. Plusieurs extensions orientées vers Lisp étaient disponibles, certaines d'une utilisation assez large. Chacun de ces dialectes était différent de tous les autres, parfois de manière importante, parfois juste accidentellement. La floraison de l'expérimentation et des idées nouvelles était certainement une bonne chose, mais elle a conduit à des problèmes pratiques. Les universitaires ont eu du mal à communiquer parce qu'ils utilisaient des dialectes divergents et ne pouvaient pas lire les programmes des uns et des autres. Les développeurs de logiciels intéressés par le déploiement de leurs applications sur une grande variété de plates-formes ont été inhibés, car chaque système avait un langage différent pour la programmation orientée objet. Les nouveaux implémenteurs ont eu du mal à choisir le langage orienté objet à implémenter. En bref, la communauté Lisp était balkanisée.

Lors de la conférence ACM Lisp and Functional Programming à l'été 1986, de nombreux utilisateurs et implémenteurs de Lisp ont insisté sur le fait qu'il était temps de normaliser. Le sens de la communauté était que l'expérimentation devait continuer, mais que les gens avaient besoin de quelque chose de pratique qu'ils pourraient utiliser jusqu'à ce que les expérimentateurs aient trouvé le langage orienté objet ultime, si une telle chose pouvait exister.

Il y avait déjà eu des appels à la normalisation, avec peu de résultats, mais en 1986, la convergence des intérêts esthétiques, académiques et économiques en faveur d'une norme était irréversible. Un groupe de normalisation ad hoc formé lors de la conférence. Peu de temps après, le comité X3J13 pour la normalisation formelle du Common Lisp a été formé et le groupe en a fait partie. L'idée initiale était d'adopter l'un des dialectes existants comme standard, mais l'examen des différences entre les dialectes a révélé quelques faits intéressants: Beaucoup de programmeurs étaient passionnément engagés dans le dialecte particulier qu'ils utilisaient et ne voulaient pas changer à moins que la norme offre des caractéristiques comparables . Bien qu'aucun dialecte existant ne contienne toutes les caractéristiques correctes, plusieurs des dialectes avaient une unité sous-jacente, une fois que l'on voyait passé les différences syntaxiques superficielles, et visaient les mêmes idées de différentes directions. À ce stade, le groupe a décidé de développer un nouveau dialecte qui combinerait les meilleures caractéristiques des dialectes existants les plus populaires, tout en éliminant les caractéristiques mal définies ou insuffisamment utiles. Ce dialecte serait appelé CLOS, le Common Lisp Object System.

Caractéristiques du langage Lisp

Common Lisp est destiné à atteindre ces objectifs:

Les deux années qui se sont écoulées depuis lors ont été un voyage long et étrange, alors que nous concevions, expérimentions, discutions, remanions, négocions, documentions et développions notre compréhension de ce que devrait être la programmation orientée objet. Il est peu probable que quelqu'un se soit porté volontaire s'il avait su combien de temps le projet prendrait. Pourtant, la plupart des gens seraient d'accord que le résultat est une langue beaucoup mieux que tout ce que nous avons commencé avec. Toutes les caractéristiques intéressantes des dialectes originaux ne subsistent pas dans le standard final, mais CLOS est puissant, cohérent, précisément, bien que défini de manière informelle, et peut être implémenté efficacement.

Common Lisp est apparu dans une tentative de focaliser le travail de plusieurs groupes de mise en œuvre, dont chacun construisait des implémentations successives de MacLisp pour différents ordinateurs. Ces implémentations ont commencé à diverger en raison des différences dans les environnements de mise en œuvre: ordinateurs personnels mi-crocodés (Zetalisp, Spice Lisp), ordinateurs commerciaux à temps partagé (NIL - la nouvelle implémentation de Lisp) et superordinateurs (S-1 Lisp) . Bien que les différences entre les différents environnements de mise en œuvre continuent de forcer certaines incompatibilités entre les implémentations, Common Lisp sert de dialecte commun auquel chaque implémentation fait les extensions nécessaires.

  • Portabilité
    Common Lisp exclut intentionnellement les fonctionnalités qui ne peuvent pas être implémentées facilement sur une large gamme de machines. D'une part, les fonctionnalités qui sont difficiles ou coûteuses à mettre en œuvre sur un matériel sans microcode spécial sont évitées ou fournies sous une forme plus abstraite et plus facilement implémentable. (Des exemples de ceci sont les pointeurs et les locatifs invisibles de Zetalisp.) Certains problèmes qu'ils résolvent sont traités différemment dans Common Lisp.) D'un autre côté, les caractéristiques qui ne sont utiles que sur certains "ordinaires" ou " Les processeurs commerciaux sont évités ou rendus facultatifs. (Un exemple de ceci est la fonction de déclaration de type, qui est utile dans certaines implémentations et complètement ignorée dans d'autres.) Les descriptions de type sont complètement optionnelles et pour les programmes corrects affectent seulement l'effi-cacité, pas la sémantique. pour faciliter l'écriture de programmes qui dépendent le moins possible des caractéristiques spécifiques à la machine, telles que la longueur des mots, tout en permettant une variété de techniques d'implémentation.
  • Cohérence
    La plupart des implémentations Lisp sont intrinsèquement incohérentes car, par défaut, l'interpréteur et le compilateur peuvent assigner des sémantiques différentes pour corriger les programmes. Cette différence sémantique provient principalement du fait que l'interpréteur suppose que toutes les variables sont de portée dynamique, alors que le compilateur suppose que toutes les variables sont locales sauf instruction contraire explicite. Cette différence a été la pratique habituelle dans Lisp pour des raisons de commodité et d'efficacité mais peut conduire à des bugs très subtils. La définition de Common Lisp évite de telles anomalies en demandant explicitement à l'interpréteur et au compilateur d'imposer autant que possible la même sémantique sur les programmes corrects.
  • Expressivité
    Common Lisp élimine ce que l'expérience a montré comme étant les constructions les plus utiles et incompréhensibles non seulement de MacLisp mais aussi d'Interlisp, d'autres dialectes Lisp et d'autres langages de programmation. Les constructions jugées maladroites ou moins utiles ont été exclues. (Un exemple est la construction de magasin de MacLisp.)
  • Compatibilité
    À moins d'une bonne raison contraire, Common Lisp s'efforce d'être compatible avec Lisp Machine Lisp, MacLisp et Interlisp, à peu près dans cet ordre.
  • Efficacité
    Common Lisp a un certain nombre de fonctionnalités conçues pour faciliter la production de code compilé de haute qualité dans ces implémentations dont les développeurs se soucient d'investir des efforts dans un compilateur d'optimisation. Une implémentation de Common Lisp, à savoir S-1 Lisp, possède déjà un compilateur qui produit du code pour les calculs numériques qui est compétitif en vitesse d'exécution par rapport à celui produit par un compilateur Fortran. Le compilateur S-1 Lisp étend le travail effectué dans MacLisp pour produire un code numérique extrêmement efficace.
     
  • Puissance
    Common Lisp est un descendant de MacLisp, qui a traditionnellement mis l'accent sur la fourniture d'outils de construction de système. De tels outils peuvent à leur tour être utilisés pour construire les paquets au niveau de l'utilisateur tels que Interlisp fournit; ces paquets ne font cependant pas partie de la spécification de base Common Lisp. On s'attend à ce que de tels paquets soient construits sur le noyau Common Lisp.
  • La stabilité
    Il est prévu que le Lisp commun ne changera que lentement et avec la délibération voulue. Les divers dialectes qui sont des supersets de Common Lisp peuvent servir de laboratoires dans lesquels tester les extensions de langage, mais ces extensions ne seront ajoutées au Common Lisp qu'après un examen et une expérimentation soigneux.

Les objectifs de Common Lisp sont donc très proches de ceux de Lisp Standard et de Lisp Standard Portable. Common Lisp diffère de Lisp standard principalement en incorporant plus de fonctionnalités, y compris un ensemble plus riche et plus complexe de types de données et des structures de contrôle plus complexes.

Lisp