From: Eric Wong Date: 2014-10-18T03:02:15+00:00 Subject: [ruby-core:65775] Re: [ruby-trunk - Feature #10333] [PATCH 3/1] optimize: "yoda literal" == string Eric Wong wrote: > For some method names (include?/delete/key?); I see them often used with > both core (Array/Hash) and non-core (Set/GDBM) classes. > We need to be careful with common method names and string literal. > > Maybe we may use dynamic instruction rewriting if we detect uses on > non-core classes and dynamically rewrite opt_str_lit back to putstring. I think the following solves the problem of improper optimization to applied to non-core classes: http://bogomips.org/ruby.git/patch?id=ab08e19d7a70a0fe We could even expand the idea for existing opt_* insns. Having the recv_info array stick around indefinitely might get wasteful, though. I suppose we could walk iseq->mark_ary to pluck it out. > Note: opt_str_lit has the same insn length as putstring; > we may rewrite iseq->iseq at runtime. I'll still try to DRY it up more to make testing easier. Full diff: http://80x24.org/spew/m/opt-str-lit-v3%40m.txt (broken out: "opt_str_lit-3" branch on git://bogomips.org/ruby.git)