From: Eric Wong Date: 2014-11-06T00:21:37+00:00 Subject: [ruby-core:66108] Re: [ruby-trunk - Feature #10423] [PATCH] opt_str_lit*: avoid literal string allocations ko1@atdot.net wrote: > Sorry for late, and thank you for catching up recent changes. No problem. I had some time today. I will be busy and have little computer time for the next 5-7 days. > My comments: > > 1. (negative) Incompatibility > To solve this incompatibility, I have several ideas. > > (1-1) Make new instruction to replace with receiver. I added a new opt_str_lit_yoda instruction. It only handles one receiver location for now, I'm not sure if other cases (e.g. gsub) can trigger the incompatibility. patch: http://80x24.org/spew/m/38d41def78f16bca14fbc7fccd160ef0a8d06479.txt Right now, I do not optimize `str.gsub("bar", method_call)', yet, only optimizing: `str.gsub(anything, "bar")' "foo" == bar Compiles to: [:putobject, "foo"], [:putself], [:opt_send_without_block, {:mid=>:bar, :flag=>280, :orig_argc=>0, :blockptr=>nil}], [:opt_str_lit_yoda, ["foo", 17, 1]], [:opt_eq, {:mid=>:==, :flag=>256, :orig_argc=>1, :blockptr=>nil}], > (1-3) Ignore such incompatibility because nobody write such code However, I hope we can ignore the strange case and new insn. > 2. (negative) Live patching I've removed live patching for now: http://80x24.org/spew/m/86739be08df5b4128e84bce15a2853cd7947a6fa.txt It was a good learning experience, at least. > 3. (neutral/not big issue) target methods > > opt_method.def format is a bit difficult to read which methods are > target. Maybe we can make more pretty like: I prefer to leave the format unchanged for now, because compile.c still uses id{PLUS,ASET,AREF} names. > 4. (neutral/not big issue) warning on VC (windows) Untested patch (cast to unsigned): http://80x24.org/spew/m/30c309d1ad24319ad53813f8814e09be0554ccb0.txt > Have you measure performance improvement on non-microbenchmarks? "make rdoc" performance improved from 66.3 => 63.3 sec in original test However, the difference seems is smaller now: 66.1 => 64.9 sec Full patch for convenience: http://80x24.org/spew/m/opt-str-lit-v7%40m.txt