Is metaprogramming useful?
Georg Wrede
georg.wrede at nospam.org
Wed Nov 29 16:36:24 PST 2006
Andrey Khropov wrote:
> Georg Wrede wrote:
>
>
>>It's not metaprogramming itself, it's the bad implementations that make it
>>hard.
>>
>>If we had Perfect Metaprogramming(TM) in D, then I could do the following:
>>
>> I'm coding some stuff and I notice that what I'd really want
>> is a new keyword, "unless", that would make it so much easier
>> for me to write this application clearly. I decide to create it.
>>
>> I want to use it like this
>>
>> unless (fullMoonTonight) { doRegularStuff() }
>>
>> So, to create such a thing in D, I'd write something like
>>
>> define("unless", "(", BooleanExpression, ")", BlockStatement)
>> {
>> if(!BooleanExpression) BlockSTatement;
>> }
>>
>>Now, if I'd made errors in writing the meta code, then the compiler would
>>error me, of course. No biggie. And since the D compiler would understand
>>what's going on (as opposed to the C preprosessor or compiler), the error
>>messages would be what we're used to in D.
>>
>>Later, when I actually use the "unless" construct, again the error messages
>>would be normal because D now understands what "unless" is all about.
>
>
> Well, I'm sorry I'm saying that again but it's almost exactly the way Nemerle
> does it.
Hmm. I'n not sorry at all! :-)
There's confluence in the air....
> And it actually has that unless macro :-)
> Here's the actual code from the compiler svn:
>
> -------------------------------------------------------------------
> macro @unless (cond, body)
> syntax ("unless", "(", cond, ")", body)
> {
> <[ match ($cond) { | false => $body : void | _ => () } ]>
> }
> -------------------------------------------------------------------
>
> but it's defined using pattern matching.
>
> anyway it can be defined your way:
>
> -------------------------------------------------------------------
> macro @unless (cond, body)
> syntax ("unless", "(", cond, ")", body)
> {
> <[ when( !($cond) ) $body ]>
> }
> -------------------------------------------------------------------
>
> ('when' is used in Nemerle for 'if without else')
>
>
>>---
>>
>>People say GC has to be slow, but that is mostly because it used to only
>>exist in languages that were slow to begin with (and badly implemented).
>
>
> Sad to say, but GC in D is still conservative and hence slow :-(
>
More information about the Digitalmars-d
mailing list