comp.lang.ada
 help / color / mirror / Atom feed
From: Robert A Duff <bobduff@shell01.TheWorld.com>
Subject: Re: Elaboration of nested generic package.
Date: 11 Jul 2003 17:41:42 -0400
Date: 2003-07-11T17:41:42-04:00	[thread overview]
Message-ID: <wcc65m8pwq1.fsf@shell01.TheWorld.com> (raw)
In-Reply-To: 1ec946d1.0307100612.20a3d000@posting.google.com

mheaney@on2.com (Matthew Heaney) writes:

> "Robert I. Eachus" <rieachus@attbi.com> wrote in message news:<3F0CC2D1.10904@attbi.com>...
> > Don Westermeyer wrote:
> > 
> > > Usually I do use pragma Elaborate_All for every dependancy anyway
> > > since one does not have control over every software module developed. 
> > > Using it is always safer and causes no penalties that I know of
> > > (assuming the design stays clear of mutual dependancies).
> > 
> > This is silly.  The reason that Ada doesn't automagically assume 
> > Elaborate_Body or Elaborate_All, is that there is a better assumption. 
> > The implementation knows the potential elaboration issues and is 
> > encouraged to chose one that cannot result in Program_Error.
> 
> I was talking about library-level instantiations of generic packages.
> 
> Back in 1997, Bob Duff and Robert Dewar seemed to suggest that you
> always need Elaborate_All on the generic package:
> 
> with GP;
> pragma Elaborate_All (GP); --Do you need this pragma...
> package P is new GP;       --...in order to instantiate?
> 
> If we're not talking about with'ing a generic package, then I agree
> that it is silly to use the Elaborate_All on every dependency.  It
> only makes it harder for the compiler to find an acceptable
> elaboration order, because you have constrained the size of the set of
> possible orders.
> 
> You should only use it when the dependent unit calls subprograms
> provided by the with'd unit during its own elaboration.
> 
> 
> > Using pragma Elaborate, Elaborate_All, or Elaborate_Body 
> > indiscriminantly can only make the Ada compiler's job harder.  There are 
> > two exceptions though.  If you know that the subprograms declared in a 
> > package are used before the main program is elaborated, by all means use 
> > Elaborate_All.  
> 
> Yes.
> 
> I would still like a definitive answer, though.  In order to make a
> library-level package instantiation, do I need to use Elaborate_All on
> the generic unit? (As in the example above.)

If the generic unit says Elaborate_Body, then you do not.  However,
Elab_Body causes a problem: the body can't "with" its own children,
which is often useful.

If you don't have Elab_Body, and you say "with Some_Generic", then you
should normally Elab_All of the generic, because your instances will
normally be at library level.  If your instances are nested in
procedures, then you don't normally need to do that.  There are some
rare cases where Elab_All won't work, and you have to use pragma
Elaborate instead.

This part of the language is something of a mess.  Pragma Elaborate was
added late in the game of Ada 83, and it was later realized that it
doesn't work well, and we tried to fix it in Ada 95, and pretty much
failed.  We added some pragmas, but as evidenced by this thread, it's
not always clear when to use them.

But if you use GNAT in its default mode, it will tell you where you need
the pragmas, mostly.  It doesn't work in the case of
indirect/dispatching calls, though.

> Also: do the categorization pragmas in a generic unit make any
> difference?  In other words, you still need to say Elaborate_All,
> irrespective of what the generic unit says about categorization --
> correct?

I think there is an AI on this point.  Sorry, I don't remember the
details.

- Bob



  parent reply	other threads:[~2003-07-11 21:41 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-07-02  4:13 Elaboration of nested generic package christoph.grein
2003-07-08  3:05 ` Don Westermeyer
2003-07-08 17:46   ` Matthew Heaney
2003-07-10  1:10     ` Don Westermeyer
2003-07-10  1:35       ` Robert I. Eachus
2003-07-10  4:51         ` Robert I. Eachus
2003-07-10  6:58           ` Jean-Pierre Rosen
2003-07-10 15:08             ` Robert I. Eachus
2003-07-11 21:26             ` Robert A Duff
2003-07-10 14:12         ` Matthew Heaney
2003-07-10 15:39           ` Robert I. Eachus
2003-07-11 21:41           ` Robert A Duff [this message]
2003-07-14 18:35             ` Matthew Heaney
2003-07-15 17:19               ` Randy Brukardt
2003-07-16 15:24                 ` Matthew Heaney
2003-07-17  2:08                   ` Randy Brukardt
2003-07-17 15:54                     ` Richard Riehle
2003-07-10 15:03         ` Don Westermeyer
2003-07-10 15:45       ` Matthew Heaney
  -- strict thread matches above, loose matches on Subject: below --
2003-07-09  5:21 christoph.grein
2003-07-01 20:14 Don Westermeyer
replies disabled

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