From: Benjamin Geer <ben@socialtools.net>
To: Martin Berger <martinb@dcs.qmul.ac.uk>
Cc: Caml Mailing List <caml-list@inria.fr>
Subject: Re: [Caml-list] GC and file descriptors
Date: Wed, 19 Nov 2003 02:47:36 +0000 [thread overview]
Message-ID: <3FBAD9C8.40103@socialtools.net> (raw)
In-Reply-To: <3FBAC880.9040903@dcs.qmul.ac.uk>
Martin Berger wrote:
> my (limited) experience with java suggests that in large projects one of
> the following happens:
>
> * all exceptions specs are written out in detail (ie no grouping using
> subtyping etc). in this case, way too much code is nothing but exception
> specs.
>
> * the subtyping approach is used. in this case exception specifications
> are too imprecise;
>
> * something that seems like what you refer to as nested exceptions where
> you catch exceptions at every layer and convert them into some other
> exception. in this case you litter the code with catch statements
> that seem superflouos.
The second and third approaches can indeed be taken to an extreme in
order to render exceptions completely meaningless. However, I think
there are reasonable alternatives. In general, I think the design of
exception types should be guided by the need to handle different errors
differently.
When certain errors occur, a program can usefully try to recover,
perhaps by waiting a little while and trying again. Other kinds of
errors need to be handled by giving up and letting a person sort it out.
Depending on what went wrong, that person might be an ordinary user or
a system administrator, and the sort of information they'll want to be
given will vary accordingly.
Exceptions propagate upwards from low-level subsystems into higher-level
ones; at some point, the program must take some action in response to
the exception. Often this is most reasonably done at the point where a
'unit of work' (something that would be meaningful to the user) was
initiated. At that point, the program doesn't care what the precise
reason for the exception was; it only needs to know which sort of action
to take. Retry? Pop up a dialog box to tell the user that the input
was bad and needs to be corrected? Log the error as a bug with a full
stack trace, and send an email to the system administrator? With some
programs, the user will want to be able to configure which errors are
handled in which ways. This suggests that each type of problem that
needs (or may need) distinct error-handling behaviour also needs its own
exception type.
For some programs, it is enough to define three general exception types:
(1) error caused by bad user input, (2) error caused by the failure of
some external resource, such as a network or a database, and (3) error
caused by a bug in the program (assertion failure). (A subtype of (2),
indicating that it may be worth retrying, can be useful.) When a more
specific exception (such as an I/O error) is caught by a low-level
subsystem, it can be wrapped in an exception of one of these three
general types, and allowed to propagate upwards until it reaches the
function that initiated the unit of work. That function can pass the
exception to a subsystem that knows about the user's error-handling
configuration, in order to determine whether to retry or just report the
error. The error-handling subsystem can also take care of reporting the
error in the appropriate way, according to its type. Since the original
low-level exception is still there, wrapped in the more general
exception, reporting can be as detailed as needed.
For other programs, these simple categories will be insufficient, but
you get the idea.
Ben
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
next prev parent reply other threads:[~2003-11-19 2:47 UTC|newest]
Thread overview: 95+ messages / expand[flat|nested] mbox.gz Atom feed top
2003-11-13 0:50 Dustin Sallings
2003-11-13 1:18 ` David Fox
2003-11-13 4:09 ` Dustin Sallings
2003-11-14 13:42 ` Damien Doligez
2003-11-14 14:57 ` Christophe Raffalli
2003-11-14 20:24 ` Dmitry Bely
2003-11-14 20:54 ` Eric Dahlman
2003-11-14 22:21 ` Brian Hurt
2003-11-14 21:36 ` John J Lee
2003-11-14 21:48 ` Brian Hurt
2003-11-15 1:47 ` Dmitry Bely
2003-11-15 2:25 ` Max Kirillov
2003-11-15 2:49 ` Mike Furr
2003-11-16 4:09 ` [Caml-list] Bugs from ignoring errors from close (was Re: GC and file..) Tim Freeman
2003-11-15 2:58 ` [Caml-list] GC and file descriptors David Brown
2003-11-17 14:19 ` Damien Doligez
2003-11-17 18:18 ` skaller
2003-11-14 18:35 ` Dustin Sallings
2003-11-15 14:16 ` skaller
2003-11-15 15:56 ` Ville-Pertti Keinonen
2003-11-15 17:30 ` skaller
2003-11-15 20:31 ` Martin Berger
2003-11-16 19:19 ` Brian Hurt
2003-11-17 18:15 ` skaller
2003-11-17 19:26 ` Aleksey Nogin
2003-11-18 13:49 ` skaller
2003-11-18 17:51 ` Dustin Sallings
2003-11-18 20:17 ` Aleksey Nogin
2003-11-20 7:36 ` Florian Hars
2003-11-17 21:20 ` Brian Hurt
2003-11-17 23:02 ` John J Lee
2003-11-18 12:05 ` Ville-Pertti Keinonen
2003-11-18 15:19 ` skaller
2003-11-18 18:10 ` John J Lee
2003-11-18 17:55 ` skaller
2003-11-18 20:02 ` Ville-Pertti Keinonen
2003-11-18 21:20 ` John J Lee
2003-11-19 12:25 ` skaller
2003-11-19 13:55 ` Ville-Pertti Keinonen
2003-11-19 14:26 ` Samuel Lacas
2003-11-19 14:47 ` skaller
2003-11-18 15:28 ` skaller
2003-11-18 18:00 ` John J Lee
2003-11-18 22:28 ` Brian Hurt
2003-11-18 23:07 ` John J Lee
2003-11-18 23:22 ` Benjamin Geer
2003-11-19 1:49 ` Martin Berger
2003-11-19 3:57 ` Dustin Sallings
2003-11-19 13:35 ` skaller
2003-11-19 13:00 ` skaller
2003-11-19 13:02 ` skaller
2003-11-19 17:36 ` Brian Hurt
2003-11-20 5:14 ` skaller
2003-11-20 7:37 ` David Brown
2003-11-18 15:12 ` skaller
2003-11-18 16:49 ` Martin Berger
2003-11-18 17:46 ` skaller
2003-11-19 1:33 ` Martin Berger
2003-11-19 3:19 ` Design by Contract, was " Brian Hurt
2003-11-19 2:57 ` Jacques Carette
2003-11-19 13:27 ` skaller
2003-11-19 14:41 ` Martin Berger
2003-11-19 16:54 ` Richard Jones
2003-11-19 17:18 ` Damien Doligez
2003-11-19 21:45 ` Richard Jones
2003-11-19 23:09 ` Benjamin Geer
2003-11-20 0:50 ` Nicolas Cannasse
2003-11-20 9:42 ` Benjamin Geer
2003-11-19 18:03 ` Martin Berger
2003-11-18 18:26 ` Benjamin Geer
2003-11-18 19:24 ` Xavier Leroy
2003-11-18 23:49 ` Benjamin Geer
2003-11-19 1:36 ` Martin Berger
2003-11-19 2:28 ` Nicolas Cannasse
2003-11-19 3:26 ` Brian Hurt
2003-11-19 11:44 ` Martin Berger
2003-11-19 17:29 ` Brian Hurt
2003-11-20 5:17 ` skaller
2003-11-20 16:13 ` Brian Hurt
2003-11-19 13:33 ` skaller
2003-11-19 17:01 ` Richard Jones
2003-11-22 2:39 ` [Caml-list] AutoMLI (Was: GC and file descriptors) Jim
2003-11-19 17:43 ` [Caml-list] GC and file descriptors Brian Hurt
2003-11-20 5:05 ` skaller
2003-11-19 1:33 ` Martin Berger
2003-11-19 2:47 ` Benjamin Geer [this message]
2003-11-18 22:23 ` Brian Hurt
2003-11-19 13:00 ` skaller
2003-11-17 22:37 ` OCaml popularity [was: Re: [Caml-list] GC and file...] John J Lee
2003-11-18 1:02 ` [Caml-list] Re: GC and file descriptors Jed Davis
2003-11-13 1:19 ` [Caml-list] " Nicolas George
[not found] ` <87smkstkhg.fsf@igloo.phubuh.org>
[not found] ` <347A7A46-1612-11D8-8F93-000393CFE6B8@spy.net>
2003-11-13 20:18 ` Mikael Brockman
[not found] <20031118232227.GA8437@swordfish>
[not found] ` <Pine.LNX.4.44.0311182039440.5009-100000@localhost.localdomain>
2003-11-20 6:35 ` Matt Gushee
2003-11-21 16:44 ` skaller
2003-11-21 22:17 Gregory Morrisett
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=3FBAD9C8.40103@socialtools.net \
--to=ben@socialtools.net \
--cc=caml-list@inria.fr \
--cc=martinb@dcs.qmul.ac.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox