From: "Jesús Gabriel y Galán" Date: 2010-02-16T01:47:18+09:00 Subject: Re: Parallel assignments vs. Serial assigments On Mon, Feb 15, 2010 at 5:30 PM, Gavin wrote: > (My results show that parallel assignment is slower in this test) > > On Feb 15, 4:23 pm, Gavin wrote: >> Hey all >> >> I was always under the impression that parallel assignments in Ruby >> were faster than assigning variables individually. >> >> Recently I was curious to see how much faster it was and decided to >> test it: >> >> class One >> >>   def initialize(first_name, last_name) >>     @first_name = first_name >>     @last_name  = last_name >>   end >> >> end >> >> class Two >> >>   def initialize(first_name, last_name) >>     @first_name, @last_name = first_name, last_name >>   end >> >> end >> require "rubygems" >> require "benchmark" >> >> Benchmark.bmbm do |test| >>   test.report("serial") do >>     10000.times { |n| var =  One.new("gavin#{n}", "morrice")} >>   end >>   test.report("parallel") do >>     10000.times { |n| var =  Two.new("gavin#{n}", "morrice")} >>   end >> end >> >> The results I get show that it's slower (in both Ruby 1.8.7 and Ruby >> 1.9.1) >> >> Can anyone elaborate? I think it might be because the parallel assigment creates an array under the hood? class One def initialize(first_name, last_name) @first_name = first_name @last_name = last_name end end class Two def initialize(first_name, last_name) @first_name, @last_name = first_name, last_name end end class Three def initialize(*args) @first_name, @last_name = *args end end require "rubygems" require "benchmark" GC.disable puts "Arrays before serial: #{ObjectSpace.each_object(Array){}}" 10000.times { |n| var = One.new("gavin#{n}", "morrice")} puts "Arrays after serial: #{ObjectSpace.each_object(Array){}}" 10000.times { |n| var = Two.new("gavin#{n}", "morrice")} puts "Arrays after parallel: #{ObjectSpace.each_object(Array){}}" $ ruby test_parallel_assignment.rb Arrays before serial: 3589 Arrays after serial: 3589 Arrays after parallel: 13589 Jesus.