• Aucun résultat trouvé

Spécialisation Extension λ λ Prologλ Prolog Prolog Mémoire Prolog Allocation/Libération Lecture/Écriture

FIG. 1 – Constitution des applications Prolog/MALI

langage une((politique de gestion de m´emoire))qui d´ecrit d’o`u vient la m´emoire g´er´ee par MALI (allocation statique `a la cr´eation du processus d’ex´ecution, ou dynamique, avec ou sans limite, etc.) et que faire de la m´emoire rendue inutile par MALI(la rendre au syst`eme, la garder pour plus tard, dans quelle proportion ? Etc.). Concernant le contrˆole, il faut se rappeler que MALIest une m´emoire abstraite, alors que la WAMet la plupart des dispo- sitifs d´ecrits pour impl´ementer des langages de programmation en les compilant sont des

machines abstraites. Il faut donc adjoindre `a MALI une((unit´e centrale))sous la forme de l’interpr´eteur d’un langage de programmation (dans le cas pr´esent, le langage C) dont on utilisera essentiellement les structures de contrˆole. Dans le cas de la r´ealisation d’un sys- t`eme Prolog ou



Prolog, l’id´ee est de traduire chaque pr´edicat en une proc´edure dont le seul effet est d’alt´erer les continuations (!T

p

(81)) et de revenir `a une forme d´eg´en´er´ee de boucle

d’interpr´etation [Brisset et Ridoux 92b, Brisset et Ridoux 92a]. En particulier, cette proc´e- dure n’est pas r´ecursive, mˆeme si le pr´edicat l’est. Il s’agit l`a bien ´evidemment d’un sch´ema g´en´eral, et il est tr`es important de reconnaˆıtre des situations o`u il n’est pas n´ecessaire de revenir `a la boucle d’interpr´etation.

La figure 1 illustre l’architecture du syst`eme Prolog/MALI. Le quart sud-ouest,

((Noyau)), symbolise la constitution du noyau : principalement sp´ecialisation et extension

de MALI. Cette partie est produite par les concepteurs du syst`eme et pr´eexiste aux autres parties. Le quart nord-ouest,((Biblioth`eques)), symbolise la constitution des biblioth`eques

la biblioth`eque standard, pr´eexiste `a toutes les autres. Cette partie est aussi produite par les concepteurs du syst`eme. Le quart nord-est,((Modules d’application)), symbolise la consti- tution d’une application par un utilisateur quelconque. Elle peut ˆetre faite de plusieurs modules, compil´es s´epar´ement. Enfin, le quart sud-est,((Exploitation)), symbolise l’ex´ecu- tion d’une application. C’est `a ce moment l`a seulement que les ressources g´er´ees par MALI

sont allou´ees et utilis´ees. Entre-temps, les programmes issus des diff´erentes parties ont ´et´e compil´es et reli´es entre eux. Les compilations sont figur´ees par les fl`eches qui traversent les lignes discontinues. Elles peuvent ˆetre faites dans un ordre quelconque pourvu qu’il respecte les d´ependances entre modules et biblioth`eques. En g´en´eral, les compilations sont faites aussitˆot que le source correspondant est constitu´e, mais ce n’est pas obligatoire. L’´edi- tion de lien est figur´ee par les lignes qui convergent vers la case marqu´ee((Ex´ecutable)). Elle utilise pour la plus grande part l’´editeur de lien du syst`eme hˆote.

Les quarts nord-ouest et nord-est figurent tous les deux une activit´e de programmation en



Prolog, mais le programmeur n’est pas le mˆeme pour les deux parties. Les biblio- th`eques sont produites par les concepteurs du syst`eme : elles sont leurs premi`eres applica- tions. Les modules d’application viennent en second et sont programm´es par les utilisa- teurs.

Les fl`eches qui pointent vers les cases marqu´ees((relogeable))symbolisent la compila- tion des fichiers sources. Celles venant du quart sud-ouest impliquent qu’un compilateur pour le langage d’implantation de la m´emoire



Prolog est disponible. Il s’agit de C et il est facile de trouver un compilateur C sur la plupart des installations. Les fl`eches venant des quarts nord-ouest et nord-est impliquent qu’un compilateur



Prolog est disponible. En fait, le compilateur



Prolog de Prolog/MALIest lui aussi une application ´ecrite en



Prolog et il est donc aussi constitu´e de la mani`ere d´ecrite par la figure 1. On voit poindre le probl`eme de l’autocompilation qui se r´esout partiellement en notant que le premier syst`eme Pro- log/MALI(premier dans le temps du d´eveloppement) n’´etait pas ´ecrit en



Prolog. Il reste cependant une difficult´e qui dure tout le temps du d´eveloppement : les biblioth`eques et le compilateur n’appartiennent pas `a la mˆeme version de syst`eme-langage. Ils peuvent diff´e- rer par la logique de leur langage d’impl´ementation, en cas de changement de version avec modification de la sp´ecification du langage, mais ils peuvent aussi diff´erer par les idiomes recommand´es, en cas de changement de version avec modification du sch´ema d’ex´ecution. Il est donc quasiment impossible de partager les modules qui dans les biblioth`eques et dans le compilateur impl´ementent les mˆemes fonctionnalit´es.

Le choix du point de d´epart ne produit pas automatiquement un sch´ema d’ex´ecution efficace. Nous n’allons pas d´etailler tous les points qui concourent selon nous `a l’effica- cit´e de notre syst`eme. Nous n’en retenons que deux qui sont des exemples des interactions entre utilisation et impl´ementation. Le premier est la mat´erialisation au niveau de l’im- pl´ementation d’une id´ee qui est pertinente `a tous les niveaux d’explication de



Prolog : on ne calcule qu’avec descombinateurs(78). Le second est le support d’une autre id´ee :

la



-´equivalence(87)donne des rˆoles sym´etriques `a la quantification universelle dans les

1 O : 1 O : λx λx x -réduction β ( ) O : O : O : 3 2 O : O : O : 4 3 2 x 4

FIG. 2 – R´eduction de graphe na¨ıve