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 08:38:21 -0400
Date: 2013-06-19T08:38:21-04:00	[thread overview]
Message-ID: <wccehbycm2q.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: kpr0oh$rt9$3@dont-email.me

Jeffrey Carter <spam.jrcarter.not@spam.not.acm.org> writes:

> Elaboration order isn't entirely implementation defined, is it?

No, it's not.

>...There's
> a partial order defined by calls made during elaboration from one pkg to
> another.

In standard Ada, there's a partial order defined by 'with' clauses,
parent/child relationships, and various pragmas.

GNAT takes into account calls made during elaboration, but standard
Ada does not.  And GNAT's rules are necessarily conservative
(see Halting Problem).

>...Within that ordering there may be groups of pkgs that may be
> elaborated in any order after the pkgs that must be elaborated before
> them and before the pkgs they must be elaborated before. Within those
> groups, why not use lexical order of pkg names?

Good idea.  ;-)

It doesn't solve all the problems with Ada's elaboration model,
but it solves the most expensive one (portability).  We'd still
have the problem that the chosen order can be wrong.  And the
fact that programmers have to deal with a bunch of kludgy
pragmas.  And the fact that what should be a compile-time error
is a run-time exception.  And the fact that the order is global,
rather than localized to the children of a single package.

Oh, and the fact that the whole model is overly restrictive.
For example, it makes perfect sense to say:

    package Symbols is
        type Symbol is private;
        function Intern(S: String) return Symbol;
        Empty_Symbol: constant Symbol := Intern(""); -- Wrong!

But that doesn't work in Ada.  It works fine in my hobby
language.  ;-)

- Bob

  reply	other threads:[~2013-06-19 12:38 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 [this message]
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
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