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だとあまり変わらなかった。