On Tue, Nov 10, 2009 at 4:29 AM, Lars T. Kyllingstad <pub...@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 >>> <newshou...@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