Version française
Home     About     Download     Resources     Contact us    
Browse thread
pourquoi y-a-t-il des exceptions?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Xavier Leroy <Xavier.Leroy@i...>
Subject: Re: pourquoi y-a-t-il des exceptions?
[English summary: 1- exception declarations are generative, so there
is a "global state" for exceptions already declared; 2- if "raise"
could throw any value as an exception, there would be no way to match
on the exception just caught in the try ... with ... construct.]

> Je me livre (pour le compte de mes étudiants) à une introspection de
> Caml, en essayant d'introduire les exceptions dans le langage
> mini-Caml du livre "Le langage Caml" de Pierre Weiss et Xavier Leroy.
> Pour faire bien les choses, j'ai commencé par lire la définition de
> Standart ML et je n'ai pas compris les règles de liaisons des 
> eceptions (règle 130). Pourquoi dans cette définition un état d'un
> programme doit-il comporter non seulement l'état de la mémoire
> mais aussi les noms des exceptions ?

Je n'ai pas la Definition sous les yeux, mais je crois que c'est pour
respecter le comportement génératif des déclarations d'exceptions.
C'est-à-dire, si le programme évalue deux fois la déclaration
"exception E", deux exceptions différentes de nom "E" sont créées.
(Cela peut se produire avec des foncteurs, ou bien avec "let exception
... in" en SML, ou bien avec "let module ... in" en OCaml.)

Pour rendre compte de cela dans la sémantique formelle, on peut utiliser
une espèce de "store" (état mémoire global) qui garde trace des exceptions
déjà déclarées.  Je pense que c'est ce que qui est fait dans The
Definition of SML.

> Et d'ailleurs pourquoi y-a-t-il le type exception, ne pourrait-on pas
> appliquer "raise" à n'importe quelle valeur qui deviendrait une
> exception déclanchée (cf règle 107 de la définition de Standart ML) ?

Cela ne poserait pas de problème au niveau du "raise", mais cela
poserait problème pour typer le "try...with..."  ("handle" en SML).
En effet, la valeur de l'exception rattrapée serait alors d'un type
quelconque, inconnu statiquement, ce qui empêcherait d'en faire quoi
que ce soit dans la partie "with" du "try...with...", en particulier
de la filtrer.

- Xavier Leroy