From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id KAA13002; Thu, 15 Jul 2004 10:03:28 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id KAA13251 for ; Thu, 15 Jul 2004 10:03:27 +0200 (MET DST) Received: from mproxy.gmail.com (mproxy.gmail.com [216.239.56.247]) by nez-perce.inria.fr (8.12.10/8.12.10) with SMTP id i6F83PEV025832 for ; Thu, 15 Jul 2004 10:03:26 +0200 Received: by mproxy.gmail.com with SMTP id w29so983062cwb for ; Thu, 15 Jul 2004 01:03:25 -0700 (PDT) Received: by 10.11.99.56 with SMTP id w56mr48690cwb; Thu, 15 Jul 2004 01:03:24 -0700 (PDT) Message-ID: <7f8e92aa04071501035091cbe9@mail.gmail.com> Date: Thu, 15 Jul 2004 11:03:24 +0300 From: Radu Grigore To: caml-list@inria.fr Subject: [Caml-list] assertions or exceptions? Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-Miltered: at nez-perce with ID 40F63A4D.001 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Loop: caml-list@inria.fr X-Spam: no; 0.00; api:01 invariants:01 argues:01 ewd:99 ewd:99 faq:01 pgl-eng:01 020.:01 ocaml:01 ocaml:01 caml:01 assertions:01 assertions:01 checking:01 simpler:01 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk Hello, First of all let me warn you that I am a beginner when it comes to OCaml: I have experience in programming with other languages (C++), I have read about OCaml, but I have only written about 1000 lines of OCaml code, and only two "programs" were actually useful. The purpose of this mail is to gather opinions on when should assertions be used and when exceptions should be used. I have noticed that the standard libraries use exceptions heavily. This feels strange to me because I prefer to use assertions whenever possible. There are other libraries, notably Java API and .NET class library, that use exceptions liberaly. But they don't bother me that much because they try to give you the option of not relying on them throwing exceptions. Whenever possible they provide functions that check parameters and return a boolean. In [6] an example is given: "whenever a FileNotFind exception might be thrown by method A, there should be a method B that checks for this and returns a boolean". However in OCaml I don't know how to tell if I've reached the end of a file without using exceptions. But why is a boolean better than an exception? Because it makes code simpler. Exceptions can be left uncaught and this is a potential cause for a combinatorial explosion of the number of possible "execution paths" (tricky notion in a functional language, I know. For example Herb Sutter in [5] identifies 23 execution paths in a 4-line C++ program because of exceptions! This kind of complexity makes it hard to reason about the correctness of a program and is one of the reasons that made Dijkstra say goto is generally a bad idea [2]. This doesn't mean that it is _always_ a bad idea. There is an OCaml programming guidelines document [3] that say that _assertions_ (not exceptions -- my note) should be used to check preconditions. There is also a tutorial on assertions from Sun [1] that finally gives some hints on when to use assertions and when exceptions: assertions should be used for preconditions of private methods and other internal invariants (including postconditions), while exceptions should be used only for checking preconditions of non-private methods. But I think the reason given for using exceptions is weak: we need to honor a contract that includes exceptions. So, we need to use exceptions because we said at some point in time that we will use exceptions. Not a very good argument. What's more Herb Sutter argues here [4] that a contract that includes exceptions is actually not that good in practice. So, now a few questions: 1. Is my impression that OCaml standard library is abusing exceptions correct? 2. Is it safe to assume that exceptions complicate functional programs as much as they complicate imperative ones? 3. Is it possible to avoid using exceptions and read a text file line-by-line until EOF? 4. When do you use assertions and when do you use exceptions? regards, radu [1] http://java.sun.com/j2se/1.4.2/docs/guide/lang/assert.html [2] http://www.cs.utexas.edu/users/EWD/transcriptions/EWD01xx/EWD117.html [3] http://pauillac.inria.fr/caml/FAQ/pgl-eng.html [4] http://www.gotw.ca/gotw/082.htm [5] http://www.gotw.ca/gotw/020.htm [6] http://tinyurl.com/2opdo ------------------- 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