From: nobu@... Date: 2016-12-02T11:20:07+00:00 Subject: [ruby-core:78465] [Ruby trunk Feature#12996] Optimize Range#=== Issue #12996 has been updated by Nobuyoshi Nakada. Yuki Kurihara wrote: > ## Important point > > Break compatibility in this case. > > https://github.com/ruby/ruby/blob/80045bc2a9e12012d6d16517ea5cb037e67eb2c1/test/ruby/test_range.rb#L333-L355 > > I don't know how to fix this issue. > But I think, This is a key sentence maybe. > https://github.com/ruby/ruby/blob/8130ee5c9dea6d1323d41271cc01c8dc5d8bcc5d/range.c#L1176 Use alias. ```C rb_define_alias(rb_cRange, "===", "include?"); ``` instead of ```C rb_define_method(rb_cRange, "===", range_include, 1); ``` ---------------------------------------- Feature #12996: Optimize Range#=== https://bugs.ruby-lang.org/issues/12996#change-61836 * Author: Yuki Kurihara * Status: Open * Priority: Normal * Assignee: ---------------------------------------- The proposal is that Range#=== optimize by reducing method calls. ## Benchmark ~~~shell $ cat t.rb i = 0 while i < 1_000_000 case i when 1..1000 end i += 1 end ~~~ ~~~ $ time ./miniruby -e 1 ./miniruby -e 1 0.01s user 0.00s system 85% cpu 0.013 total ~~~ ### Before ~~~ $ time ./miniruby t.rb ./miniruby t.rb 0.60s user 0.00s system 99% cpu 0.605 total ~~~ ### After ~~~ $ time ./miniruby t.rb ./miniruby t.rb 0.41s user 0.00s system 99% cpu 0.420 total ~~~ ## Important point Break compatibility in this case. https://github.com/ruby/ruby/blob/80045bc2a9e12012d6d16517ea5cb037e67eb2c1/test/ruby/test_range.rb#L333-L355 I don't know how to fix this issue. But I think, This is a key sentence maybe. https://github.com/ruby/ruby/blob/8130ee5c9dea6d1323d41271cc01c8dc5d8bcc5d/range.c#L1176 ---Files-------------------------------- range-eqq.patch (1.35 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: