From: nobu@... Date: 2017-01-08T02:13:47+00:00 Subject: [ruby-core:79011] [Ruby trunk Bug#13113] Performance issue, const_set Module.new is too slow in Ruby 2.4 Issue #13113 has been updated by Nobuyoshi Nakada. benchmark results: Execution time (sec) name | 2.3.3| r57281| r57284 -------------------------|-------:|-------:|-------- loop_whileloop2 | 0.146| 0.135| 0.106 vm2_module_ann_const_set*| 9.072| 107.850| 6.889 vm2_module_const_set* | 3.954| 13.374| 3.468 Speedup ratio: compare with the result of `2.3.3' (greater is better) name | r57281| r57284 -------------------------|-------:|-------: loop_whileloop2 | 1.075| 1.373 vm2_module_ann_const_set*| 0.084| 1.317 vm2_module_const_set* | 0.296| 1.140 ---------------------------------------- Bug #13113: Performance issue, const_set Module.new is too slow in Ruby 2.4 https://bugs.ruby-lang.org/issues/13113#change-62420 * Author: Masataka Kuwabara * Status: Closed * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux] * Backport: 2.2: DONTNEED, 2.3: DONTNEED, 2.4: REQUIRED ---------------------------------------- In Ruby 2.4, the following code is too slow. ~~~ ruby 5000000.times { Module.new.const_set(:X, Module.new) } ~~~ In Ruby 2.4, it took 115.68 seconds to run this code. However, in Ruby 2.3.3, it took 7.36 seconds. And if const_set value is not Module.new, it is not slow. For example ~~~ ruby 5000000.times { Module.new.const_set(:X, 2) } ~~~ Ruby versions ~~~ ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-linux] ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux] ~~~ See also. https://github.com/rspec/rspec-core/issues/2365 -- https://bugs.ruby-lang.org/ Unsubscribe: