comp.lang.ada
 help / color / mirror / Atom feed
From: mheaney@on2.com (Matthew Heaney)
Subject: Re: Elaboration of nested generic package.
Date: 10 Jul 2003 07:12:27 -0700
Date: 2003-07-10T14:12:28+00:00	[thread overview]
Message-ID: <1ec946d1.0307100612.20a3d000@posting.google.com> (raw)
In-Reply-To: 3F0CC2D1.10904@attbi.com

"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.)

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?



  parent reply	other threads:[~2003-07-10 14:12 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 [this message]
2003-07-10 15:39           ` Robert I. Eachus
2003-07-11 21:41           ` Robert A Duff
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