[#78633] ruby/spec needs help from CRuby committers — Benoit Daloze <eregontp@...>
Currently, ruby/spec is maintained mostly by individuals and enjoys the
13 messages
2016/12/13
[#78963] Re: ruby/spec needs help from CRuby committers
— Urabe Shyouhei <shyouhei@...>
2017/01/04
I did ask attendees of last developer meeting to join this
[#78642] Re: ruby/spec needs help from CRuby committers
— Eric Wong <normalperson@...>
2016/12/14
Benoit Daloze <eregontp@gmail.com> wrote:
[ruby-core:78465] [Ruby trunk Feature#12996] Optimize Range#===
From:
nobu@...
Date:
2016-12-02 11:20:07 UTC
List:
ruby-core #78465
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>