mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
34a2acdac7
This change implements a cache for class variables. Previously there was
no cache for cvars. Cvar access is slow due to needing to travel all the
way up th ancestor tree before returning the cvar value. The deeper the
ancestor tree the slower cvar access will be.
The benefits of the cache are more visible with a higher number of
included modules due to the way Ruby looks up class variables. The
benchmark here includes 26 modules and shows with the cache, this branch
is 6.5x faster when accessing class variables.
```
compare-ruby: ruby 3.1.0dev (2021-03-15T06:22:34Z master
|
||
---|---|---|
.. | ||
array.h | ||
bignum.h | ||
bits.h | ||
class.h | ||
compar.h | ||
compile.h | ||
compilers.h | ||
complex.h | ||
cont.h | ||
dir.h | ||
enc.h | ||
encoding.h | ||
enum.h | ||
enumerator.h | ||
error.h | ||
eval.h | ||
file.h | ||
fixnum.h | ||
gc.h | ||
hash.h | ||
imemo.h | ||
inits.h | ||
io.h | ||
load.h | ||
loadpath.h | ||
math.h | ||
missing.h | ||
numeric.h | ||
object.h | ||
parse.h | ||
proc.h | ||
process.h | ||
random.h | ||
range.h | ||
rational.h | ||
re.h | ||
sanitizers.h | ||
serial.h | ||
signal.h | ||
static_assert.h | ||
string.h | ||
struct.h | ||
symbol.h | ||
thread.h | ||
time.h | ||
transcode.h | ||
util.h | ||
variable.h | ||
vm.h | ||
warnings.h |