Browse thread
Bugs with pattern-matching and exceptions
- Louis Gesbert
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Louis Gesbert <louis.gesbert@l...> |
| Subject: | Bugs with pattern-matching and exceptions |
There seems to be some problems with exceptions related to pattern-matching in Ocaml. First, exceptions don't support marshalling. This problem is already known, but yet undocumented. The problem doesn't arises when an exception is marshalled or unmarshalled however, but only when you try to pattern-match the un-marshalled value -- which, in my experience, hangs the program --. Equality tests work fine. I managed to build a workaround for this problem using ugly Obj code, but some feedback on wether this problem is going to be solved in future versions of Caml would be appreciated. More recently, I discovered a far worse bug which leads to some inconsistency. Ocaml offers a syntax " exception E' = E " to create an alias to an exception, which I have hardly ever seen used (with reason, it seems). See the following code: # exception E;; exception E # exception E' = E;; exception E' # exception E;; exception E # E;; - : exn = E # E';; - : exn = E (* At this stage, E and E' should be two distinct exceptions both called E. Nothing wrong yet, that kind of weird situation can also be created with types (redefining a type when objects of this type exist) *) # E = E';; - : bool = true # match E with E' -> true | _ -> false;; - : bool = false The exceptions are equal, but don't match according to the toplevel... my opinion is that they should be different in both cases: they were defined separately with two different definitions of "exception E". When E is parametrised with a type, this can lead to a failure of the type system (objects of type t = T are shown as int = 0 !) This is with Caml 3.08.3, but it doesn't seem to have been corrected in earlier versions. Any ideas ? If the structure exception E = F is considered useful, a stronger semantics should be attached to it, but is it really ? These two problems point to the handling of pattern-matching of exceptions, maybe not the marshalling of exceptions itself. Could someone explain where this weakness comes from (implementation of the extensible variable type ?) Regards, Louis Gesbert