新手问题 有人知道为何不能预编译 Ruby 源码到字节码呢, 就像 Python 一样.
有同学知道原因吗? 预编译可以加快启动速度哦. 甚至还可以保护源码
共收到 14 条回复
rubinius ???
mruby 的话可以编译给 C 用,但不知道是不是你要的东西。
#3楼 @shallmentmo 我的意思就是二楼的意思. 执行ruby前不从源码执行,而直接读入字节码执行.
先问有没有,再问为什么。 编译到字节码,Ruby作为这么一个灵活的语言,不可能有很好的办法去保护源码。 要不然连反射和元编程都做不了了。 Python和Java和.NET都是,分分钟反编译,而且有些时候反编译出来的代码比你原来写的还漂亮(doge
6楼 已删除
python的字节码简直讨厌,一点用处没有
最初的 YARV 可以预编译的, 但是由于字节码的设计还没成熟, 而且从源码到字节码的编译其实速度很快, 就没开放.
现在的 Ruby 2.3 又可以预编译到字节码啦
File.write 'foo.rbc', RubyVM::InstructionSequence.compile(File.read 'foo.rb').to_binary
载入
RubyVM::InstructionSequence.load_from_binary(File.binread 'foo.rbc').eval
如果你有很多代码(例如 10M 那么多), 觉得载入太慢, 或者你不想别人容易的看到源代码, 可以把它预编译到字节码.
执行速度是没有差别的
#7楼 @lilijreey 我并没有说不能编译到字节码。 倒不如说我第一句话就是告诉你可以编译到字节码的。
后文我说的是编译到字节码并不能保护源代码。 请审题。
2.3 可以编译 bytecode. 记得看过个ko1的演讲, 好像是说能提高30%的启动速度. 数字记不大清了.
money
我 twitter 上问了一下 Matz,供楼主参考