Ideas from the Chapel language (swap)
Gregor Richards
Richards at codu.org
Wed Oct 3 18:25:08 PDT 2007
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
More information about the Digitalmars-d
mailing list