有没有工具可以让我编译Ruby代码,让它运行得更快一些?
例如,我听说有一个名为"pyc“的Python工具,它可以让我们编译代码,这样它的运行速度就会快10倍。
发布于 2011-05-06 02:32:13
简单的答案是,你不能,至少在MRI 1.8 (标准)中是不行的。这是因为1.8通过遍历抽象语法树来工作。JRuby和Rubinius使用字节码,它允许编译成中间表示(字节码)。从MRI Ruby2.3中可以很容易地做到这一点,请参阅下面的answer。
使用Rubinius,您可以执行本文所述的操作:http://rubini.us/2011/03/17/running-ruby-with-no-ruby/
在JRuby中,我相信你可以通过jrubyc使用"Ahead Of Time“编译器。
这并不是真正的标准方法,通常让你的Ruby实现按它想要的方式来处理它会更好。Rubinius至少会在第一次编译后缓存字节码,并根据需要对其进行更新。
发布于 2017-06-18 17:27:02
在ruby 2.3.0中,将源代码编译成Ruby-VM能够理解的字节码非常容易。
byte_code = RubyVM::InstructionSequence.compile_file '/home/john/somefile.rb'
File.binwrite '/home/john/bytecode', byte_code.to_binary和在命令行中
$ cat bytecode
YARB�
IUsx86_64-linux*.*1
+1�!AA*1
!qy��������yyQ� E/home/john/somefile.rbE<main>E <class:A>EshivaEhelloEAEputsEcore#define_methodu����� 5M文件的内容
class A
def shiva
puts 'hello'
end
end目的是什么?
好吧,ruby需要时间将你的源代码编译成字节码,所以你可以直接把字节码加载到ruby中并执行。没有语法检查和编译的开销。它比正常进程要快得多。
如何加载字节码?
bytecode = File.binread('/home/john/bytecode')
instruction_from_byte_code = RubyVM::InstructionSequence.load_from_binary bytecode
instruction_from_byte_code.eval
# => :shivaMRI注意事项:此答案仅在中测试。它可能在其他Ruby实现
中工作,也可能不工作
发布于 2013-02-22 23:52:29
在2013年初,没有一种方法可以将Ruby转换成C/C++源代码,然后编译它。
然而,我听到Matz (Yukihiro Matsumoto)说,一位研究人员正在日本创造这个工具。这个项目应该由日本政府建立。
否则,您可以使用JRuby并将其编译为Java字节码,也可以使用Rubinius。Rubinius在字节码(JIT编译器)中为Rubinius VM自动编译。可以将字节码中的Rubinius转换为LLVM IR,LLVM可以生成机器码。
https://stackoverflow.com/questions/5902334
复制相似问题