comp.lang.ada
 help / color / mirror / Atom feed
From: Phil Thornley <phil.jpthornley@gmail.com>
Subject: Re: Silly and stupid post-condition or not ?
Date: Sun, 5 Feb 2012 18:04:20 -0000
Date: 2012-02-05T18:04:20+00:00	[thread overview]
Message-ID: <MPG.2998d4eb6fbafe1a989684@news.zen.co.uk> (raw)
In-Reply-To: wccsjipfhlb.fsf@shell01.TheWorld.com

In article <wccsjipfhlb.fsf@shell01.TheWorld.com>, 
bobduff@shell01.TheWorld.com says...
> 
> Phil Thornley <phil.jpthornley@gmail.com> writes:
> 
> > The original SPARK Rationale says: "All Ada features which require 
> > dynamic storage allocation were ruled out, for several reasons. The 
> > specification and modelling of access type manipulations, which can 
> > involve aliasing, is extremely difficult; for programs using access 
> > types it may also be very difficult to achieve security ..., let alone 
> > verification."
> 
> Yes, aliasing makes analysis very difficult.  But...
> 
> > Remember that everything in a SPARK program must have a name, and that 
> > it is quite easy to implement dynamic storage for a single type by a 
> > simple array (access value <-> array index).
> 
> Yes, you can simulate pointers (access values) using arrays and
> indices.  This introduces the same aliasing issues, and the same
> dangling pointer (dangling index) issues.  A(X) can in general
> alias A(Y), and a compiler or analysis tool would like to prove
> X=Y, or prove X/=Y.

Yes - that's exactly what you *have* to do (not like) when you update 
two or more elements of an array (or prove your conclusion for either 
possibility of course).

> It seems like the aliasing issue is harder with indices, because you
> can do arithmetic one them, whereas you can't do arithmetic
> on pointers (in Ada).

I don't think that's a substantial point, the X and the Y can be 
expressions and that doesn't change anything.

>
> (I don't see why this has anything to do with having names.
> And not "everything" must have a name, but I know what you mean.)
>
> >... Furthermore when dealing
> > with dynamically sized data structures the invariant typically needs to
> > include predicates for the storage space that is not currently in use as
> > well as the storage that is.
>
> I'm not sure what you mean by that.  Could you give an example?

My code is managing the list of free elements, as well as the elements 
in the data structure, so I need to show that every array element that 
should be in the free list is there and that there isn't any element in 
the free list that is also in the data structure. If I'm using access 
values then I'm relying on the correctness of the compiled code/Ada run-
time handling of a storage pool, which probably has a lower level of 
integrity than I'm claiming for my code.

But the main point I was making is that there doesn't seem to be any 
major benefits to the SPARK user from adding access values to the 
language.

>
> ...
> SPARK may be great for certain types of systems, but I wouldn't
> want to write (say) a compiler in SPARK.

(Personally I wouldn't want to write a compiler at all .....)

Phil



  reply	other threads:[~2012-02-05 18:04 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-30 23:11 Silly and stupid post‑condition or not ? Yannick Duchêne (Hibou57)
2012-01-31  6:47 ` J-P. Rosen
2012-01-31 18:48   ` Jeffrey Carter
2012-01-31 22:02     ` Yannick Duchêne (Hibou57)
2012-01-31  8:54 ` Dmitry A. Kazakov
2012-01-31  9:35   ` Georg Bauhaus
2012-01-31 10:22     ` Dmitry A. Kazakov
2012-01-31 12:33       ` Georg Bauhaus
2012-01-31 13:52         ` Dmitry A. Kazakov
2012-01-31 15:34           ` Georg Bauhaus
2012-01-31 16:24             ` Dmitry A. Kazakov
2012-01-31 19:44               ` Georg Bauhaus
2012-02-01  8:41                 ` Dmitry A. Kazakov
2012-02-01 10:37                   ` stefan-lucks
2012-02-01 10:51                     ` Yannick Duchêne (Hibou57)
2012-02-01 13:49                     ` Yannick Duchêne (Hibou57)
2012-02-01 13:49                     ` Dmitry A. Kazakov
2012-02-01 16:37                       ` stefan-lucks
2012-02-02  1:50                         ` Silly and stupid post�?'condition " Randy Brukardt
2012-02-02  1:56                           ` Silly and stupid postâ?'condition or not ? Yannick Duchêne (Hibou57)
2012-02-03  2:45                             ` Silly and stupid post�?'condition or not ? Randy Brukardt
2012-02-02  8:25                         ` Silly and stupid post‑condition " Dmitry A. Kazakov
2012-02-02  9:01                           ` stefan-lucks
2012-02-02  9:18                           ` stefan-lucks
2012-02-02 10:04                             ` Dmitry A. Kazakov
2012-01-31 22:08         ` Yannick Duchêne (Hibou57)
2012-01-31 17:28 ` Dmitry A. Kazakov
2012-01-31 22:12   ` Yannick Duchêne (Hibou57)
2012-02-01  8:49     ` Dmitry A. Kazakov
2012-02-01  8:36 ` Stephen Leake
2012-02-01 16:30   ` Silly and stupid post-condition " Adam Beneschan
2012-02-02  9:40     ` Stephen Leake
2012-02-02 13:20       ` Georg Bauhaus
2012-02-02 13:35         ` Yannick Duchêne (Hibou57)
2012-02-03  3:13       ` Randy Brukardt
2012-02-03  3:33         ` Yannick Duchêne (Hibou57)
2012-02-03  8:12         ` Simon Wright
2012-02-07  2:29           ` BrianG
2012-02-07 10:43             ` Simon Wright
2012-02-08  2:25               ` BrianG
2012-02-07 21:15             ` Robert A Duff
2012-02-03  9:11         ` Dmitry A. Kazakov
2012-02-04  3:27           ` Randy Brukardt
2012-02-04 10:15             ` Dmitry A. Kazakov
2012-02-03 12:25         ` Phil Thornley
2012-02-04  9:30         ` Phil Thornley
2012-02-04 12:02         ` Phil Thornley
2012-02-05  6:18           ` Randy Brukardt
2012-02-05 10:23             ` Phil Thornley
2012-02-05 10:55               ` Yannick Duchêne (Hibou57)
2012-02-05 15:03               ` Robert A Duff
2012-02-05 18:04                 ` Phil Thornley [this message]
2012-02-05 21:27                   ` Robert A Duff
2012-02-05 23:09                     ` Phil Thornley
2012-02-07  2:05               ` Randy Brukardt
2012-02-07  9:38                 ` Dmitry A. Kazakov
2012-02-05 11:31             ` Yannick Duchêne (Hibou57)
2012-02-05 14:50             ` Robert A Duff
2012-02-07  2:11               ` Randy Brukardt
2012-02-07  2:34             ` BrianG
2012-02-07  4:38               ` Yannick Duchêne (Hibou57)
2012-02-09  3:10               ` Randy Brukardt
2012-02-04 23:07         ` Stephen Leake
2012-02-05  2:49           ` Yannick Duchêne (Hibou57)
2012-02-05  6:29           ` Randy Brukardt
2012-02-05 11:40             ` Yannick Duchêne (Hibou57)
2012-02-07  1:36               ` Randy Brukardt
2012-02-05 15:16             ` Robert A Duff
2012-02-06  4:56               ` Yannick Duchêne (Hibou57)
2012-02-06 14:39                 ` Robert A Duff
2012-02-06 16:12                   ` Yannick Duchêne (Hibou57)
2012-02-07  1:46               ` Randy Brukardt
2012-02-07 17:24                 ` Robert A Duff
2012-02-03  6:26       ` J-P. Rosen
2012-02-03  9:12         ` Dmitry A. Kazakov
2012-02-03  9:48           ` Yannick Duchêne (Hibou57)
2012-02-03 11:09             ` Dmitry A. Kazakov
2012-02-03 11:40               ` Yannick Duchêne (Hibou57)
2012-02-03 13:18                 ` Dmitry A. Kazakov
2012-02-03 14:14                   ` Yannick Duchêne (Hibou57)
2012-02-03 14:45                     ` Dmitry A. Kazakov
2012-02-04  3:16           ` Randy Brukardt
2012-02-04  6:27             ` Yannick Duchêne (Hibou57)
2012-02-04 10:47             ` Dmitry A. Kazakov
replies disabled

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