std.mixins
Denis Koroskin
2korden at gmail.com
Tue Aug 31 09:11:15 PDT 2010
On Tue, 31 Aug 2010 19:13:17 +0400, Jacob Carlborg <doob at me.com> wrote:
> 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.
>
A generic clone function is a very interesting idea, it is also a safe way
of creating immutable copies of mutable data structures (assumeUnique is
great but a dangerous one to use).
Now that we talk about serializing, I wrote a serialization library of my
own, too :) Unlike yours, it uses binary serialization, though.
What it does is what a Moving GC would do, i.e. compacting objects to use
less memory, so de-serialization is done at constant time (unless you need
to adjust pointers) and it's also happen to be the most efficient way to
object cloning.
I believe binary serialization is the most suitable solution for passing
data structures of any complexity between threads, over network or loading
resources from disk due to its performance and low memory usage. It also
improves data locality, so just cloning your data may lead to a
significant speedup in data processing and reduced memory usage.
More information about the Digitalmars-d
mailing list