加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 编译什么防止?

发布时间:2020-12-17 01:24:54 所属栏目:百科 来源:网络整理
导读:RubyVM可以将 Ruby代码编译为字节代码,然后直接执行它.例如., COMPILE.rb File.write(ARGV[1],RubyVM::InstructionSequence.compile_file(ARGV[0]).to_binary) EXECUTE.rb RubyVM::InstructionSequence.load_from_binary(File.read(ARGV[0]).force_encoding(
RubyVM可以将 Ruby代码编译为字节代码,然后直接执行它.例如.,

COMPILE.rb

File.write(ARGV[1],RubyVM::InstructionSequence.compile_file(ARGV[0]).to_binary)

EXECUTE.rb

RubyVM::InstructionSequence.load_from_binary(File.read(ARGV[0]).force_encoding(Encoding::ISO_8859_1)).eval

TEST.BAT

ruby COMPILE.rb test.rb test.rbx
ruby EXECUTE.rb test.rbx

test.rb本身的ruby代码实际执行.这里有任何明显的缺点吗?一位朋友建议人们可能要小心,因为它可能不会在其他操作系统上运行.但是我希望它适用于所有操作系统,例如就像Java字节码一样,它可以在JVM执行的所有操作系统上运行.

编译Ruby到字节代码有什么明显的缺点(当然可读性除外)?

解决方法

Ruby没有标准化的字节代码格式.因此,无论你有什么,它都不是“Ruby字节代码”,它是Ruby的一个实现的一个版本的字节代码.

在您的特定情况下,它是YARV的字节代码.它不适用于MRuby,JRuby,Rubinius,Opal,MagLev,IronRuby,Topaz,MRI或任何其他Ruby实现.

此外,YARV不保证其字节代码的向前或向后兼容性,因此无法保证它将适用于较新版本或较旧版本的YARV. The documentation says:

The instruction sequence results will almost certainly change as Ruby changes

同样,YARV不保证字节码可移植性,因此无法保证它可以在不同的操作系统,不同的CPU或不同的平台上工作,即使使用相同版本的YARV也是如此.

最后,YARV的字节代码不安全,并且没有验证者. YARV将很乐意执行任何不安全的字节代码而无需检查,您可以构造使VM处于不安全状态的字节代码.因此,您永远不应该使用自己没有创建的字节代码来完成此操作,而这完全由您自己控制. The documentation says:

This loader does not have a verifier,so that loading broken/modified binary causes critical problem.

You should not load binary data provided by others. You should use binary data translated by yourself.

请注意,关于您的具体问题:

Are there any obvious downsides that come with compiling Ruby to byte code,(except of course readability)?

您似乎错误地认为,为了将Ruby编译为字节代码,您需要做一些特别的事情.这不一定是真的.

如果您使用YARV,MRuby,MagLev或Topaz,那么您的Ruby代码总是被编译为字节代码,而您无需执行任何操作.使用IronRuby和JRuby,它可能会也可能不会被编译为字节代码,具体取决于代码是否足够“热”.

此外,使用MagLev,你的字节代码将被编译为本机代码,如果它足够“热”,使用Rubinius和YARV,它可能会根据版本编译为本机代码,而使用IronRuby和JRuby,CIL / JVM字节代码可能会被编译为本机代码,具体取决于CLI VES / JVM实现.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读