comp.lang.ada
 help / color / mirror / Atom feed
From: Jean-Marc Bourguet <jbourguet@free.fr>
Subject: Re: Compile time executed functions
Date: Mon, 02 Apr 2001 09:30:27 GMT
Date: 2001-04-02T09:30:27+00:00	[thread overview]
Message-ID: <3AC84628.D8B70C7C@free.fr> (raw)
In-Reply-To: clKx6.632$ru5.162431072@newssvr16.news.prodigy.com

Ken Garlington wrote:
> 
> "Jean-Marc Bourguet" <jbourguet@free.fr> wrote in message
> news:3AC6ED5F.9F2F51A5@free.fr...
> 
> : I think there are NO requirement about generated code excepted the
> : observable behavior for conforming program.  Everybody would be
> : surprised that the generated code for the factorial template I gave
> : produced something other than what is generated for
> :
> : int main() {
> :    std::cout << 3628800 << std::endl;
> : }
> 
> Well, I think you've answered your question, then.
> You're not talking about comparing the C++ language with Ada;

My question? Me comparing C++ and Ada?  I think you are confusing me
with somebody else. I came into this thread when you asked for an
example of using template in C++ for computing things at compile time to
give you one.  Then you asked for a formal guarantee that it was
computed at compile time.  The level at which the C++ standard describe
semantic make it impossible to have such guarantee.  Do you have a
formal guarantee that an Ada compiler does not generate a function to
calculate the 10! when you use the litteral 3628800?  I don't think so
and there is no such guarantee for C++. What the C++ standard does is
constraint the expression to be a constant integer expression and allows
the defined named and such expressions to be used in place like case
labels, array sizes and template parameters where no C++ programmer
would expect the expression be evaluated at run-time, where no sane C++
compiler would evaluate the expression at run-time. 

> So, if you want a particular optimization with an Ada
> compiler, then you need to look at the object code generated by that
> compiler, and tweak it as needed (and possibly work with the vendor to get
> what you want).

I think the success of "template meta programming" (as this abuse of the
template system is called by some) is the fact that there is no need to
count on compiler optimization to get the effect, and you may also do
some other things like computing type.  So running this 

#include <iostream>

template <int F>
struct factorial {
   enum { RET = factorial<F-1>::RET*F };
};

template <>
struct factorial<1> {
   enum { RET = 1 };
};

template <int F>
struct ken {
  typedef int T;
};

template <>
struct ken<3628800> {
  typedef double T;
};

int main() {
  ken<factorial<10>::RET >::T x10 = 0.5;
  ken<factorial<11>::RET >::T x11 = 0.5;
  std::cout << "x10=" << x10
	    << "\nx11=" << x11 << std::endl;
}

produces

x10=0.5
x11=0

because x10 is a double while x11 is an int.  But I agree, that is still
not a formal guarantee that the compiler does not compute the type of
x10 and x11 at run time :-)

Some seems to think that the biggest difference between Ada generic and
C++ template is the fact that the templates are instanciated
automatically or that they are constrained by use.  My point of view is
that these differences are syntaxic differences and do not modify
significantly the expressing power.  I think that the ability to
specialize template is a point where the C++ templates are more
powerfull than the Ada generics.

Yours,

-- Jean-Marc



  reply	other threads:[~2001-04-02  9:30 UTC|newest]

Thread overview: 86+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-03-27  7:10 Compile time executed functions Mats Karlssohn
2001-03-27 13:30 ` Ken Garlington
2001-03-28  7:08   ` Mats Karlssohn
2001-03-28 19:07     ` Phaedrus
2001-03-29  7:41       ` Mats Karlssohn
2001-03-29  5:02     ` Ken Garlington
2001-03-29  7:58       ` Mats Karlssohn
2001-03-29 14:28         ` Ken Garlington
2001-03-29 14:48           ` Ted Dennison
2001-04-04  7:52             ` Mats Karlssohn
2001-04-04 14:05               ` Ted Dennison
2001-04-05  6:30                 ` Mats Karlssohn
2001-03-29 19:48           ` Simon Wright
2001-03-31 19:30             ` Ken Garlington
2001-04-04  7:53             ` Mats Karlssohn
2001-03-30 10:41           ` Jean-Marc Bourguet
2001-03-30 16:13             ` Ken Garlington
2001-03-30 16:47               ` Jean-Marc Bourguet
2001-03-30 18:54                 ` Stephen Leake
2001-04-01  8:42                   ` Jean-Marc Bourguet
2001-03-31 19:30                 ` Ken Garlington
2001-04-01  8:59                   ` Jean-Marc Bourguet
2001-04-01 18:22                     ` Ken Garlington
2001-04-02  9:30                       ` Jean-Marc Bourguet [this message]
2001-04-02 12:42                         ` Robert A Duff
2001-04-02 14:16                           ` Jean-Marc Bourguet
2001-04-03  0:33                           ` Pat Rogers
2001-04-02 13:09                         ` Ken Garlington
2001-04-02 13:40                           ` Robert A Duff
2001-04-02 23:29                             ` Ken Garlington
2001-04-13 23:11                               ` Robert A Duff
2001-04-02 14:32                           ` Jean-Marc Bourguet
2001-04-04  7:59             ` Mats Karlssohn
2001-04-04  7:47           ` Mats Karlssohn
2001-04-06  0:33             ` Ken Garlington
2001-04-09 12:21               ` Mats Karlssohn
2001-04-13 15:51                 ` Tucker Taft
2001-03-27 14:39 ` Ted Dennison
2001-03-27 16:40   ` Mark Biggar
2001-03-27 18:14   ` Florian Weimer
2001-03-27 18:15   ` Florian Weimer
2001-03-27 18:57     ` Ted Dennison
2001-03-27 19:22       ` Florian Weimer
2001-03-27 20:23         ` Ted Dennison
2001-03-27 22:15           ` Florian Weimer
2001-03-27 23:30             ` Georg Bauhaus
2001-03-28  9:54               ` Florian Weimer
2001-03-28 15:20             ` Ted Dennison
2001-03-28 16:12               ` David C. Hoos, Sr.
2001-03-28 21:15               ` Robert A Duff
2001-03-28 21:56                 ` Brian Rogoff
2001-03-29  8:18                 ` Mats Karlssohn
2001-03-29  8:11               ` Mats Karlssohn
2001-03-29 14:37                 ` Ted Dennison
2001-03-29 16:35                   ` Mark Biggar
2001-03-29 19:27                     ` Florian Weimer
2001-03-29 19:28                     ` Florian Weimer
2001-03-30  3:41                       ` Ken Garlington
2001-03-30  4:32                         ` Brian Rogoff
2001-03-30 14:27                           ` Compile time executed functions [OT] Karel Thönissen
2001-03-30 17:30                             ` Scheveningen (Re: Compile time executed functions [OT]) Ray Blaak
2001-03-30 17:39                             ` More {OT] (Was " Brian Rogoff
2001-03-30 23:39                               ` Karel Thönissen
2001-03-30 17:47                         ` Compile time executed functions Brian Hanson
2001-03-30  0:06                     ` Robert A Duff
2001-03-30 15:02                       ` Ted Dennison
2001-03-30 20:57                         ` Robert A Duff
2001-04-02 14:26                           ` Ted Dennison
2001-03-30 17:33                       ` Ray Blaak
2001-03-29  8:25               ` Florian Weimer
2001-03-28  7:17   ` Mats Karlssohn
2001-03-29  1:35   ` Jon S Anthony
2001-03-27 14:39 ` Robert A Duff
2001-03-27 15:09   ` Ted Dennison
2001-03-27 16:33     ` Robert A Duff
2001-03-27 23:36     ` Ken Garlington
2001-03-28 20:47     ` Mark Lundquist
2001-03-28  7:29   ` Mats Karlssohn
2001-03-28 22:15     ` Robert A Duff
2001-03-29  8:43       ` Mats Karlssohn
2001-03-31  4:12         ` Robert A Duff
2001-04-05  7:06           ` Mats Karlssohn
2001-04-13 23:18             ` Robert A Duff
2001-03-29  5:02     ` Ken Garlington
2001-03-28  7:31 ` Mats Karlssohn
2001-03-30  8:57 ` Georg Bauhaus
replies disabled

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