Browse thread
[Caml-list] assertions or exceptions?
-
Radu Grigore
- Richard Jones
- Jon Harrop
- Brian Hurt
[
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: | 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