|
1.6. Avantages de
l'environnement de développement Lisp
Les environnements de développement Lisp
ont toujours représenté l'état de l'art en la matière. De nombreuses caractéristiques
d'environnement de développement trouvent leurs origines dans le monde Lisp, entre
autres : les débogueurs symboliques, les inspecteurs de données structurées,
l'exécution pas à pas au niveau du code source et l'aide en ligne sur les opérateurs du
langage.
Programmer en Lisp offre de nombreux
avantages directs entraînant une amélioration substantielle de la productivité; ainsi :
- la compilation est incrémentale : le développement n'est pas
ralenti par le cycle habituel édition-compilation-lien-exécution (Fortran, C,
etc.). Ainsi la redéfinition d'une fonction a un effet immédiat. Mieux, il est possible
de modifier et d'ajouter du code en continu, y compris pendant l'exécution du programme
(cela vaut aussi pour les structures de données, comme les classes et les objets de CLOS).
Cette facilité est tellement appréciable, en terme de méthode de travail et de vitesse
de développement, qu'aucun langage du futur ne pourra en faire l'impasse (langage lié
dynamiquement). De fait, l'aspect dynamique et le pouvoir d'abstraction élevé
constituent deux des principaux plus du Lisp par rapport à des langages comme le C,
le Fortran et le Pascal.
- du fait de la nature dynamique du Lisp, l'environnement de
développement est très interactif: par exemple, il est possible de continuer
l'exécution d'un programme après une erreur (après, par exemple, avoir spécifié la
valeur à renvoyer par la fonction ayant provoqué l'erreur);
- dans le Common Lisp, le mécanisme des packages
(modules) permet d'éviter le problème du conflit de noms (par exemple, nom identique
pour 2 fonctions différentes); ce problème apparaît fréquemment lorsqu'il est
nécessaire d'utiliser plusieurs librairies ou lorsque le développement d'une application
nécessite de faire appel à plusieurs programmeurs travaillant indépendamment.
- le mécanisme de définition (defun) est paticulièrement
flexible, autorisant la définition d'arguments optionels (&optional) et par
clefs (&key). Par exemple, en supposant les arguments width et height
de la fonction make-window définis à l'aide de clefs, toutes les applications
suivantes sont valides:
(make-window)
(make-window :width 120)
(make-window :height 100 :width 120)
Donc, dans le cas d'arguments définis à l'aide de
clefs, on spécifie uniquement les arguments nécessaires et ce dans un ordre quelconque
(les arguments non spécifiés ont une valeur par défaut). Ce mécanisme est très
apprécié en phase de développement, des arguments pouvant être ajoutés à la
définition d'une fonction sans qu'il soit nécessaire de mettre à jour toutes les
applications de cette fonction.
- les éditeurs offrent des fonctionnalités appréciables dans le
développement d'applications importantes et dans la maintenance des ces applications; par
exemple :
- l'édition automatique d'une fonction (il suffit de cliquer sur
l'appel d'une fonction et d'activer la commande d'édition automatique pour ouvrir une
fenêtre d'édition dans laquelle apparaît le code de la fonction appelée);
- une commande similaire permet de retrouver automatiquement tous les
appels (utilisations) d'une fonction dans l'ensemble de l'application;
- il est possible d'accéder simplement à la documentation de toutes
fonctions et de toutes variables globales, qu'elles soient primitives ou propres à
l'application.
- la complétion automatique des noms de fonction et de variables
globales, qu'elles soient primitives ou propres à l'application (il suffit de taper les
premiers caractères d'un nom de fonction; l'éditeur complète ou propose un choix de
mots complétant les premiers caractères tapés).
Voir [LAYE91] pour une description complète de ce
que peut offrir un environnement Lisp moderne.
|