Metacode mechanics
Georg Wrede
georg.wrede at nospam.org
Mon Feb 27 16:27:18 PST 2006
Don Clugston wrote:
> Georg Wrede wrote:
>
>> Back to the issue at hand:
>>
>> What I'm still saying, is that (even though Walter and Don have made
>> completely kick-ass progress here), there's a glass ceiling waiting
>> for us at this rate. By the time we have evolved the D meta business
>> into something that has cleared all major obstacles, it will be a hard
>> to use, cumbersome, and unobvious metalanguage. (( but still a hell of
>> a lot nicer and of course much more powerful than C++ templates ever ))
>
>
> I'm not sure about this. What do you see as the major obstacles?
> I had a long list of them once, it's very short now.
> Note that almost all of the improvements which have been made, have made
> metaprogramming *more* similar to ordinary D, not less.
>
> The main reason D metaprogramming is so much simpler than C++, is that
> we have "static if" instead of using partial template specialisation.
>
> I'll just summarise the changes I proposed that Walter has implemented:
>
> * strings and reals as template value arguments.
> ---> makes metafunctions able to have a greater variety of parameters,
> and therefore more like normal D.
> * Improved compile-time constant folding, most notably [] and [..]
> ---> makes compile-time arrays more similar to runtime arrays.
> * template quirks fixed. Most notably scope of static if.
> ---> less weird workarounds
> * .mangleof property.
> OK, this one's a bit weird. But, it does establish a closer link
> between the two languages: it means that any type can be expressed in
> the run-time language.
>
> The remaining changes that are accepted for D 1.0
> * implicit function template instantiation
> --> makes invoking a template function look the same as invoking a
> normal function.
>
> and beyond D 1.0
> * array literals
> ---> makes compile-time arrays more similar to runtime arrays.
>
> The only other metaprogramming functionality I'd really like, but don't
> have, is full compile-time reflection, and possibly the ability to
> convert strings into variables.
>
> I've spent a few months pushing the boundaries of what's achievable with
> D, and frankly, I'm running out of ideas. Practically everything I've
> wished I could do in C++ seems to already be possible in D, with the
> exceptions listed above.
>
> In C++, metaprogramming feels like programming in an extremely
> impoverished functional programming language. But, in D, it feels like
> programming in a subset of D -- (you can only assign to variables at
> construction, you must use recursion for looping) -- a metafunction can
> be trivially converted to a runtime function (change 'static if' to
> 'if', remove all of the "const"s from the variable declarations, remove
> all the "!", and change "template abc(char [] str)" to abc(char []
> str)"). Normally you don't use recursion much in a D runtime program,
> but it will work.
>
> So, I don't see any signs of D metaprogramming becoming more cumbersome
> than it is now. I really don't see grounds for pessimism.
> BUT...
> it's probable we could do better. I feel, though, that we should be
> aiming for a metalanguage that is more similar to ordinary D, rather
> than try to completely separate them.
>
>> Thus, it would behoove us to start examining the features and
>> properties of a from-ground-up designed meta level language for D.
>> (Definitely not ever even intended to anything earlier than D2.0!)
>>
>> A year ago this was a pipe dream. But now, with the experience we gain
>> from the existing meta language, and (foremost) since I'm not alone
>> anymore in thinking that such an undertaking is actually within reach,
>> we really could start outlining it now!
>>
>> ---
>>
>> So I suggest that we:
>>
>> - continue developing the current D metalanguage
>> - continue to have both Don's and Phobos' regexps
>> - in this NG start the development of requirements for KBDM
>>
>> KBDM being Kick-Butt D Metalanguage. :-)
>
>
> I'll be interested to hear any further ideas you have.
Not least due to a few recent "experiences", I'll refrain from answering
your _valid_ questions, for now.
Before that, and mostly because you seemed pretty happy with the
existing meta-stuff, I think I'll "do my homework" (i.e. "better know
what we have now, before touting for changes").
---
While I'm at it, probably I'll use this NG for "meta newbie" questions.
My method of learning (which has thoroughly frustrated, ehhh, a number
of people) is to linger at the "dumb questions level" until I really
feel that I've got a Crystal Clear picture.
georg
PS, I haven't skipped the "glass ceiling idea" yet.....
More information about the Digitalmars-d-dtl
mailing list