Metaprogramming in D : Some Real-world Examples

Lars T. Kyllingstad public at kyllingen.NOSPAMnet
Tue Nov 10 04:29:35 PST 2009


Jacob Carlborg wrote:
> On 11/10/09 01:27, Bill Baxter wrote:
>> On Mon, Nov 9, 2009 at 4:09 PM, Walter Bright
>> <newshound1 at digitalmars.com>  wrote:
>>> Looks like Bill Baxter is giving a presentation on D Nov. 18!
>>>
>>> http://www.nwcpp.org/
>>
>> Yep, that's right, and I'd be quite grateful to you smart folks here
>> if you could share your meta-programming favorites with me!   If
>> you've got a real-world example of meta-programming in D that you
>> think is particularly handy, then please send it my way
>>
>> I'm looking for small-but-useful things that are easy to explain, and
>> make something easier than it would be otherwise.  Things like places
>> where static if can save your butt,  or loop unrolling,  and passing
>> code snippets to functions like in std.algorithm.
>>
>> Things like a compile-time raytracer or regexp parser (though quite
>> cool!) are not what I'm after.  Too involved for a short talk.
>>
>> --bb
> 
> This is invaluable to me, which makes it possible to do some form of 
> duck typing at compile time:
> 
> static if (is(typeof({
> /* does this compile */
> })))

There are forces at work (Don, that is) attempting to get rid of that 
very construct and replace it with something better:

http://www.digitalmars.com/d/archives/digitalmars/D/Proposal_Replace_traits_and_is_typeof_XXX_with_a_magic_namespace_._99914.html

In my humble opinion, is(typeof({...})) is an ugly creature. I really 
don't think it should be put under a spotlight as a good example of D 
metaprogramming. If anything, please use __traits(compiles, {...}) instead.

-Lars


More information about the Digitalmars-d-announce mailing list