Metaprogramming in D : Some Real-world Examples

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Tue Nov 10 20:38:31 PST 2009


grauzone wrote:
> Lars T. Kyllingstad wrote:
>> 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.
> 
> Who cares about "ugly" syntax, if the idea is bad in the first place?

I think testing types during compilation isn't bad. Under what 
circumstances is it?

Andrei


More information about the Digitalmars-d-announce mailing list