Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] assertions or exceptions?
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Richard Jones <rich@a...>
Subject: Re: [Caml-list] assertions or exceptions?
On Thu, Jul 15, 2004 at 11:03:24AM +0300, Radu Grigore wrote:
> So, now a few questions:
> 1. Is my impression that OCaml standard library is abusing
> exceptions correct?

There's always a conflict between raising a Not_found exception and
returning an 'a option result.  Example (from mod_caml).  Should the
function which returns the hostname field from the request_rec
structure be prototyped as:

Apache.Request.hostname : Apache.Request.t -> string
  # could throw Not_found if the C string is NULL.

or:

Apache.Request.hostname : Apache.Request.t -> string option
  # returns Some string, or None if the C string is NULL

In fact, I chose the former (throwing Not_found exception)
consistently throughout mod_caml.

The reason is that returning 'a option forces you to deal with the
'None' case every time you use (eg). Apache.Request.hostname.  But in
many cases, the underlying C fields being NULL is an internal error
for which we are not prepared, and the only sensible thing to do then
is not to force people to deal with it locally, but to throw an
exception which causes the whole script/program to fail.

However in some cases the right thing to do would be to return 'a
option, precisely *because* you require the programmer to deal with
the error locally.

> 2. Is it safe to assume that exceptions complicate functional
> programs as much as they complicate imperative ones?

Perhaps in theory, but in practice they work just fine.

> 3. Is it possible to avoid using exceptions and read a text file
> line-by-line until EOF?

There are functions in ExtLib to do this, I think.  If not then you
should write a function like 'input_all_lines' or 'iter_over_lines f'
once, put it into a small local library, and use it every time.  No
point reinventing wheels each time.

Rich.

-- 
Richard Jones. http://www.annexia.org/ http://www.j-london.com/
Merjis Ltd. http://www.merjis.com/ - improving website return on investment
'There is a joke about American engineers and French engineers. The
American team brings a prototype to the French team. The French team's
response is: "Well, it works fine in practice; but how will it hold up
in theory?"'

-------------------
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