New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Generation d'exceptions #3441
Comments
Comment author: administrator Bonjour Alain,
C'est en effet un problème d'affichage. L'identité d'une référence exception E of int ---> "E" Bien sûr, le cas du foncteur n'est pas très intéressant car une fois Maintenant, quid de l'affichage d'une valeur de type "exn" au Cependant, le toplevel fait un "best effort" (le brave garçon): il Si non, on fait un deuxième "best effort" qui consiste à afficher la Je vois que ces "best efforts" entraînent une certaine confusion chez
C'est un glitch de plus dans l'égalité générique: les "string ref" qui
Pas d'accord: le filtrage sur les exceptions (match ou try...with)
|
Comment author: administrator On Fri, 19 Jul 2002, Xavier Leroy wrote:
C'est un peu surprenant, car le filtrage correspond plutôt à une égalité
Oui, ça se défend ...
Il serait possible d'imposer pour les exceptions que ces strings ref
Ok, mais on ne peut pas toujours utiliser le filtrage, par exemple si let expect_exn exn f x = ne fait pas ce que l'on veut (ce genre de fonction pourrait être utilisé -- Alain |
Comment author: @damiendoligez Allocating a runtime tag just for this problem: out of question. Another possibility would be to wrap the exception string in an object because objects are never compared structurally. But how much existing C code would be broken by that change? I'm setting this to resolved/suspended (waiting for someone to come up with a good solution and a patch). |
Original bug ID: 1248
Reporter: administrator
Status: closed (set by @xavierleroy on 2013-08-31T10:46:08Z)
Resolution: suspended
Priority: normal
Severity: feature
Category: ~DO NOT USE (was: OCaml general)
Has duplicate: #4531
Monitored by: @glondu
Bug description
Suite à un thread sur comp.lang.ml (cf ah6vmf$12ik$1@nef.ens.fr) ...
La session suivante illustre quelques problèmes avec la génération
d'exception lors de l'évaluation de structures:
module F(X:sig type t end) = struct exception E of X.t end;;
module F : functor (X : sig type t end) -> sig exception E of X.t end
module B = F(struct type t = bool end);;
module B : sig exception E of bool end
B.E true;;
: exn = F(X).E 1
Le toplevel croit faussement que l'argument de B.E est de type int ....
Le X dans l'affichage est surprenant.
De même:
module X = struct type t = A | B end;;
module X : sig type t = A | B end
module FX = F(X);;
module FX : sig exception E of X.t end
FX.E X.A;;
: exn = F(X).E 0
Enfin, ça ne serait qu'un problème d'affichage. Mais ce qui
suit est plus troublant:
FX.E X.B = B.E true;;
Donc OCaml compare des valeurs de type différent, et répond même "true" !
On s'attend à ce que les exceptions aient un comportement
génératif; mais non:
let f () = let module E = struct exception E end in E.E;;
val f : unit -> exn =
f () = f ();;
Je dirais que cette réponse est incorrecte (en tout cas, incohérente
avec le filtrage dans un gestionnaire d'exception, qui distinguerait
bien ces deux exceptions).
Tout ça avec OCaml 3.04 et 3.04+15 (2002-06-18).
-- Alain
The text was updated successfully, but these errors were encountered: