On Wed, May 26, 2010 at 06:15:05PM +0200, Hans Ole Rafaelsen wrote: > What experience does people have to using alternatives to exceptions, such > as option types or exception monads? Does use of third part libraries that > still throws exceptions make such approaches hard to use? Performance wise > it seems to be comparable to catching exceptions or matching for options, so > I guess the difference be might a question of programming style?
Personally I've found that you should only throw those exceptions which can be caught in a single place in the program. By this I mean that an exception such as Not_found shouldn't be thrown, and instead it would be better to use an option type (for stdlib functions which throw Not_found, you have to be _very_ careful that the exception cannot "escape"). However if the exception is, say, an I/O error reading a disk file, these should be thrown, and caught somewhere central where you can display an error message to the user (for GUI programs) or abort the current transaction (for server programs). Recovering from such exceptions properly is still tricky though. Since OCaml lacks 'finally', you either have to use a 'finally' impl from a library, or modify your code to not need it (eg. turning calls to 'open_in' and 'open_out' into a kind of continuation-passing style). Or for small programs, abort the program and don't deal with recovery at all. All in all, this is not ideal for writing correct programs. Some sort of exception analysis would be most welcome. Rich. -- Richard Jones Red Hat _______________________________________________ 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