“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 255 — #265
i
i
i
i
i
i
i
i
5.6 La programmation à grande échelle
255
functor
import OtherComp1 at File1
OtherComp2 at File2
...
OtherCompN at FileN
export op1:X1 op2:X2 ... opK:Xk
define
% D´ efinissez X1, ..., Xk
...
end
Ce composant dépend des autres composants OtherComp1, . . . , OtherCompN,
stockés respectivement dans les fichiers File1, . . . , FileN. Il définit un module
avec les champs op1, . . . , opK, référencés par X1, . . . , Xk et définis dans le corps du
foncteur.
Une application est simplement un foncteur compilé. Pour exécuter l’application,
tous les autres foncteurs compilés dont elle a besoin, directement ou indirectement,
doivent être rassemblés et leurs liens édités. Quand l’application est exécutée, elle
charge ses composants et édite leurs liens. L’édition des liens d’un composant veut
dire l’évaluer avec ses modules importés comme arguments et renvoyer le résultat
aux modules qui en ont besoin. L’édition des liens peut être faite au démarrage de
l’application (édition statique des liens), ou au fur et à mesure selon les besoins pendant
l’exécution (édition dynamique des liens). Nous trouvons que l’édition dynamique
des liens est généralement préférable, si tous les foncteurs compilés sont accessibles
rapidement (par exemple, s’ils sont dans le même système de fichiers). Avec ce réglage
par défaut, l’application démarre rapidement et n’utilise que la quantité de mémoire
dont elle a besoin.
➤ La structure dynamique
Un foncteur est une entité du langage. Si un programme contient une instruction
X=functor ... end, alors X sera liée à la valeur du foncteur. Comme une procédure, le foncteur peut avoir des références externes. L’instanciation du foncteur donne
un module, qui est l’ensemble d’entités du langage créé par l’initialisation du foncteur.
Une interface est un enregistrement qui contient les entités du langage visibles de
l’extérieur du module. Par un abus de terminologie commode, cet enregistrement est
parfois appelé le module. Il existe une opération pour instancier les foncteurs :
– Ms={Module.apply Fs}. Avec une liste Fs de foncteurs (comme entités
du langage), cette opération instancie tous les foncteurs et crée une liste Ms
de modules. Dans la portée d’un appel de Module.apply, les foncteurs sont
partagés. Si le même foncteur est mentionné plusieurs fois, ses liens seront tout
de même édités une seule fois.
© Dunod – La photocopie non autorisée est un délit
i
i
i
i
i
i
i
i
5.6 La programmation à grande échelle
255
functor
import OtherComp1 at File1
OtherComp2 at File2
...
OtherCompN at FileN
export op1:X1 op2:X2 ... opK:Xk
define
% D´ efinissez X1, ..., Xk
...
end
Ce composant dépend des autres composants OtherComp1, . . . , OtherCompN,
stockés respectivement dans les fichiers File1, . . . , FileN. Il définit un module
avec les champs op1, . . . , opK, référencés par X1, . . . , Xk et définis dans le corps du
foncteur.
Une application est simplement un foncteur compilé. Pour exécuter l’application,
tous les autres foncteurs compilés dont elle a besoin, directement ou indirectement,
doivent être rassemblés et leurs liens édités. Quand l’application est exécutée, elle
charge ses composants et édite leurs liens. L’édition des liens d’un composant veut
dire l’évaluer avec ses modules importés comme arguments et renvoyer le résultat
aux modules qui en ont besoin. L’édition des liens peut être faite au démarrage de
l’application (édition statique des liens), ou au fur et à mesure selon les besoins pendant
l’exécution (édition dynamique des liens). Nous trouvons que l’édition dynamique
des liens est généralement préférable, si tous les foncteurs compilés sont accessibles
rapidement (par exemple, s’ils sont dans le même système de fichiers). Avec ce réglage
par défaut, l’application démarre rapidement et n’utilise que la quantité de mémoire
dont elle a besoin.
➤ La structure dynamique
Un foncteur est une entité du langage. Si un programme contient une instruction
X=functor ... end, alors X sera liée à la valeur du foncteur. Comme une procédure, le foncteur peut avoir des références externes. L’instanciation du foncteur donne
un module, qui est l’ensemble d’entités du langage créé par l’initialisation du foncteur.
Une interface est un enregistrement qui contient les entités du langage visibles de
l’extérieur du module. Par un abus de terminologie commode, cet enregistrement est
parfois appelé le module. Il existe une opération pour instancier les foncteurs :
– Ms={Module.apply Fs}. Avec une liste Fs de foncteurs (comme entités
du langage), cette opération instancie tous les foncteurs et crée une liste Ms
de modules. Dans la portée d’un appel de Module.apply, les foncteurs sont
partagés. Si le même foncteur est mentionné plusieurs fois, ses liens seront tout
de même édités une seule fois.
© Dunod – La photocopie non autorisée est un délit
