comp.lang.ada
 help / color / mirror / Atom feed
From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: Elaboration order handling (Was: Bug in 'gnatmake')
Date: Wed, 19 Jun 2013 12:41:46 -0400
Date: 2013-06-19T12:41:46-04:00	[thread overview]
Message-ID: <wccppviyrw5.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: 53d0b070-a03b-43d0-a560-68dd3a8bebf5@googlegroups.com

Adam Beneschan <adam@irvine.com> writes:

> On Wednesday, June 19, 2013 5:22:30 AM UTC-7, Robert A Duff wrote:
>
>> Lexicographic order would work.  Or backwards of that.  Or apply
>> "rot-13" to the bytes and then do lexicographic order.  ;-)
>
> I guess it could work, but I gotta tell you--that seems really weird.
> I've never heard of another language where the semantics could depend
> on the lexicographical order of the identifiers.

Well, the GNAT dialect of Ada does just that!  Is it weird to have
it in the Ada RM, but not so weird to have it in the GNAT RM?

Yes, it's kind of weird to use that order, but there's no other order
that's any less weird.  What we want is an arbitrary order that is
the same for all compilers.  "Arbitrary" in the sense that we don't
care what the order is, and we don't deliberately write code that
depends on it.

>> Or you could base it on the order in which 'with' clauses 
>> happen to appear.
>
> No, I don't think that would work.  Say there are two packages, Pack1
> and Pack2, that get included in the program, and there is no rule (in
> the current language) that specifies which one gets elaborated first.

The with clauses (and parent/child relationships and so forth) form
a directed graph.  You can define an order in which to walk it
however you like, so long as it's deterministic.  You could say,
start at the main procedure spec.  Walk all of the with'ed specs,
in the order mentioned.  Walk the corresponding body.  ("Walk" is
recursive, of course.  And as usual for graph walks, you keep track
of which nodes have been visited, and if you run across an
already-visited node, do nothing.)

This visits all the library items in a well-defined order, and if all
compilers were required to use that algorithm, it would be a portable
order.  Then you say that whenever the current Ada rules allow
multiple orders, you must choose the order from the above graph-walking
algorithm.

> Adding a rule based on the "with" clause order would work if Pack1 and
> Pack2 are both with'ed by the same package, Pack3, and are not with'ed
> anywhere else.  But other than that one narrow case, I don't see how
> you could write a rule to base elaboration order on "with" clause
> order.

If Pack1 and Pack2 are with-ed elsewhere (than Pack3), then either
that "elsewhere" comes before or after Pack3 in the walk (or some
of each).  Whichever 'with Pack1' you run across first in the walk
is the one that determines where Pack1 occurs in the order.

- Bob


  reply	other threads:[~2013-06-19 16:41 UTC|newest]

Thread overview: 57+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-17 10:57 Range check for type 'Integer' Peter Brooks
2013-06-17 11:23 ` Simon Clubley
2013-06-17 11:54   ` Simon Wright
2013-06-17 12:55   ` Peter Brooks
2013-06-17 13:28     ` Shark8
2013-06-17 13:45       ` Peter Brooks
2013-06-17 21:16         ` Shark8
2013-06-18 10:48     ` Stephen Leake
2013-06-17 12:46 ` Dmitry A. Kazakov
2013-06-17 13:23 ` Bug in 'gnatmake' (Was: Range check for type 'Integer') Jacob Sparre Andersen
2013-06-17 13:32   ` Bug in 'gnatmake' Jacob Sparre Andersen
2013-06-17 16:50   ` Bug in 'gnatmake' (Was: Range check for type 'Integer') Robert A Duff
2013-06-17 19:15     ` Peter Brooks
2013-06-17 21:09       ` Shark8
2013-06-17 21:22       ` Jeffrey Carter
2013-06-18  1:21         ` Peter Brooks
2013-06-18  6:33           ` Jeffrey Carter
2013-06-18  7:29       ` Georg Bauhaus
2013-06-17 18:49   ` Bug in 'gnatmake' Simon Wright
2013-06-18  9:09     ` Elaboration order handling (Was: Bug in 'gnatmake') Jacob Sparre Andersen
2013-06-18 17:09       ` Robert A Duff
2013-06-18 22:52         ` Adam Beneschan
2013-06-19  1:21           ` Jeffrey Carter
2013-06-19 12:38             ` Robert A Duff
2013-06-19 20:43               ` Georg Bauhaus
2013-06-20  0:37                 ` Robert A Duff
2013-06-20 19:56                   ` Georg Bauhaus
2013-06-19 12:22           ` Robert A Duff
2013-06-19 15:46             ` Adam Beneschan
2013-06-19 16:41               ` Robert A Duff [this message]
2013-06-19 20:47               ` Georg Bauhaus
2013-06-19 21:36                 ` Adam Beneschan
2013-06-20  0:57                 ` Robert A Duff
2013-06-20  1:09                   ` Jeffrey Carter
2013-06-20  2:29                     ` Adam Beneschan
2013-06-20  6:08                       ` Jeffrey Carter
2013-06-20 15:11                     ` Robert A Duff
2013-06-21  5:26                       ` Jeffrey Carter
2013-06-21 15:48                         ` Adam Beneschan
2013-06-21 18:35                           ` Jeffrey Carter
2013-06-21 19:10                             ` Robert A Duff
2013-06-21 21:27                               ` Jeffrey Carter
2013-06-21 20:43                             ` Adam Beneschan
2013-06-21 21:44                               ` Jeffrey Carter
2013-06-21 23:47                                 ` Robert A Duff
2013-06-23 14:43                                   ` AdaMagica
2013-06-21 18:58                         ` null declarative parts (was: Re: Elaboration order handling) Robert A Duff
2013-06-21 20:42                           ` null declarative parts Georg Bauhaus
2013-06-20  2:11                   ` Elaboration order handling (Was: Bug in 'gnatmake') Adam Beneschan
2013-06-20 14:44                     ` Robert A Duff
2013-06-20 11:24                   ` G.B.
2013-06-20 15:23                     ` Robert A Duff
2013-06-19 21:00             ` Georg Bauhaus
2013-06-19 22:26             ` Randy Brukardt
2013-06-20  0:31               ` Robert A Duff
2013-06-20 21:36                 ` Randy Brukardt
2013-06-19 13:07         ` Bill Findlay
replies disabled

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