半分可能です。
- ここから拡張機能をダウンロードしてコンパイルします。
- ライブラリが必要
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 は互換性がありません)。しかし、もう少し複雑なプロジェクトでは機能しません (セグメンテーション違反)。