访问示例程序由 ruby 生成的字节码
Access byte code generated by ruby for sample program
有什么方法可以访问 Ruby 程序为以下示例代码创建的字节码吗?
x=1
x.to_s
puts x
如果您使用的是 Rubinius,您可以 运行 像这样获取字节码:
$ rbx compile simple.rb -o simple.bytecode
你可以看到全面的解释here and an explanation about the Rubinius compilation here。
这将显示 YARV 指令
code = <<END
x=1
x.to_s
puts x
END
puts RubyVM::InstructionSequence.compile(code).disasm
如果你想了解更多,你可以在显微镜下找书Ruby
这将是输出
1.9.3-p547 :012 > code = <<END
1.9.3-p547 :013"> x=1
1.9.3-p547 :014"> x.to_s
1.9.3-p547 :015"> puts x
1.9.3-p547 :016"> END
=> "x=1\nx.to_s\nputs x\n"
1.9.3-p547 :017 > puts RubyVM::InstructionSequence.compile(code).disasm
== disasm: <RubyVM::InstructionSequence:<compiled>@<compiled>>==========
local table (size: 2, argc: 0 [opts: 0, rest: -1, post: 0, block: -1] s1)
[ 2] x
0000 trace 1 ( 1)
0002 putobject 1
0004 setlocal x
0006 trace 1 ( 2)
0008 getlocal x
0010 send :to_s, 0, nil, 0, <ic:0>
0016 pop
0017 trace 1 ( 3)
0019 putself
0020 getlocal x
0022 send :puts, 1, nil, 8, <ic:1>
0028 leave
有什么方法可以访问 Ruby 程序为以下示例代码创建的字节码吗?
x=1
x.to_s
puts x
如果您使用的是 Rubinius,您可以 运行 像这样获取字节码:
$ rbx compile simple.rb -o simple.bytecode
你可以看到全面的解释here and an explanation about the Rubinius compilation here。
这将显示 YARV 指令
code = <<END
x=1
x.to_s
puts x
END
puts RubyVM::InstructionSequence.compile(code).disasm
如果你想了解更多,你可以在显微镜下找书Ruby
这将是输出
1.9.3-p547 :012 > code = <<END
1.9.3-p547 :013"> x=1
1.9.3-p547 :014"> x.to_s
1.9.3-p547 :015"> puts x
1.9.3-p547 :016"> END
=> "x=1\nx.to_s\nputs x\n"
1.9.3-p547 :017 > puts RubyVM::InstructionSequence.compile(code).disasm
== disasm: <RubyVM::InstructionSequence:<compiled>@<compiled>>==========
local table (size: 2, argc: 0 [opts: 0, rest: -1, post: 0, block: -1] s1)
[ 2] x
0000 trace 1 ( 1)
0002 putobject 1
0004 setlocal x
0006 trace 1 ( 2)
0008 getlocal x
0010 send :to_s, 0, nil, 0, <ic:0>
0016 pop
0017 trace 1 ( 3)
0019 putself
0020 getlocal x
0022 send :puts, 1, nil, 8, <ic:1>
0028 leave