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