From 6bb0775d7603d020e64fb68fbc78e184745e8b0d Mon Sep 17 00:00:00 2001 From: Kouhei Sutou Date: Wed, 27 Jul 2016 13:58:07 +0900 Subject: Reduce needless Array generation in some String methods Here are some benchmarks: each_char: # /tmp/each_char.rb a = "a" * 1000000 a.each_char do |x| end Without this change: % time bin/mruby /tmp/each_char.rb bin/mruby /tmp/each_char.rb 1.07s user 0.02s system 99% cpu 1.088 total With this change: % time bin/mruby /tmp/each_char.rb bin/mruby /tmp/each_char.rb 0.52s user 0.01s system 99% cpu 0.530 total 2 times faster with this change. codepoints: # /tmp/codepoints.rb a = "a" * 1000000 a.codepoints do |x| end Without this change: % time bin/mruby /tmp/codepoints.rb bin/mruby /tmp/codepoints.rb 1.16s user 0.05s system 99% cpu 1.216 total With this change: % time bin/mruby /tmp/codepoints.rb bin/mruby /tmp/codepoints.rb 0.56s user 0.02s system 99% cpu 0.589 total --- mrbgems/mruby-string-ext/mrblib/string.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'mrbgems/mruby-string-ext') diff --git a/mrbgems/mruby-string-ext/mrblib/string.rb b/mrbgems/mruby-string-ext/mrblib/string.rb index 7e65eb6b2..a291b8207 100644 --- a/mrbgems/mruby-string-ext/mrblib/string.rb +++ b/mrbgems/mruby-string-ext/mrblib/string.rb @@ -354,7 +354,7 @@ class String def chars(&block) if block_given? - self.split('').map do |i| + self.split('').each do |i| block.call(i) end self @@ -366,7 +366,7 @@ class String def each_char(&block) return to_enum :each_char unless block - split('').map do |i| + split('').each do |i| block.call(i) end self @@ -376,7 +376,7 @@ class String len = self.size if block_given? - self.split('').map do|x| + self.split('').each do|x| block.call(x.ord) end self -- cgit v1.2.3