Re: Irrelevant variables in patterns

Chet Murthy (murthy@pauillac.inria.fr)
Sat, 28 May 1994 12:43:29 +0200

To: Christophe Raffalli <cr@dcs.ed.ac.uk>
Subject: Re: Irrelevant variables in patterns
In-Reply-To: Your message of Sat, 28 May 1994 11:36:02 -0000.
<13319.9405281036@colonsay.dcs.ed.ac.uk>
Date: Sat, 28 May 1994 12:43:29 +0200
Message-Id: <29438.770121809@pauillac.inria.fr>
From: Chet Murthy <murthy@pauillac.inria.fr>

>>>>> On Sat, 28 May 1994 11:36:02 -0000, Christophe Raffalli <cr@dcs.ed.ac.uk> said:

>>>La solution serait plutot de fournir un warning lorsque l'on
>>>capture toutes les exception, car cela est un bug dans 99% des cas
>>>(on ne veut pas attraper Catch_break ou Out_of_memory en general).

>But that doesn't work if I have 10 different exceptions in my program
>- I am unwilling to write 10-way branches, as are most programmers.

>Exceptions in ML are a programming mechanism. They are not used
>anymore for exceptional conditions. We need a new mechanism for
>that.

CR> Ok, but as long as "Out_of_memory" and "catch_break" are
CR> exceptions, if you don't write the ten cases, this is likely
CR> to be a bug !!

Actually, that's not the case. Often, I write:

try blablab with (E1(x,y,z)) -> code1
| (E2(x,y,z)) -> code2
| e -> handle_exceptions_generally e
;;

Now, that code ought to be written without consideration for things
like Out_of_memory. Its like writing code in C to do signals. If you
don't _explicitly_ mess with SIGSEGV, you can't screw yourself.

Moreover, even if I _do_ write the code in handle_exceptions_generally
to treat Out_of_memory, etc, I get many warnings telling me that I am
catching the exception.

The fact that there isn't a separation of exceptions into classes
really limits their usefulness. At least, we need two classes -
"signals" and "exceptions". "signals" would be thing which you have
to register global handlers for.

CR> Furthermore, I just asked for a warning ! this would catch the
CR> attention of the programmer on a likely bug. but if he knowns
CR> what he is doing, he is free to do so.

Superfluous warning confuse the programmer, and cause him to disregard
the warnings completely. Which can cause him real pain when it was a
warning that he should have heeded.

--chet--