On 15 March 2012 17:32, Andrei Alexandrescu <seewebsiteforem...@erdani.org>wrote:
> On 3/15/12 5:14 AM, Iain Buclaw wrote: > >> On 15 March 2012 09:52, Derek<ddparn...@bigpond.com> wrote: >> >>> Are you saying that the generated code is something like ... >>> >>> >>> struct __tmpS { int Fa, int Fb }; >>> __tempS __tmp; >>> __tmp.Fa = a; >>> __tmp.Fb = b; >>> a = __tmp.Fb; >>> b = __tmp.Fa; >>> >>> >> In effect, yes. Given that the call to from() is inlined. :-) >> >> In GDC, you have a -fdump-tree-original switch that dumps a debug >> representation (that just so happens to look C-like) of the AST of the >> code to a file. You could use this to unravel some of the magic going >> on under the covers. ;-) >> > > One note - the code is really ingenious, but I still prefer swap() in this > case. It's more concise and does less work in the general case. > > swap(a[i + k], a[j + j]); > > only computes the indexing once (in source, too). It all still feels to me like a generally ugly hack around the original example: a,b = b,a; What is the significant importance of the existing coma operator? What does it offer that couldn't possibly be achieved any other way?