From: "drbrain (Eric Hodel)" Date: 2013-04-04T06:14:01+09:00 Subject: [ruby-core:53970] [ruby-trunk - Bug #8211] Performance regression of method calls Issue #8211 has been updated by drbrain (Eric Hodel). Priority changed from High to Normal =begin I can't reproduce with clang on OS X: ruby 2.1.0dev (2013-04-04 trunk 40091) [x86_64-darwin12.3.0] lambda: 7.310000 0.000000 7.310000 ( 7.303881) instance method: 4.310000 0.000000 4.310000 ( 4.310044) class method: 4.320000 0.000000 4.320000 ( 4.317902) ruby 2.0.0p57 (2013-03-12 revision 39728) [x86_64-darwin12.2.1] lambda: 7.290000 0.000000 7.290000 ( 7.290216) instance method: 4.330000 0.000000 4.330000 ( 4.332266) class method: 4.410000 0.000000 4.410000 ( 4.410439) ruby 1.9.3p374 (2013-01-15 revision 38858) [x86_64-darwin12.2.1] lambda: 8.010000 0.000000 8.010000 ( 8.014676) instance method: 4.580000 0.000000 4.580000 ( 4.573837) class method: 4.480000 0.000000 4.480000 ( 4.485607) =end ---------------------------------------- Bug #8211: Performance regression of method calls https://bugs.ruby-lang.org/issues/8211#change-38189 Author: dunric (David Unric) Status: Open Priority: Normal Assignee: Category: core Target version: ruby -v: 2.0.0p0 There are significant performance regressions in the newer Ruby versions. When compared to the last 1.9 patch build, method & lambda calls are about 3 times slower ! Benchmarking results: _____________________________________________________________ Ruby 1.9.3p392 user system total real lambda: 8.310000 0.000000 8.310000 ( 8.315247) instance method: 5.210000 0.000000 5.210000 ( 5.219299) class method: 5.040000 0.000000 5.040000 ( 5.037483) Ruby 2.0.0-p0 user system total real lambda: 25.310000 0.010000 25.320000 ( 25.339897) instance method: 17.870000 0.000000 17.870000 ( 17.882656) class method: 17.630000 0.010000 17.640000 ( 17.650515) Ruby 2.1.0-dev user system total real lambda: 19.210000 0.000000 19.210000 ( 19.227314) instance method: 13.930000 0.000000 13.930000 ( 13.936974) class method: 14.000000 0.000000 14.000000 ( 14.001582) _____________________________________________________________ The code: _____________________________________________________________ require 'benchmark' do_custom_stuff = lambda { 1 + 1 + 1 } class CustomStuff def self.do 1 + 1 + 1 end def do 1 + 1 + 1 end end custom_stuff = CustomStuff.new Benchmark.bm { |b| MANY = 50_000_000 b.report("lambda:") { MANY.times { do_custom_stuff.call }} b.report("instance method:") { MANY.times { custom_stuff.do }} b.report("class method:") { MANY.times { CustomStuff.do }} } _____________________________________________________________ -- http://bugs.ruby-lang.org/