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