From: normalperson@... Date: 2014-10-05T09:29:10+00:00 Subject: [ruby-core:65413] [ruby-trunk - Feature #10326] [Open] [PATCH] optimize: recv << "literal string" Issue #10326 has been reported by Eric Wong. ---------------------------------------- Feature #10326: [PATCH] optimize: recv << "literal string" https://bugs.ruby-lang.org/issues/10326 * Author: Eric Wong * Status: Open * Priority: Normal * Assignee: * Category: core * Target version: current: 2.2.0 ---------------------------------------- Concatenating literal strings to existing strings seems fairly common practice, so avoid extra garbage when doing it. I don't know if escape analysis is coming to Ruby, but this seems easier-to-do for now: vm2_strcat i = 0 str = "" while i<6_000_000 # benchmark loop 2 i += 1 str << "const" str.clear end trunk 1.020890216 trunk 1.018797116 trunk 0.992393447 built 0.626914306 built 0.627910138 built 0.644469095 ----------------------------------------------------------- benchmark results: minimum results in each 3 measurements. Execution time (sec) name trunk built loop_whileloop2 0.160 0.159 vm2_strcat* 0.833 0.468 Speedup ratio: compare with the result of `trunk' (greater is better) name built loop_whileloop2 1.006 vm2_strcat* 1.779 Future optimizations: * recv << "interpolated #{dstr}" (immediate free + force recycle) * elide allocation for equality comparisons: str == "literal" and "literal" == str * optimize << recv is IO << (str|dstr) (maybe) ---Files-------------------------------- 0001-optimize-recv-literal-string.patch (3.28 KB) -- https://bugs.ruby-lang.org/