Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Use a generic getter with __callee__
This modifies the getter definition to use a single method that uses `__callee__` to access the hash. def __get_callee__! @table[__callee__] end On versions of Ruby 2.0+ and JRuby 9.4.2+ __callee__ will return the aliased name, which in this case is the key for the table. This eliminates one of the Proc-based methods per field and also performs better on CRuby: Before: Warming up -------------------------------------- get 44.000 i/100ms set 46.000 i/100ms Calculating ------------------------------------- get 504.731 (± 8.5%) i/s - 2.508k in 5.024439s set 506.779 (± 1.4%) i/s - 2.576k in 5.084061s After: Warming up -------------------------------------- get 80.000 i/100ms set 65.000 i/100ms Calculating ------------------------------------- get 808.319 (± 0.7%) i/s - 4.080k in 5.047805s set 662.678 (± 0.9%) i/s - 3.315k in 5.002857s It also uses less memory; creating 100k OpenStruct in the same way as the benchmark uses 205.2MB before and 164MB after.
- Loading branch information