Ruby 2.0 字节码导出/导入

2024-02-12

我一直在读关于红宝石 2.0 新功能 http://www.rubyinside.com/ruby-2-0-implementation-work-begins-what-is-ruby-2-0-and-whats-new-5515.html,发现它会支持字节码导入/导出:

Ruby 2.0 有望使将预编译的 Ruby 脚本保存为字节码表示形式并直接运行它们变得简单。

我已经安装了 ruby​​-2.0.0-p0,但我没有找到任何有关如何导出字节码的信息(或有关此事的一般文档)。此功能是否已实现?如果已实现,我该如何使用它?

我也想知道一些细节。 YARV 字节码应该是平台无关的吗?所有的 gem 都会自动包含在字节码中吗?


在有更好信息的人看到这个问题之前,我做了一些研究:

此功能是否已实现?如果已实现,我该如何使用它?

它已实现,但似乎没有公开(例如ruby --dump-bytecode不存在)。而且也没有太多文档 http://www.ruby-doc.org/core-2.0/RubyVM/InstructionSequence.html。据我所知,您正在寻找的是这样的:

seq = RubyVM::InstructionSequence.compile_file("./example.rb")

seq.disassemble将为您提供一个格式良好的字符串,您可以将其转储到文件中,或者seq.to_a将生成一个如下所示的数组:

["YARVInstructionSequence/SimpleDataFormat",
 2,
 0,
 1,
 {:arg_size=>0, :local_size=>1, :stack_max=>2},
 "<main>",
 "./example.rb",
 "./example.rb",
 1,
 :top,
 [],
 0,
 [],
 [[:trace, 1],
  [:putspecialobject, 3],
  [:putnil],
  [:defineclass,
   :User,
   ["YARVInstructionSequence/SimpleDataFormat",
    2,
    0,
    1,
    {:arg_size=>0, :local_size=>1, :stack_max=>6},
    "<class:User>",
    ....

如果您想将其保存到文件中,您可以执行以下操作:

File.write("out.dump", Marshal.dump(seq.to_a))

然后再次加载:

arr = Marshal.load(File.read("out.dump"))

不幸的是我似乎不知道如何创建一个新的InstructionSequence给定上面加载的数组。

我也想知道一些细节。 YARV 字节码应该是平台无关的吗?所有的 gem 都会自动包含在字节码中吗?

在上面的示例中,不包括宝石。你的InstructionSequence将包括相当于a的字节码require 'active_record'或者你有什么。我怀疑如果字节码的转储和加载是由直接提供的ruby可执行文件,此行为将保持不变。

如果其他人有更多信息,我很乐意看到!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ruby 2.0 字节码导出/导入 的相关文章

随机推荐