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