*.rbc の owner と permission
当然のように、Rubinius も調べてみる。
foo.rb:
def hello(name) puts "Hello #{name}!" end
main.rb:
require 'foo' hello('World')
result:
$ ls -l main.rb* foo.rb* # 最初は *.rbc はない -rw-r--r-- 1 kwatch kwatch 44 Feb 13 18:35 foo.rb -rw-r--r-- 1 kwatch kwatch 29 Feb 13 18:36 main.rb $ rubinius main.rb # rubinius が *.rbc を生成 Hello World! $ ls -l main.rb* foo.rb* # *.rbc の permission は 0644 -rw-r--r-- 1 kwatch kwatch 44 Feb 13 18:35 foo.rb -rw-r--r-- 1 kwatch kwatch 535 Feb 13 18:36 foo.rbc -rw-r--r-- 1 kwatch kwatch 29 Feb 13 18:36 main.rb -rw-r--r-- 1 kwatch kwatch 308 Feb 13 18:36 main.rbc $ rm *.rbc # *.rbc を削除 $ chmod 400 main.rb # owner の読み取り権限だけを設定 $ sudo chown root foo.rb # owner を変更 $ sudo chmod u-w foo.rb # owner の書き込み権限を削除 $ ls -l main.rb* foo.rb* # 現在の状態を確認 -r--r--r-- 1 root kwatch 44 Feb 13 18:35 foo.rb -r-------- 1 kwatch kwatch 29 Feb 13 18:36 main.rb $ rubinius main.rb # もう一度 *.rbc を生成 Hello World! $ ls -l main.rb* foo.rb* # *.rbc の permission は変わらず -r--r--r-- 1 root kwatch 44 Feb 13 18:35 foo.rb -rw-r--r-- 1 kwatch kwatch 535 Feb 13 18:44 foo.rbc -r-------- 1 kwatch kwatch 29 Feb 13 18:36 main.rb -rw-r--r-- 1 kwatch kwatch 308 Feb 13 18:44 main.rbc
というわけで、結論:
- Rubinius では、require したファイルだけでなく、コマンドラインで指定したファイルもコンパイルされて *.rbc が作成される。
- *.rbc ファイルでは、元ファイルである *.rb の owner や permission は考慮されない。
Rubinius と YARV って、バイトコードに互換性はないよね。Rubinius が .rbc という拡張子を使ったら、YARV はそれ以外の拡張子を使わないといけないじゃん! どんな拡張子にするんだろう。
・・・と、コンパイル機能が実装されてないのに心配してみた。