“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 170 — #180
i
i
i
i
i
i
i
i
170
3
• Techniques de programmation déclarative
statement : :=
functor variable
[ import{ variable [ at atom ]
| |variable ´(´ { (atom | |int) [ ’:’ variable ] }+ ´)´
}+ ]
[ export { [ (atom | |int) ’:’ ] variable }+ ]
define { declPart }+ [ in statement ] end
| . . .
Tableau 3.6 La syntaxe des foncteurs.
foncteur dans un environnement de modules. L’environnement de modules contient
un ensemble de modules, dont chacun peut avoir un état d’exécution.
Une application est autonome si elle peut être exécutée en dehors de l’interface
interactive. Elle contient un foncteur principal qui est évalué quand le programme
démarre. Le foncteur principal importe les modules dont il a besoin, ce qui cause
l’édition des liens d’autres foncteurs. Le foncteur principal est utile pour démarrer
l’application et non pour le module renvoyé, qui est ignoré. L’évaluation ou l’édition
des liens d’un foncteur crée un module en trois étapes.
D’abord, une variable est créée avec une synchronisation par besoin.
17 Ensuite,
quand on a besoin de la valeur de la variable (ce qui arrive quand le programme
essaie de faire une opération sur le module), le foncteur sera chargé en mémoire et
appelé dans un nouveau fil avec les modules qu’il importe comme arguments. Cela
s’appelle l’édition dynamique des liens, par opposition à l’édition statique des
liens dans laquelle les liens du foncteur sont édités avant l’exécution de l’application.
Enfin, l’appel du foncteur renvoie le nouveau module et le lie à la variable. À tout
moment, l’ensemble de modules dont les liens sont édités s’appelle l’environnement
de module.
L’implémentation des modules et des foncteurs
Nous allons construire un composant logiciel. Nous prenons un exemple de module
et nous voyons comment obtenir un composant logiciel à partir de l’exemple. Ensuite
nous le convertissons en abstraction linguistique.
➤ Un exemple de module
L’interface d’un module est un enregistrement. On peut y accéder par les champs de
l’enregistrement. Nous construisons un module MyList qui fournit une interface
17. La synchronisation par besoin est l’opération fondamentale de l’exécution paresseuse (voir section 4.1).
Précédent

- 185/370

Suivant