[phobos] More tuple algorithms with std.meta

Philippe Sigaud philippe.sigaud at gmail.com
Tue Sep 28 13:27:16 PDT 2010


On Tue, Sep 28, 2010 at 09:50, Shin Fujishiro <rsinfu at gmail.com> wrote:
> Philippe Sigaud <philippe.sigaud at gmail.com> wrote:
>> I'm willing to review your code. I also feel Phobos should showcase D
>> metaprogramming on types. At a minimum, filtering, reducing, scanning
>> (reduce with history), rotating and inverting tuples should be there.
>
> Thanks!  Please note: D metaprogramming is not only on types, but also
> on symbols and compile-time constants - possibly combined with mixins.

That's OK with me. What about I read and comment on your code before
the end of the week? (Err, make that the very end of the week)

>
> I mean, static tuple algorithms should be able to handle tuples composed
> of heterogeneous entities: types, symbols and/or constants.

Agreed. Ok, any compile-time sorcery on template-y arguments tuples.

> It will
> allow us to write something like follows in a short, functional style:
>
>  Struct!(int, "x", double, "y")
>  http://gist.github.com/600535

Nice!

(I'd have filtered TypeNames to get types in a tuple and names in
another, instead of striding TypeNames. But I say that only because
I'm jealous of what you've done :)  )


> (dranges.templates is interesting, too.)

having templates acting on templates is fun :) It's easy to do, too:
meta-meta-programming, something that would have blown my mind in C++
:)

>
> As for the separation of typetuple and variadic...  As I mentioned
> above, I think static tuple algorithms should be able to work with
> heterogeneous tuples.  Limiting algorithms only on types is not a
> choice for me.

OK. I indeed did them initially only as a way to generate types, when
I was having troubles with auto.

>
> But it does *not* mean I think the variadic is useless!  Note that I'm
> talking about compile-time operation on template tuple parameters;
> std.variadic algorithms would be definitely useful in run-time code.


Banco for a separation between 'acting on tuples at CT' on one hand
and 'acting on tuples at runtime' on another.


> variadicMap is especially a gem!

Thanks. That's strange, D has wonderfully powerful metaprogramming
abilities, but no one seems to care. How many languages can offer a
statically checked mapping of a polymorphic function on a
heterogeneous list, in a few lines of code?
And it's not just an esoteric goal: you can transform structs.tupleof
or function arguments as you wish!


Philippe


More information about the phobos mailing list