std.mixins
Nick Sabalausky
a at a.a
Mon Aug 30 20:10:20 PDT 2010
"dsimcha" <dsimcha at yahoo.com> wrote in message
news:i5hkea$2sud$1 at digitalmars.com...
> 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?
Definitely trace and traceVal/traceValCT from my lib:
http://www.dsource.org/projects/semitwist/browser/trunk/src/semitwist/util/mixins.d
Every time I work on D code from a codebase that doesn't use my lib and I
shouldn't/can't/don't feel like adding it as a dependancy, I find the lack
of my trace and traceVal/traceValCT to be a real pain. Having it in the std
lib would be *really* helpful, even for me. The traceMixin can be helpful
too.
Also, getter and getterLazy from the same module. I find the built-in
property-definition syntax (even with the new @property) to be painfully
verbose and non-DRY for simple cases (which in my experience are the most
common ones - specifically, every time I want a publically-read-only field).
The getter and getterLazy take care of that.
The other stuff in that module are other mixins I've also found useful,
although to a much lesser extent than trace/traceVal/getter/getterLazy.
I'm completely ok with any of that being included in or adapted for phobos.
Be aware though, I've recently converted it from D1/Tango to D2/Phobos, so
some of it might not be completely D2-ified yet (though it does at least
work on D2/Phobos).
More information about the Digitalmars-d
mailing list