Version française
Home     About     Download     Resources     Contact us    
Browse thread
[OSR] Exceptionless error management
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: blue storm <bluestorm.dylc@g...>
Subject: Re: [Caml-list] [OSR] Exceptionless error management
My two cents :

- It's easy to derive variant-defined functions from the
exception-using ones, with virtually no performance cost. Going the
other way is not as practical, and i assume it has a higher runtime
overhead
- We will need to document our functions in any case : the exception
name generally doesn't provide an accurate enough description of the
causes of the error (be it an exception, a polymorphic variant, ...)
- The added safety is good, but not (in my eyes) essential for every
use; we could use tools, eg. OcamlExc (
http://caml.inria.fr/pub/old_caml_site/ocamlexc/ocamlexc.htm ) to
check the safety as well
- In most situation, exceptions allow for a more natural and more
concise code than options/variants/monads, precisely because they can
break flow of control (eg. in a "for" loop), and because our libs are
not quite adapted to that kind of programming now (where is mapM ?)

I would favor the conservative solution : still provide the exception
handling by default, and allowing an additional option/variants
version.

On 1/31/08, David Teller <David.Teller@univ-orleans.fr> wrote:
> Differentiating functions sounds like a good idea.
>
> We may either:
> * add a suffix after function names whenever they may raise exceptions
> (suffix "_exn" sounds good to me)
> * add a suffix after function names whenever they are variants that
> don't raise exceptions (say, suffix "_maybe")
> * write two different (sub)modules with the same set of functions, one
> module being named Exception, the other one being named Option.
>
> What else ? We could presumably functorize modules upon the definition
> of a error-delivery mechanism, but that might be overkill.
>
> Say
> module type ErrorMechanism = sig
>   type 't;                (**The type of a failure.*)
>   type 'a can_fail;
>                           (**The type of a value that can either succeed
>                              and produce a result of type 'a or fail and
>                              produce an error of type t. *)
>   value fail    : t -> 'a can_fail ;
>                           (**Fail. Depending on the mechanism, this may
>                              either return some variant on option or
>                              throw an exception.*)
>
>   value succeed : 'a -> 'a can_fail ;
>                           (**Succeed.*)
> end;;
>
> We could also introduce an exception monad which would be an
> intermediate choice between using exceptions and using option types and
> such. I have a just written a prototype for this, I'll try and release
> it soon.
>
> Cheers,
>  David
>
> On Thu, 2008-01-31 at 08:16 -0600, Michael Ekstrand wrote:
> > While `get' and `search' are probably OK (I presume that `get' raises
> > an exception, and `search' returns an option type), we must be
> > careful.  If multiple functions is the standard, I would prefer that a
> > naming/variant system be recommended (such as get and get_exn).  If we
> > come up with clever names for our various functions, I fear the Java
> > Queue API syndrome (where you can get a value with any of 4 different
> > functions, and add with another 4, that mostly differ in how they
> > handle error and thread blocking conditions and the names have little
> > correlation to the differences).
> >
> > - Michael
>
> --
> David Teller
>  Security of Distributed Systems
>   http://www.univ-orleans.fr/lifo/Members/David.Teller
>  Angry researcher: French Universities need reforms, but the LRU act
> brings liquidations.
>
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
>