Ideas from the Chapel language (swap)

Bruce Adams tortoise_74 at yeah.who.co.uk
Thu Oct 4 13:12:36 PDT 2007


Bill Baxter Wrote:

> Derek Parnell wrote:
> > On Thu, 04 Oct 2007 17:55:05 +0900, Bill Baxter wrote:
> > 
> >> I find it hard to believe that a compiler couldn't recognize that this 
> >> is a swap operation:
> >>     tmp = a;
> >>     a = b;
> >>     b = tmp;
> >>
> >> If it's not harder than I think for some reason, then it's not really 
> >> needed in the language.
> > 
> > Maybe it could, but that's not the point of a programming language. A
> > programming language is for people, not computers, to read. It is whole lot
> > easy to recognise "swap(a,b)" or even "a<->b" as a swapping operation than
> > three lines of code.
> 
> Right, so you put those three lines in a template function called 
> "swap".  If the compiler can recognize that's exchanging the values of a 
> and b, then there's no need for swap to be a compiler intrinsic.  The 
> plain old function is good enough.
> 
> --bb

I think having at least a library function is necessary. I'm not 100% sure it is sufficient. The best way to implement it depends on the nature of the data structure that is being swapped. I don't know if a library function can be generic enough to get this right every time with templates it could come quite close but the size of structure where swap members becomes more efficient than swap via a temporary is hard to code in a template. The answer in the first case is to require the user to create an explict specialisation when this becomes an issue.
When you start to bring threads into the equation things can get even more fun.

Bruce.



More information about the Digitalmars-d mailing list