std.mixins

Jacob Carlborg doob at me.com
Tue Aug 31 08:13:17 PDT 2010


On 2010-08-31 05:17, Andrei Alexandrescu wrote:
> 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

My serialization library Orange (http://dsource.org/projects/orange/) 
could be used for cloning. The easiest way to do this is just to 
serialize a value and then deserialize the data and return the new 
value. Of course this wouldn't be the most efficient way, for that one 
could build a cloning library/function out of the front end of the 
serializer.

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list