Actions
Feature #13715
closed[PATCH] avoid garbage from Symbol#to_s in interpolation
Status:
Closed
Assignee:
-
Target version:
-
Description
"ruby -e 'p GC.stat(:total_allocated_objects)'" goes from
70199 to 69540 allocated objects when loading RubyGems from
a clean install.
The increased VM size slows down the whileloop2 and vm2_dstr
case slightly, but string interpolation often consists of
non-strings. The addition of inline cache helps integer cases
slightly, and the intended Symbol optimization gives a major
improvement.
speedup relative to trunk
name |built
---------------|------:
loop_whileloop2| 0.984
vm2_dstr* | 0.991
vm2_dstr_digit*| 1.167
vm2_dstr_int* | 1.120
vm2_dstr_nil* | 1.181
vm2_dstr_sym* | 1.663
Digits (0-9), Integers, and perhaps true/false/nil may be
optimized in the future.
* vm_eval.c (rb_vm_call0_body): new function exports vm_call0_body
* vm_insnshelper.c (vm_tostring): new function
* insns.def (tostring): call vm_tostring with ci + cc
* compile.c (iseq_compile_each0): adjust tostring insn compile
* benchmark/bm_vm2_dstr_digit.rb: new benchmark
* benchmark/bm_vm2_dstr_int.rb: ditto
* benchmark/bm_vm2_dstr_nil.rb: ditto
* benchmark/bm_vm2_dstr_sym.rb: ditto
Files
Actions
Like0
Like0Like0Like0Like0Like0Like0