Lisp at 7. Synthèse et conclusion

Home
Up
Previous
Next

Chapitre 7
Synthèse et Conclusion

On reconnaît à chaque langage une certaine spécificité : le Fortran facilite le traitement numérique, ADA permet de développer d'importantes applications temps réel, le C est un langage machine de haut niveau convenant aux applications proches du système opératoire. Le langage Lisp quant à lui, porte l'abstraction à un très haut niveau, l'abstraction étant comprise comme la faculté de représenter simplement des problèmes complexes.

UN LANGAGE A HAUT POUVOIR D'EXPRESSION EFFECTIF

Du point de vue de la théorie du calcul, tous les langages de programmation usuels sont équivalents (plus précisément Turing équivalent, du mathématicien anglais Alan Turing). Ceci concerne le pouvoir d'expression théorique d'un langage de programmation mais n'exprime en rien le pouvoir d'expression effectif d'un langage, c'est-à-dire la facilité avec laquelle un langage permet de programmer un problème donné.

Il n'y a pas de test formel pour mesurer le pouvoir d'expression effectif d'un langage. Cependant, il est clair que les moyens d'abstraction particuliers du Lisp contribuent à son pouvoir d'expression. On peut mesurer le pouvoir d'expression effectif d'un langage de façon informelle, par la facilité relative avec laquelle il permet la résolution de certains problèmes fondamentaux réputés difficiles.

En 1983, un problème de ce type fût proposé par Ken Thomson lors d'un exposé dans le cadre de la chaire Turing (Ken Thomson est sans doute plus connu comme un des auteurs du système opératoire UNIX); ce "défi", lancé à la communauté informatique, était d'écrire un programme n'ayant d'autre fonction que de s'auto-reproduire et qui soit le plus court possible (l'exécution de ce programme doit donc reproduire une copie exacte du programme tel que le programmeur l'a écrit; autrement dit, il s'agit d'écrire un programme source qui, une fois compilé et exécuté, produit le programme source).

Ken Thomson a écrit une version en langage C de ce programme; celui-ci comporte 233 lignes d'un code pas très attrayant. En Lisp, ce programme ne prend que 2 lignes et est d'une lecture aisée dès que l'on comprend un peu de Lisp.

Bien que ce type de démonstration de la puissance effective d'un langage puisse paraître académique et sujette à caution, l'expérience montre que ces résultats sont extrapolables aux applications réelles. On constate en effet que de nombreux progiciels très élaborés mettent à profit le pouvoir d'expression effectif du Lisp, comme par exemple, Interleaf, un progiciel destiné à l'édition de documents techniques complexes. La version 5 de ce progiciel comporte 1.500.000 lignes de code C et 250.000 lignes de code Lisp; ce code Lisp représente environ 25% des fonctionnalités du système et, selon les concepteurs d'Interleaf, apporte un gain considérable en terme de taille de code. AutoCAD et l'éditeur EMACS sont 2 autres exemples de mise à profit des caractéristiques du Lisp.

UN LANGAGE POUR LES DEVELOPPEURS

Ce haut pouvoir d'abstraction, en réduisant le temps consacré à la programmation, fait du Lisp un langage particulièrement intéressant pour les développeurs, c'est-à-dire toutes personnes chargées non seulement de la programmation mais aussi de l'analyse et du design d'une application. Dans les Divisions Ingénierie de TRACTEBEL, sont ainsi concernés les nombreux ingénieurs qui, dans les tâches de conception et d'études, cumulent les rôles d'utilisateur et de développeur.

UN LANGAGE FONCTIONNEL, UN LANGAGE ELEGANT

Le Lisp, comme la plupart des langages fonctionnels (voir ci-dessous), est un langage élégant, c'est-à-dire un langage qui permet d'écrire des programmes succints et faciles à lire par d'autres programmeurs. Selon D. Ince, qui définit ainsi l'élégance d'un langage de programmation, il n'est pas rare d'écrire un programme dans un langage de très haut niveau (comme le Lisp), qui soit dix fois moins long que le programme équivalent écrit dans un langage conventionnel (voir [INCE88]).

Contrairement à une idée répandue, le Lisp est un langage plutôt facile à apprendre (voir les paragraphes 2.4): on constate ainsi que le Lisp remplace de plus en plus souvent le Pascal comme langage d'apprentissage de la programmation. En outre, le Lisp simplifie la tâche de programmation: c'est un corollaire du haut pouvoir d'abstraction et de la flexibilité de ce langage.

Quelles sont les caractéristiques du Lisp qui lui confèrent ce pouvoir d'expression inégalé? D'une part le modèle d'exécution du Lisp répond au modèle fonctionnel : tout programme Lisp s'exprime en termes d'applications de fonctions à des objets (c'est-à-dire des données). Une fonction prend zéro ou plusieurs objets comme arguments, effectue un traitement et renvoie un ou plusieurs objets comme résultats (un argument pouvant être lui-même une application de fonction). D'autre part, en Lisp, il y a équivalence entre le programme et les données : les fonctions Lisp peuvent donc être traitées comme n'importe quelle donnée (par exemple être passées en argument d'un appel de fonction ou encore être stockées dans une structure de données).

Il s'ensuit que le Lisp est un langage de programmation auto-programmable, c'est-à-dire un langage dont il est possible d'étendre la syntaxe et la sémantique (voir le paragraphe 5.3 du chapitre 5; voir aussi [HASE89], où il est montré qu'il est possible de créer un langage à objets - pour faire de la programmation orientée objet - à partir du Common Lisp en seulement 250 lignes de code - ce langage à objets disposant de l'héritage multiple).

UN LANGAGE GENERAL

Le Lisp est un langage général : son domaine d'application est large, loin de se limiter aux applications de l'"intelligence artificielle". Aujourd'hui, la vulgarisation de la mémoire centrale fait du Lisp un langage utilisable sur de nombreux types de machines, y compris les micro-ordinateurs. La standardisation de ce langage simplifie le portage des applications (voir l'annexe 3 pour la portabilité du Common Lisp); cette simplification concerne aussi le portage des interfaces hommes-machines, grâce aux efforts de standardisation en matière de gestionnaires d'interface (CLIM, Common Lisp Interface Manager).

Le Lisp jouit d'une bonne intégration dans les autres langages : un programme Lisp peut invoquer un programme C ou Fortran et échanger des données avec ces programmes (par exemple, voir la description de l'application Tropic dans l'annexe 2).

UN LANGAGE ADAPTABLE

L'histoire du Lisp montre comment il s'est adapté rapidement aux nouvelles idées; cela a été le cas avec la programmation structurée et avec la programmation orientée objet (CLOS - Common Lisp Object System). Dans les années 70, dès l'apparition du concept de la programmation structurée et grâce au caractère auto-programmable du Lisp, les utilisateurs du Lisp ont pu intégrer immédiatement de nouvelles structures de contrôles à leurs programmes. Lorsque les langages Simula et Smalltalk eurent démontré l'intérêt de la programmation orientée objet dans la quête de la maîtrise de la complexité, diverses extensions objet de Lisp apparurent rapidement (dont, vers 1975, LOOPS et FLAVORS, les ancêtres de l'actuel système d'objets de Common Lisp - CLOS). Dès ce moment, ces extensions objet de Lisp allaient plus loin que Smalltalk ou même que le récent C++ (par exemple en permettant l'héritage multiple et la combinaison de méthodes).

Un phénomène similaire s'est produit lors de la disponibilité des architectures parallèles : en effet, il existe aujourd'hui diverses extensions de Common Lisp permettant de profiter de ces nouvelles architectures (voir [MURR 90]); de plus l'aspect auto-programmable du Lisp permet aux utilisateurs de ces architectures de définir des instructions parallèles de haut niveau d'abstraction, appropriées à une application spécifique.

UN LANGAGE POUR AUJOURD'HUI ET DEMAIN

Cette adaptabilité est un gage de la pérennité du Lisp, qui, de fait, est un des plus vieux langages de programmation (1956). Toujours à propos de l'avenir du Lisp (et de ses descendants), il est significatif que le ministère américain de la défense ait déterminé le Common Lisp (dont CLOS) comme un des trois langages de programmation officiels pour ses applications (les deux autres étant ADA et CPL, un langage de prototypage). Si la niche occupée par le Lisp dans le monde des langages de programmation continue de croître, ce n'est pas sans raisons. Ce dossier aura su, nous l'espérons, en rendre compte avec quelque clarté.

Home    Previous    Up    Next
contact
site map
Last update : 26/12/2001