comp.lang.ada
 help / color / mirror / Atom feed
From: "Randy Brukardt" <randy@rrsoftware.com>
Subject: Re: Sharing generic bodies across instantiations.
Date: Mon, 2 Aug 2010 22:02:39 -0500
Date: 2010-08-02T22:02:39-05:00	[thread overview]
Message-ID: <i380sm$790$1@munin.nbi.dk> (raw)
In-Reply-To: 14342188-c6f4-4b60-9284-8eff4f3f9ecd@k19g2000yqc.googlegroups.com

"Maciej Sobczak" <see.my.homepage@gmail.com> wrote in message 
news:14342188-c6f4-4b60-9284-8eff4f3f9ecd@k19g2000yqc.googlegroups.com...
...
> 2. How does this affect the amount of late binding and why is there
> less of it than with C++ templates?

You need to read about the Ada contract model for generics. (Off-hand, I 
can't think of a good reference, however.) Part of the Ada contract model is 
that there cannot be an error caused by the actual parameters of an instance 
in an instance body. Tucker Taft liked to describe the model as 
"assume-the-best" in the specification and "assume-the-worst" in the generic 
body. Thus there are a lot of things that are illegal in a generic body in 
Ada simply because they *could* be illegal in some instance of that generic. 
C++ has no such counterpart (indeed, I recall reading that Stoustrup [sp] 
explicitly eliminated it from C++ templates because it was too complex).

In addition, binding of names in the generic body always takes place at the 
point of the compilation of that body. That means that most operations at 
determined at that point, facilitating sharing. (This also causes the 
sometimes bug of "reemergence" in generics, where a hidden predefined 
operator is used instead of the user-defined one for the actual type.) C++ 
uses a more macro approach to template expansion.

                Randy.

P.S. When Dmitry talks about "macros", he means the general concept of macro 
processing. You seem to think he's talking about C macros, which is a 
specific instance of macro processing. It is pretty likely that some form of 
macro processing will be used to implement templates (and Ada generics in 
most compilers), but that has nothing whatsoever to do with the C 
preprocessor.







  parent reply	other threads:[~2010-08-03  3:02 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-07-27  0:51 Sharing generic bodies across instantiations Peter C. Chapin
2010-07-27  3:01 ` Gene
2010-07-27  6:55 ` AdaMagica
2010-07-27 11:29   ` Ludovic Brenta
2010-07-27 14:10     ` Tero Koskinen
2010-07-27 10:51 ` Martin
2010-07-27 20:06 ` anon
2010-07-27 22:23   ` Peter C. Chapin
2010-07-28  7:59     ` Maciej Sobczak
2010-07-28  9:28       ` Dmitry A. Kazakov
2010-07-28 12:55         ` Maciej Sobczak
2010-07-28 13:16           ` Dmitry A. Kazakov
2010-07-28 19:48             ` Maciej Sobczak
2010-07-29  8:03               ` Dmitry A. Kazakov
2010-07-29 14:02                 ` Maciej Sobczak
2010-07-29 14:40                   ` Dmitry A. Kazakov
2010-07-29 20:27                     ` Maciej Sobczak
2010-07-30  9:09                       ` Dmitry A. Kazakov
2010-07-30 12:31                         ` Maciej Sobczak
2010-07-30 14:59                           ` Dmitry A. Kazakov
2010-08-03  3:02                           ` Randy Brukardt [this message]
2010-08-03 14:37                             ` Robert A Duff
2010-08-03  2:47                         ` Randy Brukardt
2010-07-28 20:01             ` Keith Thompson
2010-07-29  7:46               ` Dmitry A. Kazakov
2010-07-28 11:27       ` Peter C. Chapin
2010-07-28 13:10         ` Maciej Sobczak
2010-07-28 16:32           ` Peter C. Chapin
2010-07-28 19:30             ` Robert A Duff
2010-07-28 20:03             ` Maciej Sobczak
2010-07-28 11:47     ` anon
2010-08-03  2:38     ` Randy Brukardt
2010-08-03 14:31       ` Robert A Duff
2010-07-28  0:55   ` Keith Thompson
2010-07-28  8:42     ` Markus Schoepflin
2010-07-28 11:16     ` anon
replies disabled

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