Feature #10326
closed[PATCH] optimize: recv << "literal string"
Description
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