|
Lisp at
|
1.2. Modèle de données et modèle de l'exécution en Lisp
| ||||||||
|
1.2. Modèle des données et modèle de l'exécution en LispLe Lisp est un langage fonctionnel (ou langage applicatif). Tout programme Lisp s'exprime en termes d'applications de fonctions à des objets (par objet, on entend ici une donnée en général, c'est-à-dire une donnée ou un programme). 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). En Lisp, toute donnée (ou valeur) est représentée par un objet ayant un type manifeste; le type d'un objet est dit manifeste s'il peut être testé et reconnu à l'exécution (le langage est typé dynamiquement). Contrairement aux langages où le type est statique (C, Fortran,...), il n'est pas nécessaire en Lisp de déclarer le type d'une variable. On peut déclarer le type d'une variable, limitant ainsi les valeurs de cette variable à une certaine gamme d'objets (pour des raisons d'optimisation par exemple, le compilateur mettant à profit cette information pour générer un code machine plus efficace). La gestion de la mémoire est automatique, le programmeur ne devant pas allouer explicitement la mémoire, ni faire utilisation du concept de bas niveau (langage machine) qu'est le pointeur (appelé aussi référence; voir l'exemple 3 du chapitre 5). La récupération et la réorganisation de la mémoire est assurée automatiquement par un système de ramasse-miettes (garbage collection), ce qui donne l'illusion d'une mémoire infinie. Ainsi une source importante de difficultés et d'erreurs est éliminée (par exemple, l'erreur de la référence folle). A noter qu'actuellement, le processus de ramasse-miettes est non-intrusif (il passe inaperçu aux yeux de l'utilisateur). Les fonctions Lisp sont elles-mêmes des objets du modèle des données Lisp : de fait, elles sont représentées sous forme de listes, la liste étant une structure de donnée du Lisp. On dit qu'il y a équivalence entre le programme et les données. Les fonctions Lisp peuvent donc être traitées comme n'importe quelle valeur (par exemple être passées en argument d'un appel de fonction ou encore être stockées dans une structure de données). Ceci présente plusieurs avantages :
Les fonctions Lisp peuvent être génériques, ce qui signifie qu'elles peuvent opérer sur différents types d'objets. En Lisp, ces fonctions font la différence durant l'exécution, mettant à profit le type manifeste de tout objet Lisp. Cela donne une flexibilité supplémentaire; par exemple, une fonction composée à partir de fonctions génériques sera automatiquement générique (voir l'exemple 1, chapitre 3).
| ||||||||
|
|||||||||
|
Last update : 20/11/2001 | ||||||||