[ruby-core:96999] [Ruby master Feature#16563] Let rb_mod_const_at and rb_const_list use an ID table instead for inherited VS private constant segregation
From:
lourens@...
Date:
2020-01-26 16:38:39 UTC
List:
ruby-core #96999
Issue #16563 has been reported by methodmissing (Lourens Naud薊.
----------------------------------------
Feature #16563: Let rb_mod_const_at and rb_const_list use an ID table instead for inherited VS private constant segregation
https://bugs.ruby-lang.org/issues/16563
* Author: methodmissing (Lourens Naud薊
* Status: Open
* Priority: Normal
* Assignee:
* Target version:
----------------------------------------
References https://github.com/ruby/ruby/pull/2840
It feels unnatural to cast an `ID` to `st_data_t` if we already a ID table implementation.
Despite these declarations in `ruby/intern.h` returning void pointers, which were in fact pointers to ST tables, I don't think this change would / should break any extensions:
```
void *rb_mod_const_at(VALUE, void*);
void *rb_mod_const_of(VALUE, void*);
```
```
lourens@CarbonX1:~/src/ruby/ruby$ make benchmark ITEM=constants COMPARE_RUBY=~/src/ruby/trunk/ruby OPTS="-v --repeat-count 12 --repeat-result median"
/usr/local/bin/ruby --disable=gems -rrubygems -I./benchmark/lib ./benchmark/benchmark-driver/exe/benchmark-driver \
--executables="compare-ruby::/home/lourens/src/ruby/trunk/ruby -I.ext/common --disable-gem" \
--executables="built-ruby::./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext -- --disable-gems --disable-gem" \
$(find ./benchmark -maxdepth 1 -name 'constants' -o -name '*constants*.yml' -o -name '*constants*.rb' | sort) -v --repeat-count 12 --repeat-result median
compare-ruby: ruby 2.8.0dev (2020-01-15T01:50:53Z master ac93cf4ff8) [x86_64-linux]
built-ruby: ruby 2.8.0dev (2020-01-15T02:06:58Z opt-const-at 3d5e2d4f68) [x86_64-linux]
Calculating -------------------------------------
compare-ruby built-ruby
all 412.156k 519.808k i/s - 1.000M times in 2.443206s 1.932313s
inherited 431.349k 522.407k i/s - 1.000M times in 2.338914s 1.930936s
Comparison:
all
built-ruby: 519808.1 i/s
compare-ruby: 412156.0 i/s - 1.26x slower
inherited
built-ruby: 522406.7 i/s
compare-ruby: 431348.9 i/s - 1.21x slower
```
--
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>