std.mixins
Jonathan M Davis
jmdavisprog at gmail.com
Mon Aug 30 18:46:00 PDT 2010
On Monday 30 August 2010 18:04:10 dsimcha wrote:
> I've been toying for a long time with the idea of a std.mixins for Phobos
> that would contain meta-implementations of commonly needed boilerplate
> code for mixing into classes and and structs. I've started to prototype
> it
> (http://dsource.org/projects/scrapple/browser/trunk/std_mixins/std_mixins.
> d). So far I have a mixin for struct comparisons, which is useful if you
> need a total ordering for use with sorting or binary trees, but don't care
> exactly how that ordering is defined. I've also got a mixin that converts
> a class to a Singleton, and uses thread-safe but efficient mechanisms to
> deal with the __gshared singleton case.
>
> I'm also thinking of creating some mixins to allow cloning of arbitrarily
> complicated object graphs, provided that you don't stray outside of SafeD.
> Is this worth implementing or will it likely be solved in some other way
> at some point?
>
> Right now I'd just like to milk the D community for ideas. What other
> pieces of boilerplate code do you find yourself writing often that the
> standard library should help with?
The ones that I've wanted to implement but haven't yet (due to issues figuring
out how to do them with __traits and std.traits) are opEquals(), opCmp(), and
toHash(). Ideally, by default, they'd just process each of the member variables
in lexical order (or whatever deterministic order you get them from __traits or
std.traits), but you could give them a list of the member variables, and then
only those member variables would be used, and they'd be used in the order that
they were given. I figured that toHash() could use the hashing method described
in Effective Java, since it seems solid, and that's what Apache uses for their
function which generates a hash function (though, lacking all of D's compile-
time code generation, their generative functions use reflection at runtime, which
is obviously far less efficient). I'm willing to take a hack at implementing them
again, but I'd given up with the idea of trying again when __traits and
std.traits were more complete.
- Jonathan M Davis
More information about the Digitalmars-d
mailing list