访问ruby为示例程序生成的字节代码

时间:2015-10-17 15:53:17

标签: ruby bytecode

有没有办法访问Ruby程序为以下示例代码创建的字节代码?

x=1
x.to_s
puts x

2 个答案:

答案 0 :(得分:2)

如果您正在使用Rubinius,您可以像这样运行它并获取字节码:

$ rbx compile simple.rb -o simple.bytecode

您可以查看全面的解释here以及有关Rubinius汇编的解释here

答案 1 :(得分:2)

这将显示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