next up previous contents
Next: Optimisation : les displays Up: Implémentation Previous: Implémentation

Lien statique et dynamique

A chaque appel de fonction, un ``activation record'' sera empilé sur la pile d'exécution, c'est dans cet ``activation record'' que sont alloués les objets locaux.

Pour accéder à l'environnement lexical, une solution consiste à maintenir deux liens:

  1. lien du contrôle (ou lien dynamique): c'est simplement un lien qui pointe sur l'``activation record'' précédent de la pile.
  2. lien d'accès (ou lien statique) qui pointe sur le plus récente ``activation record'' dans du bloc lexicalement englobant.
L'environnement sera celui obtenu en parcourant ce lien d'accès. On peut à la compilation calculer le nombre de liens d'accès à parcourir. On peut définir la profondeur d'un bloc de façon récursive:

La distance entre deux blocs est alors la valeur absolue de la différences des profondeurs.

L'adresse d'un objet non local sera déterminé à partir des liens d'accès à traverser et l'adresse relative dans l'``activation record'' (tout ceci étant calculé à la compilation).

En cas d'appel d'un bloc qui se trouve être plus interne, (par exemple appel de R dans Q), le lien d'accès sera identique au lien statique; pour un appel d'un bloc plus externe, si n est la distance entre les deux blocs, un parcours de n lien d'accès accède à l'environnement lexical et donc permet de calculer le nouveau lien d'accès.




Mon Oct 20 14:02:48 MET 1997