comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: Exceptions
Date: Tue, 11 Dec 2007 15:21:57 +0200
Date: 2007-12-11T15:21:57+02:00	[thread overview]
Message-ID: <475e8bde$0$27850$4f793bc4@news.tdc.fi> (raw)
In-Reply-To: <1x0h6yxp9rhy1.1thonmo9cmwy3$.dlg@40tude.net>

Dmitry A. Kazakov wrote:
> On Mon, 10 Dec 2007 22:02:55 +0200, Niklas Holsti wrote:
> 
>>One reason for the large number of application-defined exceptions 
>>in this application may be that it uses a lot of functional-style 
>>programming with functions that return objects with run-time 
>>constraints (eg. unconstrained array types). Such functions cannot 
>>easily use error codes and must use exceptions to signal problems.
> 
> I tend use End_Error, Use_Error, Data_Error in such cases.

I don't like that at all, because in my mind End_Error etc. are 
associated with Ada IO, not with my application -- their meaning 
(semantics :-) is not appropriate, and I don't want to be Humpty 
Dumpty and make them mean what I want them to mean.

Of course, if the function in question actually is reading a file, 
and fails because the file ends at an unexpected point, then 
End_Error could be appropriate. But for a function that has no 
connection with IO I would never "reuse" End_Error just to avoid 
declaring a specific exception.

> The question is
> how many different exceptions may propagate from a set of closures used in
> one context. Not that many, so my guess is that one need not so many
> different exceptions.

But surely one of the main points of a contract is to show what a 
caller may have to do, to handle the propagated exceptions. To 
"overload" one exception (such as End_Error) with many different 
meanings, perhaps requiring different handling, would make the 
caller's job difficult.

I agree that the number of different exceptions that are usefully 
propagated from most subprograms is generally small, because the 
caller does not have enough understanding of the possible 
exceptional situtations in the callee to be able to handle many 
different exceptions in specific ways.

>>Clearly most subprograms have no exception 
>>handlers at all and thus propagate all exceptions raised in them or 
>>in their callees.
> 
> Yes, this why I don't believe in the argument of abundant exception
> handlers spoiling each and other program block. I don't see why contracts
> should change anything here.

I think all subprograms would need contracts (to specify the 
possibly propagated exceptions), not just the few subprograms that 
have exception handlers. The contract has to be in the subprogram 
declaration, while the presence or absence of exception handlers is 
a property of the body.

Exception contracts could become a considerable part of the source 
code, especially if they would have to include the "always 
possible" exceptions like Storage_Error and in the absence of any 
SPARK-like analysis to exclude impossible exceptions from the contract.

> A typical scenario: A lazy (let's say busy) programmer designs some set of
> low-level primitives raising some exceptions. Then he starts to write a
> middle layer that reuses those primitives, not necessarily in exactly this
> order, but anyway. The exceptions of the middle layer are different, and of
> course, the lower level exceptions do not propagate out the middle layer.
> At this point he has already forgot most of when and what the lower level
> raises. He remembers the exceptions E3 and E10, but the rest is vanished.
> He decides whether to use "when others" but has no clear idea what to do
> there, so maybe he places something looking more or less appropriate there
> hoping that the debugging phase will shed more light on the issue, or just
> drop it, depending on how much coffee he already had. The rest is obvious.
> Does it sound familiar?

Not really. I use informal exception contracts (in comments 
describing each and every subprogram), so I have not experienced 
that kind of mess. But I have mistakenly omitted a necessary 
handler once or twice, generally when the raise-to-handle distance 
has been very large (fatal or semi-fatal exception).

> Now a contracted exceptions scenario: The programmer contracts a
> middle-layer subprogram as non-propagating anything he does not want to. He
> does not write any handlers, just compiles the code. The compiler complains
> about E1. Aha - he says, where that E1 comes from? This repeats until all
> low-level exceptions are caught, *understood* and handled.

That would be ideal, and very much in the Ada spirit. But I can see 
why it is not an easy addition to Ada.

>>The main problem I see in contracted exceptions is the problem with 
>>layered architectures where some intermediate layers are 
>>general/generic and not application-specific....
> 
> I think there is no simple answer to this. What could help IMO is:
> 
> 1. Conditional exception contracts (for things like Storage_Error and
> exceptions from the closures)
> 
> 2. Inheritable exception contracts (to be able to refer to a group of
> exceptions from another subprogram)
> 
> 3. Making exceptions an ordered type with some kind of tree-like distance.
> 
> 4. Renaming/delegation of exceptions.

And perhaps also

   5. Exceptions as formal generic parameters.

-- 
Niklas Holsti
Tidorum Ltd
niklas holsti tidorum fi
       .      @       .



  reply	other threads:[~2007-12-11 13:21 UTC|newest]

Thread overview: 100+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-12-06 15:00 Exceptions shaunpatterson
2007-12-06 21:24 ` Exceptions tmoran
2007-12-07  8:54   ` Exceptions Dmitry A. Kazakov
2007-12-07 10:21     ` Exceptions Georg Bauhaus
2007-12-07 15:11       ` Exceptions shaunpatterson
2007-12-07 16:08         ` Exceptions Gautier
2007-12-07 18:56         ` Exceptions Simon Wright
2007-12-08 10:04         ` Exceptions Stephen Leake
2007-12-08  3:30     ` Exceptions Randy Brukardt
2007-12-08 10:09       ` Contracted exceptions for Ada (was: Exceptions) Dmitry A. Kazakov
2007-12-09 10:22         ` Contracted exceptions for Ada Stephen Leake
2007-12-09 11:02           ` Dmitry A. Kazakov
2007-12-11  8:10             ` Stephen Leake
2007-12-11 10:36               ` Dmitry A. Kazakov
2007-12-09 15:11         ` Contracted exceptions for Ada (was: Exceptions) Martin Krischik
2007-12-09 17:36           ` Contracted exceptions for Ada Dmitry A. Kazakov
2007-12-09 18:39             ` Simon Wright
2007-12-10  8:19               ` Dmitry A. Kazakov
2007-12-10 20:25                 ` Simon Wright
2007-12-11  8:50                   ` Dmitry A. Kazakov
2007-12-11 20:50                     ` Simon Wright
2007-12-12 10:20                       ` Dmitry A. Kazakov
2007-12-09 19:04             ` Martin Krischik
2007-12-10  8:20               ` Dmitry A. Kazakov
2007-12-09 22:09         ` Robert A Duff
2007-12-10  7:09           ` Stefan Lucks
2007-12-10 16:57             ` Robert A Duff
2007-12-11  1:53         ` Contracted exceptions for Ada (was: Exceptions) Randy Brukardt
2007-12-11  9:16           ` Contracted exceptions for Ada Dmitry A. Kazakov
2007-12-12  0:26             ` Randy Brukardt
2007-12-08 12:26       ` Exceptions Peter C. Chapin
2007-12-08 14:01         ` Exceptions Dmitry A. Kazakov
2007-12-08 18:01           ` Exceptions Peter C. Chapin
2007-12-09 10:06             ` Exceptions Dmitry A. Kazakov
2007-12-09 12:40               ` Exceptions Peter C. Chapin
2007-12-09 14:31                 ` Exceptions Dmitry A. Kazakov
2007-12-09 16:38                   ` Exceptions Peter C. Chapin
2007-12-10  8:31                     ` Exceptions Dmitry A. Kazakov
2007-12-09 21:56                 ` Exceptions Robert A Duff
2007-12-09 10:24             ` Exceptions Stephen Leake
2007-12-09 12:46               ` Exceptions Peter C. Chapin
2007-12-09 21:39   ` Exceptions Robert A Duff
2007-12-09 22:13     ` Exceptions Georg Bauhaus
2007-12-11  8:07       ` Exceptions Stephen Leake
2007-12-11 20:28         ` Exceptions Simon Wright
2007-12-12 22:10         ` Exceptions Maciej Sobczak
2007-12-13 13:40           ` Exceptions Robert A Duff
2007-12-13 14:00             ` Exceptions Maciej Sobczak
2007-12-13 14:44               ` Exceptions Robert A Duff
2007-12-14  0:46                 ` Exceptions Ray Blaak
2007-12-14  2:36                   ` Exceptions Randy Brukardt
2007-12-14  6:21                     ` Exceptions Ray Blaak
2007-12-14 12:40                       ` Exceptions Georg Bauhaus
2007-12-14 17:29                   ` Exceptions Robert A Duff
2007-12-14 19:32                     ` Exceptions Dmitry A. Kazakov
2007-12-15  5:29                     ` Exceptions Ray Blaak
2007-12-13 19:29               ` Exceptions Randy Brukardt
2007-12-12 19:18     ` Exceptions Martin Krischik
2007-12-13 13:27       ` Exceptions Robert A Duff
2007-12-13 23:25       ` Exceptions Ray Blaak
2007-12-06 21:25 ` Exceptions Gautier
2007-12-07  4:29 ` Exceptions anon
2007-12-07  4:43 ` Exceptions, part 2 anon
2007-12-07 16:55 ` Exceptions Adam Beneschan
2007-12-07 18:59   ` Exceptions Simon Wright
2007-12-08  0:38     ` Exceptions Adam Beneschan
2007-12-09 21:45     ` Exceptions Robert A Duff
2007-12-09 22:40       ` Exceptions Georg Bauhaus
2007-12-10  8:22         ` Exceptions Dmitry A. Kazakov
2007-12-10  9:20           ` Exceptions Georg Bauhaus
2007-12-10  9:30             ` Exceptions Georg Bauhaus
2007-12-10 10:56             ` Exceptions Dmitry A. Kazakov
2007-12-11  2:18               ` Exceptions Randy Brukardt
2007-12-11  8:19               ` Exceptions Georg Bauhaus
2007-12-11 11:55                 ` Exceptions Dmitry A. Kazakov
2007-12-11 16:13                   ` Exceptions Georg Bauhaus
2007-12-12 11:18                     ` Exceptions Dmitry A. Kazakov
2007-12-10 12:09           ` Exceptions Niklas Holsti
2007-12-10 13:08             ` Exceptions Dmitry A. Kazakov
2007-12-10 20:02               ` Exceptions Niklas Holsti
2007-12-11 12:31                 ` Exceptions Dmitry A. Kazakov
2007-12-11 13:21                   ` Niklas Holsti [this message]
2007-12-12  0:01                     ` Exceptions Randy Brukardt
2007-12-12 11:37                       ` Exceptions Niklas Holsti
2007-12-12 13:14                         ` Exceptions Dmitry A. Kazakov
2007-12-12 14:37                       ` Exceptions Robert A Duff
2007-12-13 19:20                         ` Exceptions Randy Brukardt
2007-12-13 20:15                           ` Exceptions Robert A Duff
2007-12-12 11:00                     ` Exceptions Dmitry A. Kazakov
2007-12-11  2:12           ` Exceptions Randy Brukardt
2007-12-11 15:17             ` Exceptions Robert A Duff
2007-12-12  0:10               ` Exceptions Randy Brukardt
2007-12-13 19:58                 ` Exceptions Robert A Duff
2007-12-14  0:53                 ` Exceptions Ray Blaak
2007-12-14  2:48                   ` Exceptions Randy Brukardt
2007-12-14  6:33                     ` Exceptions Ray Blaak
2007-12-08 10:03 ` Exceptions Stephen Leake
  -- strict thread matches above, loose matches on Subject: below --
1991-03-06 17:24 Exceptions David Erickson
1991-03-06 21:21 ` Exceptions Jerry Callen
1989-06-23 21:57 Exceptions howell
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox