2012年4月20日、軽量Rubyことmrubyのソースコードがgithub上で公開されました。
早速、Rails Hub情報局にて記事になっています。勉強になります。
早速試してみました。環境はOSX Lion(10.7.3)です。
インストール
インストールはソースをgit cloneして、makeすればOK。binの下にmrbcとmrubyとmrubysampleができてました。
tsubame.local{miyohide}% ls -l total 8584 -rwxr-xr-x 1 miyohide staff 1459520 4 20 20:58 mrbc -rwxr-xr-x 1 miyohide staff 1466728 4 20 20:58 mruby -rwxr-xr-x 1 miyohide staff 1461432 4 20 20:58 mrubysample tsubame.local{miyohide}%
バージョン情報
バージョン情報を見てみました。
tsubame.local{miyohide}% ./mruby -v ruby 1.8.7 (2010-08-16 patchlevel 302) [i386-mingw32] Usage: ./mruby [switches] programfile switches: -b load and execute RiteBinary(mrb) file -c check syntax only -v print version number, then trun on verbose mode --verbose run at verbose mode --version print the version --copyright print the copyright tsubame.local{miyohide}%
おぅ。mingw32って出てますね。これは、./src/version.hでこの値を固定値で設定しているからのようです。
動かしてみた
おなじみのHelloプログラムを。
tsubame.local{miyohide}% cat ../../hello.rb puts "hello mruby." tsubame.local{miyohide}% ./mruby ../../hello.rb hello mruby. tsubame.local{miyohide}%
普通に動きますね。
コンパイル
mrbcっていうのはコンパイルするプログラムのようです(最後にcってついているし)。早速やってみましょう。
tsubame.local{miyohide}% ls -l ../../hello* -rw-r--r-- 1 miyohide staff 21 4 20 21:07 ../../hello.rb tsubame.local{miyohide}% ./mrbc ../../hello.rb tsubame.local{miyohide}% ls -l ../../hello* -rw-r--r-- 1 miyohide staff 200 4 20 21:16 ../../hello.mrb -rw-r--r-- 1 miyohide staff 21 4 20 21:07 ../../hello.rb tsubame.local{miyohide}%
コンパイルすると、hello.mrbというファイルが出来ました。
バイナリを見てみる
fileコマンドでmrbファイルを見てみると、「ASCII text」って返したので、中身を見てみました。
tsubame.local{miyohide}% file ../../hello.mrb ../../hello.mrb: ASCII text, with no line terminators tsubame.local{miyohide}% cat ../../hello.mrb RITE0009000000090000MATZ 000900000000007800010000 5B9400000078SC0002000400046F2800000005010000060180003D02000005010000A00000004AF507000000010F000Chello mruby.3CC4000000010004puts248900000000% tsubame.local{miyohide}%
最後の%はzshが付けたものです。MATZって入るのが決まりなのかな?
実行
mrbファイルはそのままでは実行できないようです。
tsubame.local{miyohide}% ./mruby ../../hello.mrb Invalid octal digit syntax error, unexpected tINTEGER, expecting $end tsubame.local{miyohide}%
オプションとして-bを付けると良いようです。
tsubame.local{miyohide}% ./mruby -b ../../hello.mrb hello mruby. tsubame.local{miyohide}%
ということで、ひと通り試してみました。