“doc” (Col. : Science Sup 17x24) — 2007/7/19 — 18:18 — page 60 — #70
i
i
i
i
i
i
i
i
60
2
• La programmation déclarative
local X Y Z in
X=10
if X>=Y then Z=X else Z=Y end
end
La comparaison X>=Y renvoie true ou false si elle peut décider de la relation
entre X et Y. Si Y est non liée, elle ne pourra pas décider. Que fait-elle ? Continuer
avec true ou false serait erroné. Lever une erreur serait une mesure trop forte,
parce que le programme n’a pas fait quelque chose d’incorrect (il n’a pas fait quelque
chose de correct non plus). Le programme arrêtera tout simplement son exécution
sans signaler d’erreur. Si une autre activité (à déterminer ultérieurement) lie Y, alors
l’exécution arrêtée continuera comme si rien n’avait perturbé son déroulement normal.
Cela s’appelle un comportement dataflow. Le comportement dataflow est à la base d’un
deuxième outil puissant, à savoir la concurrence. Dans la sémantique nous verrons que
le comportement dataflow a aussi une implémentation simple.
2.4.2 La machine abstraite
Nous définissons la sémantique du langage noyau comme une sémantique opérationnelle : elle définit le sens du langage noyau à travers son exécution sur une machine
abstraite. Nous définissons d’abord les concepts de base de cette machine : l’environnement, l’instruction sémantique, la pile sémantique, l’état d’exécution et le calcul. Puis
nous montrons comment exécuter un programme. Enfin, nous expliquons comment
faire des calculs avec les environnements, ce qui est une opération fréquente dans la
sémantique.
La définition des concepts de base
Un programme en exécution est défini par un calcul, qui est une séquence d’états
d’exécution. Voici une définition précise de ce que cela veut dire. Nous avons besoin
des concepts suivants :
– Une mémoire à affectation unique s est un ensemble de variables. Ces variables
sont partitionnées en deux groupes : (1) les ensembles de variables qui sont égales
mais non liées et (2) les variables qui sont liées à un nombre, un enregistrement
ou une procédure. Par exemple, dans la mémoire {x 1 , x 2 = x 3 , x 4 = a|x 2 }, x 1
est non liée, x 2 et x 3 sont égales et non liées et x 4 est liée à la valeur partielle
a|x 2 . Une variable en mémoire qui est liée à une valeur est identifiée à cette
valeur. C’est pourquoi une variable en mémoire est parfois appelée une entité en
mémoire.
– Un environnement E est une correspondance des identificateurs vers des entités dans s. Cela est expliqué dans la section 2.2. Nous écrivons E comme un
ensemble de paires, par exemple {X → x, Y → y}, où X, Y sont des identificateurs et x, y référencent des entités en mémoire.
i
i
i
i
i
i
i
i
60
2
• La programmation déclarative
local X Y Z in
X=10
if X>=Y then Z=X else Z=Y end
end
La comparaison X>=Y renvoie true ou false si elle peut décider de la relation
entre X et Y. Si Y est non liée, elle ne pourra pas décider. Que fait-elle ? Continuer
avec true ou false serait erroné. Lever une erreur serait une mesure trop forte,
parce que le programme n’a pas fait quelque chose d’incorrect (il n’a pas fait quelque
chose de correct non plus). Le programme arrêtera tout simplement son exécution
sans signaler d’erreur. Si une autre activité (à déterminer ultérieurement) lie Y, alors
l’exécution arrêtée continuera comme si rien n’avait perturbé son déroulement normal.
Cela s’appelle un comportement dataflow. Le comportement dataflow est à la base d’un
deuxième outil puissant, à savoir la concurrence. Dans la sémantique nous verrons que
le comportement dataflow a aussi une implémentation simple.
2.4.2 La machine abstraite
Nous définissons la sémantique du langage noyau comme une sémantique opérationnelle : elle définit le sens du langage noyau à travers son exécution sur une machine
abstraite. Nous définissons d’abord les concepts de base de cette machine : l’environnement, l’instruction sémantique, la pile sémantique, l’état d’exécution et le calcul. Puis
nous montrons comment exécuter un programme. Enfin, nous expliquons comment
faire des calculs avec les environnements, ce qui est une opération fréquente dans la
sémantique.
La définition des concepts de base
Un programme en exécution est défini par un calcul, qui est une séquence d’états
d’exécution. Voici une définition précise de ce que cela veut dire. Nous avons besoin
des concepts suivants :
– Une mémoire à affectation unique s est un ensemble de variables. Ces variables
sont partitionnées en deux groupes : (1) les ensembles de variables qui sont égales
mais non liées et (2) les variables qui sont liées à un nombre, un enregistrement
ou une procédure. Par exemple, dans la mémoire {x 1 , x 2 = x 3 , x 4 = a|x 2 }, x 1
est non liée, x 2 et x 3 sont égales et non liées et x 4 est liée à la valeur partielle
a|x 2 . Une variable en mémoire qui est liée à une valeur est identifiée à cette
valeur. C’est pourquoi une variable en mémoire est parfois appelée une entité en
mémoire.
– Un environnement E est une correspondance des identificateurs vers des entités dans s. Cela est expliqué dans la section 2.2. Nous écrivons E comme un
ensemble de paires, par exemple {X → x, Y → y}, où X, Y sont des identificateurs et x, y référencent des entités en mémoire.
