Issue #13113 has been updated by Nobuyoshi Nakada.

Backport changed from 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN to 2.2: DONTNEED, 2.3: DONTNEED, 2.4: REQUIRED

Since r53376, anonymous module is resolved immediately by assignment to a constant, including the outer module.

----------------------------------------
Bug #13113: Performance issue, const_set Module.new is too slow in Ruby 2.4
https://bugs.ruby-lang.org/issues/13113#change-62417

* Author: Masataka Kuwabara
* Status: Open
* 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: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>