Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

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: 2008-02-01 (10:50)
From: Till Varoquaux <till.varoquaux@g...>
Subject: Re: [Caml-list] [OSR] Exceptionless error management
I am still very ambivalent:

While I think having clearer signatures is great,  I am still wary
that this solution might prove too much of a constraint in some cases.
I still think exceptions shouldn't be shunned so quickly. As their
name clearly stipulates they should be used to handle exceptional
cases, and sometimes the nature of what's an exceptional case is
better left to the programmer's judgment (e.g. find). I believe that,
when needed, both functions should be exposed in the interface (e.g.
find and find_exn, or find and find_opt).

Exceptions are an amazing tool to handle exceptional cases because
they unwind stack the automatically.  This means that you don't have
to constantly thing about propagating the errors manually. A monad
can, of course, help with this, but there is a cost in code clarity to
consider. They can also help you identify the source of issues by
giving a back trace that is ultimately printed at the root of your
program (very hard to achieve without exceptions).

Choosing whether an error case should be treated as an exception is a
matter which, IMHO, does not have a general answer and depends on:
- How often the errors can occur and how they can be treated
- How safe you require your API to be. If you run with tight security
restrictions you will probably be more likely to take the
exception-less route. Note that taking a radical stance (like the one
advocated in your OSR) might make your programs a lot more verbose
and/or harder to grasp. Simplicity also leads to better security.
- Personal tastes.

I am also not very enthused by the use of the polymorphic variant
versus a Haskell like [Left | Right] variant. I think the former can
lead to hard to track errors (excerpt from the manual: "Beware also
that some idioms make trivial errors very hard to find.") bringing an
illusion of safety rather than safety itself. The latter also
separates in clearer way the error cases from the success cases.

Just my 0.02 (euro) cents.


On Feb 1, 2008 7:47 AM, Bünzli Daniel <> wrote:
> Le 1 févr. 08 à 08:27, Michaël Grünewald a écrit :
> > Bünzli Daniel <> writes:
> >
> >>> time jot 1000000 | ./in.native
> >>
> >> real 0m4.814s
> >> user 0m4.371s
> >> sys  0m0.218s
> >
> > You are timing `jot' aren't you?
> Not really, only half of the time. See at the end of this email.
> > The recommendation you proposed would be even more useful if it
> > emphasizes when ``Exceptionless error management'' is adequate.
> Right. I'll try to do something along this line. I'll will highlight
> in the suggestions part (which is not part of the recommendation) that
> in Unix-like cases the recommendation should maybe not be followed.
> Best,
> Daniel
>  > jot 1000000 > lines.txt
>  > time ./in.native < lines.txt
> real    0m6.093s
> user    0m2.132s
> sys     0m0.219s
>  > time ./inb.native < lines.txt
> real    0m6.827s
> user    0m2.117s
> sys     0m0.218s
> _______________________________________________
> Caml-list mailing list. Subscription management:
> Archives:
> Beginner's list:
> Bug reports: