Browse thread
[OSR] Exceptionless error management
[
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: | 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. Till On Feb 1, 2008 7:47 AM, Bünzli Daniel <daniel.buenzli@erratique.ch> wrote: > > Le 1 févr. 08 à 08:27, Michaël Grünewald a écrit : > > > Bünzli Daniel <daniel.buenzli@erratique.ch> 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: > 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 > -- http://till-varoquaux.blogspot.com/