Motivation for compile time function execution
Hasan Aljudy
hasan.aljudy at gmail.com
Thu Feb 15 22:02:06 PST 2007
You know .. I proposed this idea a looooooong time ago
http://www.digitalmars.com/d/archives/digitalmars/D/announce/3244.html
I wonder what was your motivation for ignoring me back then <g>
P.S. My terms were stupid .. this kind of meta-programming is not a
special case of constant folding; it's a *general* case of constant folding.
Walter Bright wrote:
> The sqrt() example I gave is cute, but not a very interesting reason for
> doing compile time function execution. So what's the real reason?
>
> A while back, Eric Anderton and Don Clugston showed how one could use
> template metaprogramming techniques to do, for example compile time
> regular expressions. It was a marvelous technical demonstration, and
> showed that essentially any computation could be done, using templates,
> at compile time.
>
> There were some serious problems, though:
>
> 1) They are hard and unintuitive to write (for those not comfortable
> with functional programming, which is most of us).
>
> 2) The result looks awful - templates are just syntactically unsuited to
> this, even though they're a lot easier on the eye than C++ template
> metaprograms.
>
> 3) This is off-putting enough that some question even having such
> facilities in the language, as it results in impenetrable code
> unmaintainable by joe coders.
>
> 4) While theoretically capable of any computation, such template
> metaprogramming had severe practical limitations. Every step of every
> computation required generating a unique template. This naturally is
> incredibly slow and memory consumptive (C++ metaprogramming is notorious
> for taking all night to do a build). Even worse, if you're going to use
> string templates to parse, say, a 1000 character DSL, the template name
> generated must include its arguments, so that template identifier will
> be 1000 characters long. Then, it slices off the first character, and
> generates another template for the rest (999), then 998, then 997, etc.,
> until 1000 templates are generated averaging 500 characters long. It
> doesn't take much of that before the whole thing collapses.
>
> 5) In casting about for a solution, the compile time regex came up
> again. This was still strongly disliked.
>
> 6) I promised to try and make template metaprogramming less obtuse, and
> what better way to do that than to obsolete a whole class of templates,
> replacing them with ordinary functions?
More information about the Digitalmars-d
mailing list