On Wed, Jan 12, 2011 at 10:44 AM, Colin Bartlett
<colinb2r / googlemail.com> wrote:
> First, whenever I've benchmarked parallel assignment against
> individual assignment, I've found the parallel assignment somewhat
> slower. The swap is more elegant, but even that seems slower.

Parallel assignment is generally slower than straight-up assignment in
1.9 and JRuby because it stands up a full Ruby Array for the RHS and
result of the entire assignment expression:

~/projects/jruby jruby -e "p((a, b, c = 1, 2, 3))"
[1, 2, 3]

As you would expect this is a significant cost compared to just
assigning the values directly. JRuby can improve this when it knows
that the assignment is not being used as an expression:

~/projects/jruby  jruby -rbenchmark -e "2.times{ puts
Benchmark.measure { 10000000.times {a,b,c=1,2,3} } }"
  1.924000   0.000000   1.924000 (  1.812000)
  1.810000   0.000000   1.810000 (  1.810000)

~/projects/jruby  jruby -rbenchmark -e "2.times{ puts
Benchmark.measure { 10000000.times {a,b,c=1,2,3; nil} } }"
  1.073000   0.000000   1.073000 (  0.959000)
  0.884000   0.000000   0.884000 (  0.884000)

There are also some implementations that "cheat" (I mean that in the
nicest way possible) and don't bother producing that array return
value at all, and they perform much better on parallel assignment as a
result.

- Charlie