• Aucun résultat trouvé

La r`egle anti-frame

N/A
N/A
Protected

Academic year: 2022

Partager "La r`egle anti-frame"

Copied!
8
0
0

Texte intégral

(1)

Gala de GAFs

?

`a gogo

(?Generalized Anti-Frame rules)

Franc¸ois Pottier

Grenoble, 12–13 mars 2009

(2)

L’op ´erateur ⊗ et la r`egle frame

L’op ´erateur · ⊗I ajoute `a toutes les fl`eches au sein de son premier argument un effet sur la zone de m ´emoire d ´ecrite par la capacit ´e I.

1→χ2)⊗I= (χ1⊗I)∗I→(χ2⊗I)∗I

La r`egle frame χ≤χ⊗I permet l’utilisation d’un “Objet” par un

“Client” dont les effets sur I sont inconnus de l’Objet. Par exemple, map: (int→int)→list int→list int

≤ (int∗I→int∗I)→list int∗I→list int∗I

(3)

La r`egle anti-frame

La r`egle anti-frame, `a l’inverse, permet l’utilisation d’un Objet dot ´e d’un ´etat interne I par un Client qui en ignore l’existence.

af

Γ⊗I`(χ⊗I)∗I Γ`χ

Par exemple, si I={x:ref int}, on peut cacher une r ´ef ´erence x tout en exportant des m ´ethodes get et set:

`(unit∗I→int∗I)×(int∗I→unit∗I)∗I

`(unit→int)×(int→unit)

(4)

Un exemple probl ´ematique

On souhaite cacher x et v ´erifier statiquement l’assertion ligne 8.

1let mk () =

2 let x = ref 0 in

3 let m f =

4 x := !x + 1;

5 let v1 = !x in

6 f();

7 let v2 = !x in

8 assert (v1 = v2);

9 x := !x - 1

10 in m

La r`egle anti-frame le permet-elle? ...

(5)

Un exemple probl ´ematique

Non. Parce que x ´evolue, l’invariant I ne peut pas en fixer la valeur.

1let mk () =

2 let x = ref 0 in soit I = { x: ref int }

3 let m f = m: (unit I unit I) I unit I

4 x := !x + 1; acc`es `a x permis, car nous poss´edons I

5 let v1 = !x in

6 f(); le type de f indique que f pr´eserve I

7 let v2 = !x in

8 assert (v1 = v2); rien ne prouve que ceci soit vrai...

9 x := !x - 1

10 in m `a l0ext´erieur, m: (unit unit) unit En fait, m et f exigent l’un quelconque des invariants de la famille I i={σ:ref inti}, et le pr ´eservent...

(6)

Une GAF

G ´en ´eralisons l’op ´erateur ⊗:

1→χ2)⊗I=∀i. (χ1⊗I)∗I i→(χ2⊗I)∗I i Modifions tr`es l ´eg`erement la r`egle anti-frame en cons ´equence:

gaf

Γ⊗I`(χ⊗I)∗∃i.I i Γ`χ

(7)

L’exemple r ´esolu

La r`egle g ´en ´eralis ´ee s’applique parfaitement `a cet exemple:

1let mk () =

2 let x = ref 0 in soit I i = { x: ref int i }

3 let m f = m: i. (∀j. unit I j unit I j) I i unit I i

4 x := !x + 1; nous poss´edons I i, pour un certain i

5 let v1 = !x in v1: int (i + 1)

6 f(); le type de f indique que f pr´eserve I (i + 1)

7 let v2 = !x in v2: int (i + 1)

8 assert (v1 = v2); succ`es garanti

9 x := !x - 1 nous rendons I i, pour le mˆeme i

10 in m `a l0ext´erieur, m: (unit unit) unit

(8)

Conclusion

En r ´esum ´e:

I Cette r`egle g ´en ´eralis ´ee semble int ´eressante.

I On peut la g ´en ´eraliser encore et y incorporer une notion de monotonie.

Questions:

I Ces r`egles sont-elles correctes?

I Quelle est la GAF ultime?

Références

Documents relatifs

[r]

3.13 Grains striés rouges : Grains ou parties de grains présentant des stries rouges dont la longueur est égale ou supérieure à la moitié‚ de celle du grain

La trisection de l’angle, qui consiste ` a partager un angle donn´ e en trois angles ´ egaux, est l’un des trois grands probl` emes de la g´ eom´ etrie grecque antique (avec

Nous allons g´en´eraliser, lorsque cela sera possible, cette notion d’int´egrale au cas des fonctions continues par morceaux sur des intervalles ≪ d’un des autres types ≫ :..

Certains r´esultats retourn´es par Maple (e.g. ´el´ements propres d’une matrice) se trouvent dans une structure ordonn´ee (e.g. liste, ensemble, vecteur).. Il est parfois

Le taux d'intérêt doit s'ajuster pour que la demande de biens et services soit égale à l'offre de ceux-ci.. • Cette affirmation devient plus claire en faisant intervenir les

Tracer le maximum de segments ne se croisant pas revient ` a faire une triangulation de l’int´ erieur du triangle ABC en utilisant les n points

Soient A, B, et C trois points du plan. Les trois points A, B et C sont alignés, si et seulement si, deux des trois vecteurs ⃗ AB , ⃗ AC et ⃗ BC sont colinéaires.. 4.2) Milieu