[Haskell-cafe] Re: New Hackage category: Error Handling

Henning Thielemann lemming at henning-thielemann.de
Mon Dec 7 19:00:54 EST 2009


On Tue, 8 Dec 2009, Ben Franksen wrote:

> Michael, Henning
>
> There are two meanings to the word 'exception' in this context; both of you
> tend to conflate these different meanings. One meaning is about a
> *mechanism* for non-local control flow; the other is about certain classes
> of un-desired program conditions.
>
> Michael, you are above arguing that it is ok to use the same /mechanism/ to
> signal errors and exceptions. That is ok with me.

I'm actually arguing that errors and exceptions (or failures) should not 
be treated the same way. This is my opinion because

1. You cannot catch all kinds of errors (infinite loops, memory 
corruption, and so on) at run-time
2. The program cannot help itself if it is buggy. The next higher level 
in the software hierarchy certainly can, but this requires obviously a 
different mechanism.

The correct treatment of those things is in my opion:

1. Errors must be fixed by the programmer
2. Exceptions must be appreciated by the programmer and handled by the program at runtime

> So, maybe it would help if we could agree to use different terms for those
> two meanings of the word 'exception'. I think 'exception' is too strongly
> associated with the non-local control flow mechanism to introduce a new
> word for it.

  I used the term "exception" because this is the term used for the concept 
of handling "file not found", "could not allocate resource" in the 
introduction to modern languages that I have read. Thus my impression was 
that "exception" is the term for the concept, whereas there are different 
implementations and ways of handling them. For instance in Modula-3 the 
EXIT statement is called an exception that escapes the LOOP structure, but 
it cannot be catched with TRY, that is used for user defined exceptions.

  http://www.cs.purdue.edu/homes/hosking/m3/reference/exit.html

  In Modula-3 a detected error (range violation, NIL dereference, division 
by zero) terminates the program. An undetected error (which is restricted 
to UNSAFE modules) can cause memory corruption and all those bad things, 
and cannot be handled in any way.
  Before exceptions got a special handling in programming language, they 
still existed. In C for instance they were expressed by return codes.

  The Wikipedia author also seem to consider "exception" to be the term for 
the concept, not for the implementation:

http://en.wikipedia.org/wiki/Exception_handling

"Exception handling is a programming language construct or computer 
hardware mechanism designed to handle the occurrence of exceptions, 
special conditions that change the normal flow of program execution."


More information about the Haskell-Cafe mailing list