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: Tue, 18 Jun 2013 13:09:21 -0400
Date: 2013-06-18T13:09:21-04:00	[thread overview]
Message-ID: <wcczjun4a7y.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: 87ip1bg4z2.fsf_-_@adaheads.sparre-andersen.dk

Jacob Sparre Andersen <jacob@jacob-sparre.dk> writes:

> Simon Wright wrote:
>
>> Don't use -gnatE unless you really really want your code to be
>> portable to other compilers. You'd need to expend a lot of extra work
>> to include pragmas to ensure that elaboration takes place in an
>> appropriate order; GNAT does this for you if you leave out -gnatE.
>
> I really really want my code to be portable to other compilers.

-gnatE doesn't really help with that.  -gnatE is for porting code
written for other Ada compilers TO GNAT.  (It's also for compiling
ACATS tests that test the standard Ada elaboration rules.)
-gnatE doesn't magically make GNAT use the same order as some
other Ada compiler(s).  We don't even know what algorithm those
compilers use to choose the order, and they're all probably
different.  All we know is that people trying to port code
from one compiler to another have a lot of trouble with elab
order.

If you want your code to be portable, you need to insert pragma
Elaborate_All all over the place.  It's nearly impossible to get that
right by hand, so you should use the GNAT switch that makes it tell you
where Elaborate_All should go.  Don't use -gnatE in this case.

>...(But I
> also use Ada 2012, which currently counters that wish.  Feel free to
> call me inconsistent.)

;-)

> And yes, occassionally I spend some time getting elaboration order
> right.

What do you mean by "right", and how do you know when you have
achieved it?

> Is there a reason the GNAT default elaboration ordering hasn't made its
> way into the reference manual?

I don't think it has ever been seriously considered.  It would be
an incompatible change, unless we made it a user-controlled option.
And it would be a big burden on all those other compilers who
implemented (only) the standard Ada rules.

It is certainly a big language-design flaw that the elab order is
implementation defined.  Ada code tends to be pretty portable for the
most part, but elab order is one of the top issues that cause
non-portability.  That and overuse of representation clauses.

- Bob

  reply	other threads:[~2013-06-18 17:09 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 [this message]
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
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