パラボラアンテナと星の日記

あることないこと

ruby2.2.0-rc1はgsubとかが早かったでござる

早かったござる。わーい

gsub.rb

require 'benchmark'
puts RUBY_VERSION
N = 1_000_000

Benchmark.bmbm do |x|
  x.report("gsub!") { N.times{ 'ababa'.gsub!('a', 'c') } }
  x.report("gsub")  { N.times{ 'ababa'.gsub('a', 'c') } }
  x.report("sub!")  { N.times{ 'ababa'.sub!('a', 'c') } }
  x.report("sub")   { N.times{ 'ababa'.sub('a', 'c') } }
end

ruby2.1.5

$ ruby gsub.rb 
2.1.5
Rehearsal -----------------------------------------
gsub!   3.080000   0.010000   3.090000 (  3.087235)
gsub    3.090000   0.000000   3.090000 (  3.097288)
sub!    0.780000   0.000000   0.780000 (  0.784893)
sub     0.850000   0.010000   0.860000 (  0.852897)
-------------------------------- total: 7.820000sec

            user     system      total        real
gsub!   3.080000   0.000000   3.080000 (  3.087923)
gsub    3.130000   0.010000   3.140000 (  3.135953)
sub!    0.790000   0.000000   0.790000 (  0.788226)
sub     0.860000   0.000000   0.860000 (  0.863395)

ruby2.2.0-rc1

$ ruby gsub.rb 
2.2.0
Rehearsal -----------------------------------------
gsub!   1.500000   0.000000   1.500000 (  1.507980)
gsub    1.460000   0.010000   1.470000 (  1.456496)
sub!    0.600000   0.000000   0.600000 (  0.603111)
sub     0.680000   0.000000   0.680000 (  0.686309)
-------------------------------- total: 4.250000sec

            user     system      total        real
gsub!   1.470000   0.000000   1.470000 (  1.473303)
gsub    1.420000   0.000000   1.420000 (  1.419860)
sub!    0.620000   0.000000   0.620000 (  0.617775)
sub     0.680000   0.010000   0.690000 (  0.686547)

ちなみに、引数がRegExpだとあまり変わらなかった。