Metaprogramming in D : Some Real-world Examples

Jacob Carlborg doob at me.com
Tue Nov 10 04:42:39 PST 2009


On 11/10/09 13:29, 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.
>
> -Lars

Yes, it's very ugly. As long as the functionality is left in the 
language I'm happy. I'm using D1 where __traits isn't available.


More information about the Digitalmars-d-announce mailing list