comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: about the new Ada 2012 pre/post conditions
Date: Sat, 7 Jul 2012 10:06:49 +0200
Date: 2012-07-07T10:06:49+02:00	[thread overview]
Message-ID: <1ee9qp0cy5me4.1vh22pi92ls6n$.dlg@40tude.net> (raw)
In-Reply-To: jt80n3$gjh$1@munin.nbi.dk

On Fri, 6 Jul 2012 19:43:08 -0500, Randy Brukardt wrote:

> "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de> wrote in message 
> news:13p2n1ve6lbrc.yr8d2a5ljm8$.dlg@40tude.net...
>> On Wed, 4 Jul 2012 21:18:24 -0500, Randy Brukardt wrote:

>>> Exactly. You claim that there cannot be such a thing as a dynamically
>>> enforced contract.
>>
>> Absolutely. How could you enforce a contract which has been *already*
>> violated? If a program reaches an illegal state, it is in that state.
>> Period.
> 
> Illegal /= Wrong. An illegal state cannot be reached because you can't 
> compile the program. An incorrect state can be reached simply by violating a 
> check or contract.

"violating the contract enforced by the contract check", you should have
said.

>>> But handling exceptions raised for contracts does not make the program 
>>> any less wrong;
>>
>> Really? What is the purpose of the exercise? Raising exception, rolling the
>> stack, finalizing stuff, and so on only to resign that the program is as
>> wrong as it was before? (Maybe it is even *more* wrong than it was? (:-))
> 
> Practicality -- it's not possible to find all program errors before a 
> program is fielded.

No practical reasons may do wrong right. I see no practical gain in calling
implementations contracts.

>>>>> The only kind of correctness checks that *can* exist in general are dynamic.
>>>>> Ada's entire reason to exist is to include checks like range checks and
>>>>> overflow checks to programs. Without them you get the buffer overflows
>>>>> and other errors that plague C code.
>>>>
>>>> Yes, but irrelevant. These checks are not contract checks, because,
>>>> otherwise you are in contradiction. No words can change that.
>>>
>>> Certainly not if you insist on using an unnecessarily limiting definition of
>>> "contract".
>>
>> Yes, the contract as opposed to the implementation limits the former not to
>> be the latter [POV #2]. But I am all open to accept that Eiffelesque/Ada
>> 2012 "contracts" are implementations [POV #1]. Do you?
> 
> No, because I use a very different definition of these terms.
> 
> Contract is roughly equivalent to (Ada) specification. Implementation is 
> roughly equivalent to (Ada) body.

That does not change anything. There are two kind entities involved A and
B. The check may be attributed to either A or B. It is not a question of
terminology.

>> The actual fallacy is in pretending that a bug can be handled. You can
>> handle/be in only anticipated states.
> 
> Really? That's certainly not true of my web server or many other programs.
> 
>    exception
>         when Err:others =>
>               Log_Error (Err);
>               Reset_to_Known_Good_State;
>
> The above is that the bottom of most of my tasks. I have no idea what state 
> the task is in when it gets to this handler;

But you have some ideas about the state of the log, about the meaning of
the object Err, about the overall state of your program, such that
Reset_to_Known_Good_State might work.

> I suppose you'll twist the terminology around in some bizarre way to claim 
> that an unanticipated state - which is the only way to reach this handler - 
> is somehow anticipated simply because I can write a handler for it.

Yes. Merely by the fact that the program continues.

Think about it from the angle of preconditions. In ANY state of the program
the preconditions of this state are met. You are going to do

   Log_Error (Err);
   Reset_to_Known_Good_State;

BECAUSE the precondition "some unhandled exception is propagating" is TRUE.
(Would you claim that precondition FALSE?)

>>> [As an aside, this means you do not want real exception contracts, since
>>> they cannot usefully be done without having it be implementation-defined
>>> when an exception is raised by a predefined check. The canonical semantics
>>> of Ada would require assuming that every line raises Storage_Error,
>>> Program_Error, and usually Constraint_Error -- that would make it virtually
>>> impossible to eliminate those exceptions from contracts.
>>
>> I don't see it as a big problem. There is a difference between an
>> obligation to raise exception and a possibility that an exception could be
>> raised.
> 
> No one cares about an "obligation to raise an exception";

Numeric errors, e.g. overflow and zero-divide must raise.

Another important example is when a constructing operation is implemented
like:

  function Create (...) return Boo is
  begin
      raise Use_Error; 
      return Boo;
  end Create;

>> The vendors could gradually reduce the number of cases where E may be
>> raised without making clients relying on weaker contracts illegal. The
>> second cannot be misused to prove that E is raised. It just does not 
>> follow from the second, and conversely.
> 
> I don't see this at all. Once you call a routine that has a contract that 
> says "E might be raised", you have to include "E might be raised" in your 
> contract as well.

No.

1. It is always "E might be raised AND Condition." It might be possible to
prove not Condition. E.g. x + y might raise Constraint_Error if sum is out
of range (or else yield the mathematically correct result). If you can
prove x + y in the range, you don't have Constraint_Error.

2. It you cannot prove not Condition, you still can handle E.

The main practical purpose of exception contracts is to ensure them
handled, rather than attempting to prevent exceptions from being raised.

> This "poisoning" is the major objection to exception 
> contracts in practice.

It cannot be otherwise. Any uncertainty about the condition when an
exception may appear is necessarily propagates to all clients. This cannot
be changed otherwise than by reducing uncertainty:

- at the client side, e.g. through 1 or 2.
- at the callee's side, e.g. strengthening the condition.

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2012-07-07  8:07 UTC|newest]

Thread overview: 125+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-20 13:39 about the new Ada 2012 pre/post conditions Nasser M. Abbasi
2012-06-20 14:02 ` Georg Bauhaus
2012-06-20 14:13 ` Dmitry A. Kazakov
2012-06-20 14:24   ` Nasser M. Abbasi
2012-06-20 14:37     ` Dmitry A. Kazakov
2012-06-20 17:02       ` Georg Bauhaus
2012-06-20 18:28         ` Dmitry A. Kazakov
2012-06-21 20:32       ` Randy Brukardt
2012-06-22  7:23         ` Dmitry A. Kazakov
2012-06-22 11:54           ` Georg Bauhaus
2012-06-22 12:39             ` Georg Bauhaus
2012-06-22 12:43             ` Dmitry A. Kazakov
2012-06-22 14:30               ` Georg Bauhaus
2012-06-22 14:36                 ` Georg Bauhaus
2012-06-22 15:05                 ` Dmitry A. Kazakov
2012-06-22 15:52                   ` Georg Bauhaus
2012-06-22 16:35                     ` Dmitry A. Kazakov
2012-06-22 16:53                       ` Georg Bauhaus
2012-06-22 16:45                   ` Georg Bauhaus
2012-06-22 17:24                     ` Dmitry A. Kazakov
2012-06-22 19:41           ` Randy Brukardt
2012-06-22 23:08             ` Dmitry A. Kazakov
2012-06-23 10:46               ` Georg Bauhaus
2012-06-23 11:01                 ` Dmitry A. Kazakov
2012-06-23 17:46                   ` AdaMagica
2012-06-23 19:23                     ` Dmitry A. Kazakov
2012-06-24 14:59                   ` Georg Bauhaus
2012-06-24 16:06                     ` Dmitry A. Kazakov
2012-06-24 19:51                       ` Georg Bauhaus
2012-06-25  7:48                         ` Dmitry A. Kazakov
2012-06-25 10:10                           ` Georg Bauhaus
2012-06-25  8:08                         ` Dmitry A. Kazakov
2012-06-25 10:17                           ` Georg Bauhaus
2012-06-25 11:54                             ` Dmitry A. Kazakov
2012-06-25 12:39                               ` Georg Bauhaus
2012-06-25 12:51                                 ` Georg Bauhaus
2012-06-25 13:19                                 ` Dmitry A. Kazakov
2012-06-25 16:43                                   ` Georg Bauhaus
2012-06-25 14:08                               ` stefan-lucks
2012-06-25 14:36                                 ` Dmitry A. Kazakov
2012-06-25 14:37                                   ` Dmitry A. Kazakov
2012-06-25 16:26                                   ` stefan-lucks
2012-06-25 19:42                                     ` Dmitry A. Kazakov
2012-06-26 11:50                                       ` stefan-lucks
2012-06-26 13:07                                         ` Dmitry A. Kazakov
2012-06-26 13:49                                           ` Georg Bauhaus
2012-06-26 14:45                                             ` Dmitry A. Kazakov
2012-06-26 16:48                                               ` Georg Bauhaus
2012-06-26 19:43                                                 ` Dmitry A. Kazakov
2012-06-27  8:23                                                   ` Georg Bauhaus
2012-06-27  8:52                                                     ` Dmitry A. Kazakov
2012-06-27 10:30                                                       ` Georg Bauhaus
2012-06-27 12:19                                                         ` Dmitry A. Kazakov
2012-06-27 13:41                                                           ` Nasser M. Abbasi
2012-06-28  7:00                                                             ` Georg Bauhaus
2012-06-27 15:08                                                           ` Georg Bauhaus
2012-06-29 21:03                                               ` Shark8
2012-06-30  8:26                                                 ` Dmitry A. Kazakov
2012-06-30 12:54                                                   ` Niklas Holsti
2012-07-05  2:58                                                   ` Shark8
2012-07-05  7:24                                                     ` Dmitry A. Kazakov
2012-07-06  6:23                                                       ` Shark8
2012-07-06  7:57                                                         ` Dmitry A. Kazakov
2012-07-07  1:09                                                           ` Randy Brukardt
2012-07-07  8:44                                                             ` Dmitry A. Kazakov
2012-06-26 14:54                                           ` stefan-lucks
2012-06-26 15:14                                             ` Dmitry A. Kazakov
2012-07-03  5:28                                           ` Randy Brukardt
2012-07-03 12:53                                             ` Dmitry A. Kazakov
2012-07-03 13:48                                               ` Georg Bauhaus
2012-07-03 14:06                                                 ` Dmitry A. Kazakov
2012-07-03 16:12                                                   ` Georg Bauhaus
2012-07-03 16:45                                                     ` Georg Bauhaus
2012-07-05  1:45                                               ` Randy Brukardt
2012-07-05  7:48                                                 ` Dmitry A. Kazakov
2012-07-05 19:11                                                   ` Adam Beneschan
2012-07-05 19:55                                                     ` Dmitry A. Kazakov
2012-07-06  7:41                                                       ` Georg Bauhaus
2012-07-06  7:47                                                         ` Georg Bauhaus
2012-07-06  8:05                                                         ` Dmitry A. Kazakov
2012-07-06  8:30                                                           ` Georg Bauhaus
2012-07-06  9:01                                                             ` Dmitry A. Kazakov
2012-07-06 11:33                                                               ` Simon Wright
2012-07-06 13:25                                                                 ` Dmitry A. Kazakov
2012-07-06 12:07                                                               ` Georg Bauhaus
2012-07-06 13:37                                                                 ` Dmitry A. Kazakov
2012-07-06 16:17                                                                   ` Georg Bauhaus
2012-07-06 16:34                                                                   ` Georg Bauhaus
2012-07-06 19:18                                                                     ` Dmitry A. Kazakov
2012-07-07  1:24                                                                       ` Randy Brukardt
2012-07-07  9:09                                                                         ` Dmitry A. Kazakov
2012-07-07  1:18                                                                   ` Randy Brukardt
2012-07-07  9:14                                                                     ` Dmitry A. Kazakov
2012-07-07 12:06                                                                       ` Georg Bauhaus
2012-07-07 12:54                                                                         ` Dmitry A. Kazakov
2012-07-07 13:31                                                                           ` Georg Bauhaus
2012-07-03  5:10                                       ` Randy Brukardt
2012-07-03  4:51               ` Randy Brukardt
2012-07-03 12:46                 ` Dmitry A. Kazakov
2012-07-05  2:18                   ` Randy Brukardt
2012-07-05  8:48                     ` Dmitry A. Kazakov
2012-07-05 12:07                       ` Georg Bauhaus
2012-07-05 12:13                         ` Georg Bauhaus
2012-07-05 12:31                         ` Dmitry A. Kazakov
2012-07-05 18:16                           ` Georg Bauhaus
2012-07-05 19:57                             ` Dmitry A. Kazakov
2012-07-06  6:53                               ` Georg Bauhaus
2012-07-07  0:43                       ` Randy Brukardt
2012-07-07  8:06                         ` Dmitry A. Kazakov [this message]
2012-07-07 11:17                           ` Georg Bauhaus
2012-07-07 11:31                             ` Dmitry A. Kazakov
2012-07-07 12:21                               ` Georg Bauhaus
2012-07-07 13:03                                 ` Dmitry A. Kazakov
2012-06-20 19:18 ` Anh Vo
2012-06-20 20:16 ` Jeffrey R. Carter
2012-06-20 20:21   ` Jeffrey R. Carter
2012-06-20 20:51   ` Maciej Sobczak
2012-06-20 21:04     ` Dmitry A. Kazakov
2012-06-20 22:19   ` Robert A Duff
2012-06-21  6:32     ` Georg Bauhaus
2012-06-21 20:37   ` Randy Brukardt
2012-06-21 20:55     ` Jeffrey Carter
2012-06-22 19:15       ` Randy Brukardt
2012-06-21 20:23 ` Randy Brukardt
2012-06-22  7:34   ` Martin
replies disabled

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