[#65451] [ruby-trunk - Feature #10333] [PATCH 3/1] optimize: "yoda literal" == string — ko1@...
Issue #10333 has been updated by Koichi Sasada.
ko1@atdot.net wrote:
Eric Wong <normalperson@yhbt.net> wrote:
Eric Wong <normalperson@yhbt.net> wrote:
On 2014/10/09 11:04, Eric Wong wrote:
SASADA Koichi <ko1@atdot.net> wrote:
[#65453] [ruby-trunk - Feature #10328] [PATCH] make OPT_SUPPORT_JOKE a proper VM option — ko1@...
Issue #10328 has been updated by Koichi Sasada.
[#65559] is there a name for this? — Xavier Noria <fxn@...>
When describing stuff about constants (working in their guide), you often
On 2014/10/09 20:41, Xavier Noria wrote:
On Thu, Oct 9, 2014 at 1:59 PM, Nobuyoshi Nakada <nobu@ruby-lang.org> wrote:
[#65566] [ruby-trunk - Feature #10351] [Open] [PATCH] prevent CVE-2014-6277 — shyouhei@...
Issue #10351 has been reported by Shyouhei Urabe.
[#65741] Re: [ruby-cvs:55121] normal:r47971 (trunk): test/ruby/test_rubyoptions.rb: fix race — Nobuyoshi Nakada <nobu@...>
On 2014/10/16 10:10, normal@ruby-lang.org wrote:
Nobuyoshi Nakada <nobu@ruby-lang.org> wrote:
2014-10-16 12:48 GMT+09:00 Eric Wong <normalperson@yhbt.net>:
[#65753] [ruby-trunk - Feature #10333] [PATCH 3/1] optimize: "yoda literal" == string — ko1@...
Issue #10333 has been updated by Koichi Sasada.
[#65818] [ruby-trunk - Feature #10351] [PATCH] prevent CVE-2014-6277 — shyouhei@...
Issue #10351 has been updated by Shyouhei Urabe.
[ruby-core:65889] Re: [ruby-trunk - Feature #10423] [PATCH] opt_str_lit*: avoid literal string allocations
Sure, I'll show each instruction with comments inline:
"%d" % 5
--------
[1,
[:trace, 1],
# 14 == OM_idMOD__String in generated opt_method.h
# [:putstring, "%d"] was replaced with
[:opt_str_lit_recv, ["%d", 14]],
[:putobject, 5],
[:opt_mod, {:mid=>:%, :flag=>256, :orig_argc=>1, :blockptr=>nil}],
[:leave]]
# I hope to optimize allocation on sprintf format strings too,
# but that may be tricky...
str.tr("a", "A")
----------------
[1,
[:trace, 1],
[:putself],
[:opt_send_simple, {:mid=>:str, :flag=>280, :orig_argc=>0, :blockptr=>nil}],
# both :opt_str_lit_tmask calls used to be :putstring
# 55 == OM_idTr__String
# 32 == OM_TMASK_String (1 << RUBY_T_STRING), also in opt_method.h
[:opt_str_lit_tmask, ["a", 55, 32, 0]], # 0: offset to recv (str)
[:opt_str_lit_tmask, ["A", 55, 32, 1]], # 1: offset to recv (str)
[:opt_send_simple, {:mid=>:tr, :flag=>256, :orig_argc=>2, :blockptr=>nil}],
[:leave]]]
Time.now.strftime("%Y")
-----------------------
[1,
[:trace, 1],
[:getinlinecache, :label_9, 0],
[:getconstant, :Time],
[:setinlinecache, 0],
:label_9,
[:opt_send_simple, {:mid=>:now, :flag=>256, :orig_argc=>0, :blockptr=>nil}],
# 63: OM_idStrftime__Time
# for opt_str_lit_data, we must ensure class (Time) matches recv
# because T_DATA may be almost anything
[:opt_str_lit_data, ["%Y", 63, Time, 0]], # 0: offset to recv
[:opt_send_simple,
{:mid=>:strftime, :flag=>256, :orig_argc=>1, :blockptr=>nil}],
[:leave]]]
In the future, I hope these optimizations can be applied to pure Ruby
classes and methods, as I mentioned in [ruby-core:65761]
I have been using the following insn-dump.rb script:
require 'pp'
pp RubyVM::InstructionSequence.compile(STDIN.read).to_a