Comment représenter des fonctions ?
L’architecture de Von Neumann intègre déjà l’idée que le code est une donnée comme
une autre. Cependant, la représentation du code, dans un langage de programmation de
haut-niveau, comme une fragment de code machine n’est pas très pratique. (En effet, cela
demanderait au programmeur de comprendre précisément le processus de compilation, ce
qui est en contradiction avec l’abstraction visée par un langage de haut-niveau.)
Le langage LISP, créé par McCarthy en 1958, apporte une première réponse : dans ce
langage, les données et les programmes sont représentés d’une façon uniforme par des
S-expressions, une syntaxe pour des listes. (Voir les transparents suivants.)
En 1964, Peter Landin montre qu’une fonction, dans un langage de programmation,
peut-être efficacement représentée par une fermeture. Une fermeture est un fragment de
code clos, c’est-à-dire qu’il contient tout ce qui est nécessaire à son exécution. Une façon
particulière d’implémenter une fermeture consiste à capturer la valeur des variables dont
dépend un fragment de code dans un environnement que l’on adjoint à un pointeur vers
ce fragment.
5/137