std.mixins

dsimcha dsimcha at yahoo.com
Mon Aug 30 20:49:57 PDT 2010


== Quote from Andrei Alexandrescu (SeeWebsiteForEmail at erdani.org)'s article
> On 8/30/10 20:04 PDT, 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?
> Sounds like a good idea, but I think the name is not too descriptive as
> it refers to mechanism. We shouldn't have std.classes or std.structs in
> there, should we? :o) Therefore std.mixins sounds like an awkward way to
> group together pieces of functionality that may be very diverse.
> FWIW I think you don't need any mixins to implement cloning. But I do
> encourage you to work on cloning - I wanted for the longest time and
> couldn't get to it. A cloning routine would need to keep a map of
> pointer to pointer to make sure in only clones each object in a graph once.
> Andrei

I had an almost working implementation of cloning that didn't depend on mixins a
long time (like 2 years) ago.  It didn't work with raw pointers to non-primitive
data (supporting this would, of course, be impossible) or where polymorphism was
involved.

The big problem with cloning is derived classes.  Give a class reference whose
compile time type is Base, but whose runtime type is Derived, how do you clone the
derived fields w/o some boilerplate code either being written, mixed in, or
generated by the compiler?   Keep in mind that D's compilation model prevents you
from being able to get a tuple of all derived classes of a base class at compile
time.  Actually, IIRC you were the one who explained this to me back when I first
tried to make cloning work and asked how to get such a tuple.


More information about the Digitalmars-d mailing list