6

Ruby 1.9 は bytecode にコンパイルしていましたが、コンパイル済みのスクリプトをディスクに保存できませんでした。

Ruby 2 ではコンパイル済みのバイトコードをディスクに保存できるようにするように言われましたが、その話はあまり聞いたことがありませんし、コンパイルによってパフォーマンスを向上させる方法を説明している無数のブログ投稿を見たこともありません。実際、Ruby 2.x のどこかに実装されています。

焦点を絞ったGoogle 検索では、有用なものは何も返されないようです。

2.1 (またはそれ以前) で可能ですか? そうでない場合、これはまだロードマップにありますか?

4

2 に答える 2

5

半分可能です。

  • ここから拡張機能をダウンロードしてコンパイルします。
  • ライブラリが必要iseq.so
  • さて、loadバイトコードのメソッドが利用可能になりました

例 (コンパイラ/ローダー)

require "zlib"
require "./ext/iseq" # ./ext/iseq.so

# ARGV[0] compile or load
# ARGV[1] file to compile or load

case ARGV[0]
when 'compile'
  File.open("#{File.basename(ARGV[1],'.rb')}.bin",'w') do |f|
    f << Zlib::Deflate.deflate(
      Marshal.dump(
        ISeq.compile_file( ARGV[1] ).to_a
        )
    )
  end
when 'load'
  ( File.open( ARGV[1], 'r') do |f|
      ISeq.load(
        Marshal.restore(
          Zlib::Inflate.inflate( f.read )
        )
      )
    end ).eval
else
  puts 'need options'
end

それは使い方

$ ruby compilator.rb compile my_project.rb # => compile to bytecode
$ ruby compilator.rb load my_project.bin   # => load from bytecode and eval

ノート

最も単純なプロジェクトでは、同じ Ruby インタープリターで動作します (1.9.3 と 2.xx は互換性がありません)。しかし、もう少し複雑なプロジェクトでは機能しません (セグメンテーション違反)。

于 2014-06-14T01:59:50.173 に答える