comp.lang.ada
 help / color / mirror / Atom feed
From: Joachim Durchholz <joachim.durchholz@munich.netsurf.de>
Subject: Re: Building blocks (Was: Design By Contract)
Date: 1997/09/20
Date: 1997-09-20T00:00:00+00:00	[thread overview]
Message-ID: <3423BE13.9C3852A4@munich.netsurf.de> (raw)
In-Reply-To: EGrz21.GoG@world.std.com


Robert A Duff wrote:
> The exception handler would still be required to obey
> the postcondition.

With the exception that postconditions (even if you writen them down as
raise_statements) aren't handled as well as in Eiffel: They aren't
automatically included in the package documentation, and they aren't
automatically inherited by descendants (if it's a tagged type).

> Either way, there's always the danger that the
> programmer forgot to handle some case correctly.

Agreed.

> Furthermore, retry seems to have all the bad properties of goto.  And
> the worst sort of goto -- the kind that jumps backwards in the code,
> forming a loop, without actually writing "loop" at the front.

I don't particularly like the semantics of retry. I've already seen
Eiffel code that was so obfuscated by squeezing the error handling logic
into a loop that it was actually wrong. And the author was actually one
of the Big Names in the Eiffel community...

Personally, I'd prefer the C++/Java style:
  try
    -- code that may raise an exception
  on <exception identification> do
    -- exception handler
  on <other exception id> do
  ...
  end
(ad-hoc syntax).

I don't like the Ada solution either. It is "structured" in that it will
resume execution at the point where the execution occurred, but that's
*very* wrong. The exception handler can't know at which point in the
code the exception occurred (maybe even in a subroutine!), so it can't
know what to do to fix the problem.
The Eiffel solution is marginally better - it says "if it don't work,
don't try to fix it, try again if there is anything to do about it".
This policy isn't wrong, but it doesn't cover all cases where an
exception might be raised.

[good examples of obfuscated retry statements snipped]

> >"This mechanism strictly adheres to the Disciplined Exception
> Handling
> >principle: either a routine succeeds, that is to say its body
> executes
> >to the end and satisfies the postcondition, or it fails.
> 
> This is a bogus definition of "succeed".  The only sensible definition
> is "obeys the postcondition".  And that could be achieved just as well
> without retry.

Yup.
Though Ada has no formal connection to postconditions, so it doesn't
offer us guidelines what to do about an exception.

What's disciplined about Eiffel exceptions is not the retry instruction,
which is somewhat secondary. The discipline of exception handling in
Eiffel has other sources:
- A precise definition of what an exception indicates (namely a routine
that fails to fulfill its postcondition - other languages, lacking the
notion of postcondition, can't even start to compete)
- A strict guideline when to raise an exception explicitly: if something
uncontrollable happens that makes fulfilling a postcondition
imnpossible. Such uncontrollable events are: actions by concurrent
threads, bugs, unhandled exceptions in called routines, and algorithms
where controlling the problems is nearly as expensive as just trying
(like in matrix inversion, where determining wether a matrix is
invertible takes nearly as long as just starting the inversion and
aborting if a division by zero occurs).
- A strong guideline *not* to use exceptions as interprocedural goto.
(I'm pretty sure that this is frowned upon by all serious Ada shops, but
it's still a difference if such a guideline is expressed in all
textbooks from the beginning of if you have to install such a policy. I
call such conventions "language culture" - it's not part of the formal
specification, but important enough to strongly influence the average
quality of programs written in a language.)

> In summary, I think it's postconditions that help make routines work
> properly in all cases (including exceptional cases).  I don't see any
> way in which "retry" helps ensure that postconditions are obeyed, and
> I
> think retry simply makes the code more confusing.

Right.

Regards,
Joachim
-- 
Please don't send unsolicited ads.






  reply	other threads:[~1997-09-20  0:00 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1997-09-09  0:00 Building blocks (Was: Design By Contract) Marc Wachowitz
1997-09-15  0:00 ` Joachim Durchholz
1997-09-17  0:00 ` Paul Johnson
1997-09-18  0:00   ` Robert Dewar
1997-09-18  0:00   ` Stephen Leake
1997-09-18  0:00     ` Mark L. Fussell
1997-09-19  0:00       ` Robert A Duff
1997-09-20  0:00         ` Joachim Durchholz [this message]
1997-09-22  0:00           ` Matthew Heaney
1997-09-23  0:00             ` Joachim Durchholz
1997-09-23  0:00             ` Veli-Pekka Nousiainen
1997-10-03  0:00               ` Robert I. Eachus
1997-10-04  0:00                 ` Paul Johnson
1997-10-14  0:00                   ` Robert I. Eachus
1997-09-23  0:00           ` Jon S Anthony
1997-09-24  0:00           ` Richard A. O'Keefe
1997-09-24  0:00           ` Alan E & Carmel J Brain
1997-09-25  0:00             ` Anonymous
1997-09-30  0:00               ` Alan E & Carmel J Brain
1997-09-30  0:00                 ` Matthew Heaney
1997-09-30  0:00                   ` Neil Wilson
1997-09-30  0:00                     ` Stephen Leake
1997-09-30  0:00                   ` W. Wesley Groleau x4923
1997-09-30  0:00                     ` Matthew Heaney
1997-10-01  0:00                     ` Alan E & Carmel J Brain
1997-10-01  0:00                 ` Anonymous
1997-10-01  0:00                   ` Paul M Gover
1997-10-04  0:00                     ` Paul Johnson
1997-10-04  0:00                       ` Matthew Heaney
1997-10-15  0:00                         ` Paul Johnson
1997-10-15  0:00                           ` Matthew Heaney
1997-10-16  0:00                             ` Joachim Durchholz
1997-10-17  0:00                               ` Robert I. Eachus
1997-10-16  0:00                           ` Joachim Durchholz
1997-10-22  0:00                           ` Reimer Behrends
1997-10-01  0:00                   ` Joachim Durchholz
1997-10-02  0:00                   ` Robert A Duff
1997-10-02  0:00                     ` Tucker Taft
1997-10-02  0:00                       ` Matthew Heaney
1997-10-03  0:00                     ` Stephen Leake
1997-10-04  0:00                     ` Matthew Heaney
1997-10-07  0:00                       ` Robert A Duff
     [not found]       ` <11861963wnr@eiffel.demon.co.uk>
1997-09-19  0:00         ` Mark L. Fussell
1997-09-19  0:00       ` Jon S Anthony
1997-09-23  0:00         ` Mark L. Fussell
1997-09-18  0:00     ` W. Wesley Groleau x4923
1997-09-21  0:00       ` Matthew Heaney
1997-09-18  0:00   ` Jon S Anthony
  -- strict thread matches above, loose matches on Subject: below --
1997-09-11  0:00 Robert Dewar
1997-09-09  0:00 Marc Wachowitz
1997-09-02  0:00 Design By Contract Jon S Anthony
     [not found] ` <JSA.97Sep3201329@alexandria.organon.com>
1997-09-04  0:00   ` Paul Johnson
     [not found]     ` <5un58u$9ih$1@gonzo.sun3.iaf.nl>
1997-09-06  0:00       ` Building blocks (Was: Design By Contract) Joachim Durchholz
1997-09-08  0:00       ` Paul Johnson
1997-09-08  0:00         ` Brian Rogoff
1997-09-09  0:00           ` W. Wesley Groleau x4923
1997-09-09  0:00           ` Matthew Heaney
1997-09-09  0:00             ` Brian Rogoff
1997-09-09  0:00             ` W. Wesley Groleau x4923
1997-09-10  0:00               ` Robert A Duff
1997-09-12  0:00                 ` Jon S Anthony
1997-09-10  0:00             ` Robert Dewar
1997-09-12  0:00               ` Paul Johnson
1997-09-14  0:00                 ` Robert Dewar
1997-09-15  0:00                   ` John G. Volan
1997-09-14  0:00                 ` Robert Dewar
1997-09-14  0:00                 ` Robert Dewar
1997-09-12  0:00               ` Jon S Anthony
1997-09-12  0:00                 ` Robert Dewar
1997-09-16  0:00                   ` Brian Rogoff
1997-09-10  0:00             ` Paul Johnson
1997-09-10  0:00               ` Darren New
1997-09-10  0:00               ` Matthew Heaney
1997-09-09  0:00           ` Veli-Pekka Nousiainen
1997-09-09  0:00           ` Veli-Pekka Nousiainen
1997-09-09  0:00             ` Jon S Anthony
replies disabled

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