Metaprogramming in D : Some Real-world Examples

Bill Baxter wbaxter at gmail.com
Tue Nov 10 06:56:19 PST 2009


On Tue, Nov 10, 2009 at 4:29 AM, Lars T. Kyllingstad
<public at kyllingen.nospamnet> 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.

I really liked the meta.compiles(...) or meta(compiles, ...) idea.

You're right though.  I would rather show things that look
deliberately designed to do the job nicely instead of things that look
like hacks.   Unfortunately, a lot of "real-world" D meta-programming
currently requires hacky-looking things.  So I can't really avoid them
all.

--bb


More information about the Digitalmars-d-announce mailing list