comp.lang.ada
 help / color / mirror / Atom feed
From: "Matthew Heaney" <matthew_heaney@acm.org>
Subject: Re: 'constant functions' and access constant params (was Re: Array of Variant Records Question...)
Date: 1999/09/22
Date: 1999-09-22T00:00:00+00:00	[thread overview]
Message-ID: <37e8e067@news1.prserv.net> (raw)
In-Reply-To: 7s9nd0$cbe@dfw-ixnews17.ix.netcom.com

In article <7s9nd0$cbe@dfw-ixnews17.ix.netcom.com> , Richard D Riehle 
<LaoXhai@ix.netcom.com>  wrote:

> Ada does not support post-conditions.  I am not persuaded that a comment will
> have any effect on a client of a design.

Every operation has a precondition and a postcondition, irrespective of
whether of not it is expressed in the language proper.

For example:

  procedure Push
    (Item  : in     Item_Type;
     Stack : in out Stack_Type);
  --
  -- Precondition :
  --    not Is_Full (Stack)
  --
  -- Postcondition :
  --
  -- Get_Top (Stack) = Item
  -- Depth (Stack) = Depth (old Stack) + 1


If operations don't have postconditions, then what does invoking an
operation mean?


> We will have to agree to disagree on this.  It is a simple proposition.
> Permit a designer to designate an access parameter to be constant.  The client
> has a guarantee there will be no change to the incoming data.  I am not sure
> why this is so difficult.  We would be taking away nothing in flexibility and
> adding something in terms of the contract.

I think we're in violent agreement.

For non-private types, I think we can all agree that letting the caller know
there will be no state changes is A Good Idea.  Here it's easy to specify a
postcondition that means "no state change," because the state is a public
part of the object.

However, for private types, there is no such thing as "public state," so
there is obvious difficulty in specifying a postcondition that means "no
state change."


>>How would you even write a postcondition that says "internal state of object
>>hasn't changed"?  You're making a statement about internal behavior, in a
>>postcondition that describes external behavior.
>
> There are no postconditions in Ada, as mentioned earlier.

Disagree.  There are postconditions, it's just that they aren't expressible
in the language proper.


> Instead of a post- condition, we can guarantee the immutability of the data,
> in the specification of the subprogram, by making an access parameter
> constant.

I think we agree that for non-private types, this is a good idea.


>>(And remember, I'm only talking about internal state changes to limited
>>private, by-reference types.  Objects that are limited are always variables,
>>never constants.)
>
> I am actually not objecting to you notion regarding limited private,
> by-reference types.

Again, we seem to be in agreement.


> We are all agreed that the problem of modifying an access value can occur in
> Ada.  We simply do not agree that it is worth closing the loophole created by
> this feature.

I think we do agree that it is worth closing this loophole.

Matt
--
Help keep evolution in the science classroom and religion out: become a
member of the National Center for Science Education.

<http://www.natcenscied.org/>




  parent reply	other threads:[~1999-09-22  0:00 UTC|newest]

Thread overview: 69+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1999-09-08  0:00 Array of Variant Records Question Bruce Detter
1999-09-08  0:00 ` Matthew Heaney
1999-09-08  0:00   ` Mike Silva
1999-09-08  0:00     ` Matthew Heaney
1999-09-09  0:00       ` Robert Dewar
1999-09-09  0:00         ` Matthew Heaney
1999-09-09  0:00           ` Matthew Heaney
1999-09-09  0:00             ` Mark Lundquist
1999-09-09  0:00             ` Robert Dewar
1999-09-09  0:00           ` Robert Dewar
1999-09-09  0:00             ` Matthew Heaney
1999-09-10  0:00               ` Mark Lundquist
1999-09-10  0:00                 ` Matthew Heaney
1999-09-11  0:00                 ` Robert Dewar
1999-09-10  0:00               ` Robert Dewar
1999-09-10  0:00                 ` Mark Lundquist
1999-09-10  0:00                   ` Matthew Heaney
1999-09-11  0:00                     ` Jean-Pierre Rosen
1999-09-14  0:00                     ` "cast away const" (was Re: Array of Variant Records Question...) Mark Lundquist
     [not found]                     ` <wccd7viiv59.fsf@world.std.com>
     [not found]                       ` <7rrmqd$l89@drn.newsguy.com>
     [not found]                         ` <wcciu59n2uf.fsf@world.std.com>
1999-09-22  0:00                           ` Array of Variant Records Question Robert I. Eachus
1999-09-23  0:00                             ` Robert Dewar
1999-09-23  0:00                               ` Robert I. Eachus
1999-09-22  0:00                       ` Robert I. Eachus
1999-09-11  0:00               ` Richard D Riehle
1999-09-13  0:00                 ` Hyman Rosen
1999-09-14  0:00                 ` Mark Lundquist
     [not found]                   ` <7roohh$s6r@dfw-ixnews7.ix.netcom.com>
     [not found]                     ` <37e01168@news1.prserv.net>
     [not found]                       ` <7rp86o$c6h@dfw-ixnews3.ix.netcom.com>
     [not found]                         ` <37E18CC6.C8D431B@rational.com>
     [not found]                           ` <7rs8bn$s6@dfw-ixnews4.ix.netcom.com>
     [not found]                             ` <wccemfxn15s.fsf@world.std.com>
1999-09-22  0:00                               ` 'constant functions' and access constant params (was Re: Array of Variant Records Question...) Richard D Riehle
     [not found]                             ` <37e2e58c@news1.prserv.net>
1999-09-22  0:00                               ` Richard D Riehle
1999-09-22  0:00                                 ` Mark Lundquist
1999-09-22  0:00                                   ` Mark Lundquist
1999-09-22  0:00                                 ` Matthew Heaney [this message]
1999-09-22  0:00                                   ` Richard D Riehle
1999-09-22  0:00                                     ` Matthew Heaney
1999-09-22  0:00                                     ` Matthew Heaney
1999-09-23  0:00                                       ` Vincent Marciante
1999-09-23  0:00                                         ` Matthew Heaney
1999-09-24  0:00                                       ` Robert A Duff
1999-09-25  0:00                                         ` Matthew Heaney
1999-09-27  0:00                                       ` Richard D Riehle
1999-09-27  0:00                                         ` David Kristola
1999-09-27  0:00                                       ` Richard D Riehle
1999-09-23  0:00                                     ` Robert Dewar
1999-09-27  0:00                                       ` Richard D Riehle
1999-09-28  0:00                                         ` Robert Dewar
1999-09-28  0:00                                           ` Richard D Riehle
1999-09-29  0:00                                             ` Robert A Duff
1999-09-29  0:00                                             ` Robert Dewar
1999-09-28  0:00                                         ` Robert Dewar
1999-09-28  0:00                                           ` "Competence" (was: 'constant functions' and access constant params) Ted Dennison
1999-09-28  0:00                                             ` Robert Dewar
1999-09-09  0:00             ` Array of Variant Records Question Brian Rogoff
1999-09-13  0:00               ` Matthew Heaney
1999-09-13  0:00                 ` Brian Rogoff
1999-09-14  0:00                   ` Robert Dewar
1999-09-14  0:00                     ` Brian Rogoff
1999-09-14  0:00                   ` Robert Dewar
1999-09-13  0:00                 ` Robert A Duff
1999-09-13  0:00                   ` Matthew Heaney
1999-09-10  0:00             ` Proposed Ada features (was Re: Array of Variant Records Question...) Mark Lundquist
1999-09-10  0:00               ` Matthew Heaney
1999-09-10  0:00                 ` tmoran
1999-09-09  0:00     ` Array of Variant Records Question Nick Roberts
1999-09-09  0:00       ` Robert Dewar
1999-09-09  0:00       ` Tucker Taft
1999-09-10  0:00         ` Nick Roberts
1999-09-08  0:00 ` Ted Dennison
1999-09-08  0:00 ` Martin C. Carlisle
1999-09-08  0:00 ` Thank you Bruce Detter
1999-09-08  0:00   ` Martin C. Carlisle
replies disabled

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