• Aucun résultat trouvé

4.4 Programmes autonomes

5.1.2 S´emantique op´erationnelle

Un bloc m´emoire west une valeur close ou la constantenull.

w::=v|null (bloc m´emoire)

Un ´etat m´emoire µ est une fonction totale des adresses m´emoires vers les blocs m´emoires. Il repr´esente dans la s´emantique de Core ML la notion detas, c’est `a dire une collection de structures, chacune allou´ee `a une adresse particuli`ere de la m´emoire et pouvant contenir des pointeurs vers d’autres entr´ees du tas. La constantenullcorrespond naturellement `a un bloc non allou´e : on dit quem est allou´ee dans µsi et seulement si µ(m)6=null. On note fml(µ) l’ensemble des adresses m´emoires qui apparaissent dans l’image deµ, c’est-`a-dire∪mfml(µ(m)). Un ´etat m´emoire estbien form´esi et seulement si seul un nombre fini d’adresses m´emoire sont allou´ees et si toutes les adresses mentionn´ees dans ses blocs sont allou´ees,i.e.pour toutm∈fml(µ),µ(m)6=null.

Puisque nous souhaitons pouvoir munir Core ML de primitives effectuant des effets de bord, c’est-`a-dire allouant, modifiant et lisant des entr´ees du tas, la s´emantique op´erationnelle du langage doit ˆetre d´efinie comme une relation de r´e´ecriture entre configurations : une configuration est une paire form´ee d’une expressioneet d’un ´etat m´emoireµ, not´eee / µ.

La figure 5.1 d´efinit la relation de r´eduction, not´ee→, entre configurations Core ML. On dit quee / µ ser´eduit ene0/ µ0 si et seulement si e / µ→e0/ µ0 est d´erivable. Les r`egles du premier groupe d´efinissent la s´emantique des constructions de base du langage : (β) et (let) r´eduisent respectivement les applications dont le membre gauche est une λ-abstraction et les constructions let. Je note e[x ←v] l’expression obtenue en substituant toutes les occurrences libres de x parv danse. L’ensemble des constantes n’´etant pas fix´e, leur s´emantique doit rester abstraite : elle est d´ecrite par la donn´ee, pour chaque primitivef, d’une relation−f. Si la primitivef a une arit´en,

100 Chapitre 5·Core ML et Core ML2: Syntaxe et s´emantique

Contextes

(bind[ ] =xine)v = e[x←v]

(bind[ ] =xine)raiseξ v = raiseξ v ([ ]handle(h1· · ·hn))v = v

([ ]handle(h1· · ·hn))raiseξ v = hiraiseξ v siξ∈handled(hi) ([ ]handle(h1· · ·hn))raiseξ v = raiseξ v

siξ∈escape(h1· · ·hn) ([ ]finallye)a = e;a

Clauses

(Ξxe)raiseξ v = e[x←v]

siξ∈Ξ (Ξ e)raiseξ v = e

siξ∈Ξ

(Ξxepgt)raiseξ v = e[x←v];raiseξ v siξ∈Ξ

(Ξ epgt)raiseξ v = e;raiseξ v siξ∈Ξ

Figure 5.2– ´Evaluation des contextes et des clauses

un jugement de−fest de la formef v1· · ·vn/µ−fe+ ˙µ, o`uv1, . . . , vnsont des valeurs closes.

Il doit ˆetre lu : dans l’´etat m´emoire µ, l’application f v1· · ·vn a pour r´esultat e et effectue le(s) effet(s) de bordµ. Cette interpr´etation est formalis´ee par la r`egle (δ). La meta-variable ˙˙ µd´enote un fragment d’´etat m´emoire, qui est une fonction partielle des adresses m´emoires vers les valeurs closes. Il repr´esente lesmodifications produites sur l’´etat m´emoireµpar l’appel de la primitivef, c’est-`a-dire les allocations et les ´ecritures effectu´ees. Ainsi, µ4µ˙ est l’´etat m´emoireµ0 d´efini par µ0(m) = ˙µ(m) sim∈dom( ˙µ) et µ0(m) =µ(m) sinon. Le lecteur peut naturellement se demander pourquoi je n’ai pas suivi une approche plus habituelle en d´efinissant −f comme une relation entre configurations (croissante pour l’ensemble des adresses m´emoire allou´ees) et remplac´e (δ) par la r`egle suivante :

f v1· · ·vn/ µ−fe / µ0 f v1· · ·vn/ µ→e / µ0

La raison apparaˆıtra avec la d´efinition de la s´emantique de Core ML2 (section5.2.3, page105) qui se trouve ˆetre simplifi´ee par ce choix technique. Enfin, la r´eduction des primitives ne doit pas ˆetre influenc´ee par les noms arbitraires des adresses m´emoires dans les configurations et doit pr´eserver la bonne formation des configurations, comme exprim´e par l’hypoth`ese suivante.

Hypoth`ese 5.1 Les relations−fsont stables par renommage des adresses m´emoires (i.e.sif ~v / µ −f e+ ˙µ alors, pour tout renommage φ des adresses m´emoires, on a f φ~v / φµφ−1f φe+φµφ˙ −1). Sif ~v /µ−fe+ ˙µalors, pour toutm∈fml(e,µ), on a˙ m∈dom( ˙µ)ouµ(m)6=null.

La r`egle (pop) ´elimine un contexte qui contient un r´esultat. L’expression obtenue est donn´ee par la relation , d´efinie figure 5.2, qui pr´ecise comment chaque forme de r´esultat est attrap´ee ou propag´ee par chaque contexte d’´evaluation. La r`egle (context) termine la d´efinition de → en autorisant la r´eduction `a avoir lieu sous un contexte d’´evaluation arbitraire.

5.1·Le langage Core ML 101

Je souhaite montrer que la s´emantique de Core ML est d´eterministe, c’est-`a-dire qu’´etant donn´ee e / µ, il existe au plus une configuratione0/ µ0, `a un renommage des adresses m´emoire pr`es, telle quee / µ→e0/ µ0. Ce choix naturel pour un langage s´equentiel est en fait essentiel pour la non-interf´erence : dans le cadre d’une s´emantique non-d´eterministe, il faut en effet consid´erer qu’un programme produit unensemblede r´esultats, chacun d’entre eux ´etant ´eventuellement affect´e d’une certaine probabilit´e. Une propri´et´e de non-interf´erence devrait alors garantir que deux ex´ecutions d’un mˆeme programme donnent les mˆemes r´esultats avec les mˆemes probabilit´es.

La formulation actuelle des r`egles de r´eduction pr´esente deux sources potentielles de non-d´eterminisme. La premi`ere concerne les primitives du langage, je dois en effet m’assurer que la s´emantique qui leur est attribu´ee par les relations−fest bien d´eterministe :

Hypoth`ese 5.2 (D´eterminisme des primitives) Sif ~v /µ−fe1+ ˙µ1etf ~v /µ−fe2+ ˙µ2alors les pairese1+ ˙µ1 ete2+ ˙µ2 co¨ıncident, modulo un renommage des adresses m´emoires non allou´ees

dansµ.

La deuxi`eme source de non-d´eterminisme apparaˆıt avec la r´eduction des constructionshandleo`u un choix peut intervenir entre plusieurs clauses rattrapant la mˆeme exception. Pour que cette situation n’advienne pas, je supposerai que dans chaque contexte [ ]handle(h1· · ·hn), les clausesh1, . . . , hn

rattrapent des ensembles d’exceptions deux `a deux disjoints,i.e.pour tousj1, j2∈[1, n] sij16=j2

alors handled(hj1) # handled(hj2). On pourrait ´egalement pr´eciser la d´efinition de afin que les clauses soient consid´er´ees dans un ordre pr´ed´etermin´e, comme dans la constructiontry. . .withde Caml. Cependant, cette possibilit´e se ram`ene de mani`ere syst´ematique `a l’hypoth`ese pr´ec´edente en pr´ecisant les ensembles de noms d’exceptions effectivement attrap´ees par chaque clause.

Lemme 5.3 Toute configuration de la formea / µest une forme normale pour→.

p Preuve. Par inspection des r`egles de la figure 5.1(page99), on v´erifie que sie /µest r´eductible alorseest soit une application de fonction ou de constante (r`egles (β) et (δ)), soit une construc-tionlet(r`egle (let)), soit une expression de la forme E[e0] (r`egles (pop) et (context)). Ces formes d’expressions n’´etant pas des r´esultats, on en d´eduit que toute configurationa / µest irr´eductible.

y Lemme 5.4 (D´eterminisme) La s´emantique op´erationnelle de Core ML est d´eterministe : sie/µ→ e11ete/µ→e22alors les configurationse11ete22sont identiques, modulo un renommage

des adresses m´emoires non allou´ees dans µ.

p Preuve. On proc`ede par induction sur les d´erivations de e / µ→e1/ µ1 ete / µ→e2/ µ2.

◦Si l’une de ces d´erivations se termine par une instance de (context).On peut supposer, sans perte de g´en´eralit´e, qu’il s’agit de la premi`ere. L’expressione est de la formeE[e0] et la pr´emisse de (context) este0/ µ→e01/ µ1 (1). Par le lemme 5.3, on en d´eduit quee0 n’est pas une valeur.

On v´erifie alors que la configurationE[e0]/µne peut ˆetre r´eduite que par application de (context), de telle sorte qu’il existee02tel que e2=E[e02] ete0/ µ→e02/ µ2 (2). Par l’hypoth`ese d’induction appliqu´ee `a (1) et (2), les configurationse01/ µ1et e02/ µ2 sont identiques, modulo un renommage des adresses m´emoires n’apparaissant pas dansµ. La configurationE[e0]/ µ´etant bien form´ee, les adresses m´emoires libres dansEsont allou´ees dansµ. On en d´eduit que le renommage reliante011

`

ae02/ µ2 n’affecte pas le contexteE, ce qui permet de conclure.

◦Autres cas.On v´erifie tout d’abord que la configuratione /µne peut ˆetre r´eduite que par une seule r`egle parmi les r`egles restantes, celle-ci ´etant d´etermin´ee par la forme de l’expressione: (β) r´eduit une application de fonction, (let) une constructionlet, (δ) une application de destructeur et (pop) un contexte. Il reste `a prouver que la configuration produite par l’application de chacune des r`egles pr´ec´edentes (c’est-`a-dire celle mentionn´ee dans le membre droit de la r`egle) est d´etermin´ee par la configuration initiale (celle du membre gauche), modulo un renommage des adresses m´emoire

102 Chapitre 5·Core ML et Core ML2: Syntaxe et s´emantique

non initialement allou´ees. Cette propri´et´e est imm´ediate pour les r`egles (β) et (let). Pour (δ), elle d´ecoule de l’hypoth`ese5.2. Pour (pop), elle est assur´ee par la disjonction des ensembles d’exceptions attrap´ees par chaque clause d’un contextehandle, qui fait deune fonction totale. y