Ideas from the Chapel language (swap)
Robert Fraser
fraserofthenight at gmail.com
Wed Oct 3 18:32:56 PDT 2007
Gregor Richards Wrote:
> Derek Parnell wrote:
> > On Wed, 03 Oct 2007 14:53:57 -0400, Bruce Adams wrote:
> >
> >> bearophile Wrote:
> >>
> >>> The Cray Inc is designing the Chapel Language:
> >>> http://chapel.cs.washington.edu/
> >>> The following notes are from the specification V. 0.750:
> >>> http://chapel.cs.washington.edu/spec-0.750.pdf
> >>> I think it's rather cute, it looks like a cross between C++, Fortress and Python. Here are few things I think can be interesting for D designers too:
> >>>
> >>> - Chap. 11.5 page 65, swap operator (useful but probably not enough to justify a new operator)
> >> swap is very useful especially in exception safe programming.
> >> I would like to see swap used as the default implementation of D's transfer constructor (and C++0x's forthcoming move constructor)
> >
> > Isn't a simple template such this sufficient?
> >
> > template swap(TYPE)
> > {
> > void swap(ref TYPE a, ref TYPE b)
> > {
> > synchronized
> > {
> > TYPE temp = a;
> > a = b;
> > b = temp;
> > }
> > }
> >
> > }
> >
> >
>
> For the ridiculously-insane:
>
> void swap(T)(ref T a, ref T b)
> {
> synchronized {
> // this should be some kind of static for ...
> for (size_t i = 0; i < (a.sizeof/size_t.sizeof); i++) {
> (cast(size_t*) &a)[i] ^= (cast(size_t*) &b)[i];
> (cast(size_t*) &b)[i] = (cast(size_t*) &a)[i] ^
> (cast(size_t*) &b)[i];
> (cast(size_t*) &a)[i] ^= (cast(size_t*) &b)[i];
> }
> }
> }
>
> Add some loop unrolling and that's more efficient than memcpy :P
>
> - Gregor Richards
>
> PS: /me <3 XOR swapping
I was just going to mention that; you beat me to it!
More information about the Digitalmars-d
mailing list