From: normalperson@... Date: 2017-07-04T22:04:33+00:00 Subject: [ruby-core:81905] [Ruby trunk Feature#13715] [PATCH] avoid garbage from Symbol#to_s in interpolation Issue #13715 has been reported by normalperson (Eric Wong). ---------------------------------------- Feature #13715: [PATCH] avoid garbage from Symbol#to_s in interpolation https://bugs.ruby-lang.org/issues/13715 * Author: normalperson (Eric Wong) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- ~~~ "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-------------------------------- 0001-avoid-garbage-from-Symbol-to_s-in-interpolation.patch (6.32 KB) -- https://bugs.ruby-lang.org/ Unsubscribe: