comp.lang.ada
 help / color / mirror / Atom feed
From: "Robert I. Eachus" <rieachus@comcast.net>
Subject: Re: The "()" operator revisited.
Date: Sat, 17 Jan 2004 01:26:32 -0500
Date: 2004-01-17T01:26:32-05:00	[thread overview]
Message-ID: <6vGdnYkc4vgESJXdRVn-hA@comcast.com> (raw)
In-Reply-To: <ma3d009bno5ifl362tsetjtv5m6g4dvnma@4ax.com>

Dmitry A. Kazakov wrote:

> Maybe. In your example generic_array_shuffle might be inherited or
> overridden. In which case the compiler could take an advantage of
> knowing the constraint. Then, the procedure could be inlined, so again
> the compiler could re-instantiate its body. Presently optimizations of
> this kind are not required. I would define some of them in RM to make
> them mandatory.
> 
> Futher, if neither applied, what would be a penalty as compared with a
> variant based on a generic procedure, which instances are reusing the
> body? Actually in the static case, either the constraints have to
> propagate into the body, making its reuse impossible, or not. Whether
> the body itself is a template or a class-wide is of little matter.

Rather than addressing what you said, let me describe how generics 
actually work in Ada.  There are four times when actuals are bound to 
formals, when the generic is compiled, when the generic instantiation is 
compiled (and notice that these first two can happen in any order), when 
the generic instantiation is elaborated at run-time, and when a generic 
subprogram, or a subprogram declared in a generic package is called.

The case that most people forget is the third one, instantiation happens 
at run-time, but before any calls.  In particular the "is <>;" construct 
is pretty weird, see 12.6(15). The matching rule says to do the matching 
at the place of the instantiation, and means it.  But as you can see 
above, instantiation occurs at run-time.  It turns out that you can 
determine at compile time which textual subprogram declaration will 
match an "is <>;" by looking at static closures, but the actual instance 
of that declaration will be determined at run-time.  In other words you 
know which textual declaration will match, but the actual match may be 
to one of the instances of this subprogram in the upward closure of the 
point of instantiation.   A fancy way of saying that the binding occurs 
at run-time, and may require passing a context.

But what you normally have to treat as determined at run-time are the 
constraints.  If the elaboration of a generic involves evaluating 
constraints, each time the instantiation is elaborated the constraints 
may be different from the time before.  You can use nested generics to 
cause "freezing" of constraint values at different points.  It all 
sounds very hard, but in practice it is easy.

-- 
                                           Robert I. Eachus

"The war on terror is a different kind of war, waged capture by capture, 
cell by cell, and victory by victory. Our security is assured by our 
perseverance and by our sure belief in the success of liberty." -- 
George W. Bush




  reply	other threads:[~2004-01-17  6:26 UTC|newest]

Thread overview: 42+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-01-13 17:53 The "()" operator revisited amado.alves
2004-01-14  9:09 ` Dmitry A. Kazakov
2004-01-14 12:55   ` Georg Bauhaus
2004-01-14 15:05     ` Dmitry A. Kazakov
2004-01-15  1:21       ` Georg Bauhaus
2004-01-15  8:50         ` Dmitry A. Kazakov
2004-01-15 11:09           ` Georg Bauhaus
2004-01-15 13:23             ` Dmitry A. Kazakov
2004-01-17  6:26               ` Robert I. Eachus [this message]
2004-01-14 13:04   ` Hyman Rosen
  -- strict thread matches above, loose matches on Subject: below --
2004-01-14 15:22 amado.alves
2004-01-14 16:16 ` Dmitry A. Kazakov
2004-01-13 17:46 amado.alves
2004-01-13 22:21 ` Randy Brukardt
2004-01-12 17:53 Frank J. Lhota
2004-01-12 18:38 ` Frank J. Lhota
2004-01-12 22:26 ` Robert A Duff
2004-01-13 16:29   ` Frank J. Lhota
2004-01-13  9:24 ` Dmitry A. Kazakov
2004-01-13 16:44   ` Frank J. Lhota
2004-01-13 17:13     ` Hyman Rosen
2004-01-13 22:27     ` Randy Brukardt
2004-01-14  2:30     ` Stephen Leake
2004-01-14  9:04     ` Dmitry A. Kazakov
2004-01-17  0:15       ` Kenneth Almquist
2004-01-17 21:15         ` Robert A Duff
2004-01-19 10:25         ` Dmitry A. Kazakov
2004-01-13 13:13 ` Marin David Condic
2004-01-13 17:38   ` Warren W. Gay VE3WWG
2004-01-13 19:09     ` Robert A Duff
2004-01-15 17:30       ` Warren W. Gay VE3WWG
2004-01-15 18:11         ` Robert A Duff
2004-01-15 19:36           ` tmoran
2004-01-15 20:35             ` Robert A Duff
2004-01-17  5:48               ` Robert I. Eachus
2004-01-16  3:11           ` Mark A. Biggar
2004-01-16 13:28             ` Hyman Rosen
2004-01-16 16:19             ` Robert A Duff
2004-01-16 18:09             ` Warren W. Gay VE3WWG
2004-01-16 13:56           ` Frank J. Lhota
2004-01-16 16:14             ` Robert A Duff
2004-01-16 21:29               ` Frank J. Lhota
replies disabled

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