首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何编译Ruby?

如何编译Ruby?
EN

Stack Overflow用户
提问于 2011-05-06 02:15:45
回答 7查看 60.3K关注 0票数 31

有没有工具可以让我编译Ruby代码,让它运行得更快一些?

例如,我听说有一个名为"pyc“的Python工具,它可以让我们编译代码,这样它的运行速度就会快10倍。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 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至少会在第一次编译后缓存字节码,并根据需要对其进行更新。

票数 26
EN

Stack Overflow用户

发布于 2017-06-18 17:27:02

ruby 2.3.0中,将源代码编译成Ruby-VM能够理解的字节码非常容易。

代码语言:javascript
复制
byte_code = RubyVM::InstructionSequence.compile_file '/home/john/somefile.rb'

File.binwrite '/home/john/bytecode', byte_code.to_binary

和在命令行中

代码语言:javascript
复制
$ 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

文件的内容

代码语言:javascript
复制
class A
  def shiva
    puts 'hello'
  end
end

目的是什么?

好吧,ruby需要时间将你的源代码编译成字节码,所以你可以直接把字节码加载到ruby中并执行。没有语法检查和编译的开销。它比正常进程要快得多。

如何加载字节码?

代码语言:javascript
复制
bytecode = File.binread('/home/john/bytecode')
instruction_from_byte_code = RubyVM::InstructionSequence.load_from_binary bytecode

instruction_from_byte_code.eval
# => :shiva

MRI注意事项:此答案仅在中测试。它可能在其他Ruby实现

中工作,也可能不工作

票数 9
EN

Stack Overflow用户

发布于 2013-02-22 23:52:29

在2013年初,没有一种方法可以将Ruby转换成C/C++源代码,然后编译它。

然而,我听到Matz (Yukihiro Matsumoto)说,一位研究人员正在日本创造这个工具。这个项目应该由日本政府建立。

否则,您可以使用JRuby并将其编译为Java字节码,也可以使用Rubinius。Rubinius在字节码(JIT编译器)中为Rubinius VM自动编译。可以将字节码中的Rubinius转换为LLVM IR,LLVM可以生成机器码。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5902334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档