2012年05月14日

mrubyをコンパイルしてみた 2012/05

mrubyをコンパイルしてみた 2012/05
このブログ的には、mrubyって「ムルビー」って読みがち。 (オイ

軽量Rubyへの取り組み
http://www.iij.ad.jp/company/development/tech/activities/mruby/

* mrubyをコンパイルしてみた 2012/05
2012/04/20あたりにgithubでアップされていたらしい。
git://github.com/mruby/mruby.git
https://github.com/mruby/mruby
ググってみると、まだアップされて20日くらいしか経っていないのに
多くのフォロアがいて驚いた。さすがに国産だけあって注目度が高いのが伺える。

自分の環境ではMinGWにbisonを追加するだけでコンパイルと動作確認出来た。
mingw-get install msys-bison

gccはv4.6.2でデフォルトの「-O3」オプションで920kbyteくらいだった。(stripかけて)
これを、いわゆる超組み込み向けの「-Os」オプション :D に変更すると
720kbyteまで減った。(注1)
mruby\bin>size mruby.exe
   text    data     bss     dec     hex filename
   717200    2992    2680  722872   b07b8 mruby.exe
このブログ的なターゲットマイコンとしては、 IF誌付録のSH-2Aマイコン(DRAM 1Mbyte) STM32F4Discoveryボード(Flash 1Mbyte/ SRAM 192kbyte) 等が考えられる。 上のコンパイル結果(x86用)をみると、上記マイコンではシステム的に アンバランスなもののFlashが720kbyteで収まったのはちょっと予想外だった。 (I/Oモジュールなしなので、これだけではアレだけど) 動作に必要なヒープ量が100kbyte〜200kbyte程度なら何とか上記マイコンでも動きそうな 気がするが今のところ必須最低ヒープ量は未調査。 フォロアが多いのでそのうち誰かが... (オイ (注2) ちなみに、このブログ的な物件としては、ざっくり PyMite(p14p) Flash 30kbyte〜 , SRAM 8Kbyte〜 Pawn Flash 64kbyte前後〜 , SRAM 32kbyte程度? 探査中 eLua Flash 200kbyte前後〜, SRAM 32kbyte〜 というのが今までの経緯なので、 mrubyはやはり「別カテゴリ」に属するのは明らかなわけだけど。 * PC上で動かしてみた 上でコンパイルした「mruby.exe」でスクリプトを動かしてみた。 スクリプトを「hello.rb」とすると bin/mruby.exe hello.rb とすれば動く。 以下は、実験用のスクリプトなので深い意味はない。
class Msg
    def initialize( str )
        @instr = "internal"     # ---- ここが正解
        msg( str )
        @instr = "internal" # ---- これバグってた。 2012/06/23 orz
    end

    def msg( str="Hello mruby !")
        puts str + " --- " + @instr
    end

    def rx( txt )
        for i in 0..txt.length do
            puts txt.upcase[i] 
        end
    end
end

def func_main()
    obj = Msg.new("Init hello")
    obj.msg()
    obj.rx("nbnbnb")
    obj.rx("abcdefg"[1..4])
    puts 3.1 * 5
end

func_main()
上は、一応意図通り動きました。 正規表現比較の「=~」が使えなかった。 orz と、いうか、 ドキュメントがなさそうなので、どういう予約語が使えるとか使えないとか、 「素のruby」の言語仕様ってなに? とか、今のところ不明な点は多い。(メーリングリストがあるらしい) 予約語については「src/keywords」で大まかにわかる。 仮想マシンコードを実行: bin/mrbc.exe hello.rb とすると「hello.mrb」という仮想マシンモジュールが生成される。 これを、実行するには bin/mruby.exe -b hello.mrb とする。 仮想マシンモジュールのC言語配列を出力 上のスクリプトのメイン関数「func_main()」をC言語の配列として出力できるみたい。 bin/mrbc.exe -Bfunc_main hello.rb とすると以下の様な仮想コード配列「hello.c」が出力される。
const char func_main[] = {
0x52,0x49,0x54,0x45,0x30,0x30,0x30,0x39,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x39,
0x30,0x30,0x30,0x30,0x4d,0x41,0x54,0x5a,0x20,0x20,0x20,0x20,0x30,0x30,0x30,0x39,
......
ARMコンパイラでコンパイル irukaさんのページで、armコンパイラを使って実際のサイズが出た様です。 http://hp.vector.co.jp/authors/VA000177/html/2012-04.html なんと、Flashサイズ640kbyteまで来ました。 (注1)x86系のコンパイルサイズとARM Cortex-M系のコンパイルサイズはだいたい     同じだろうという予測に基づく。(±数十%程度と予測) (注2)gdbで見ればいいわけだけど。 参考: 2. MRuby 探索 http://www.oki-osk.jp/esc/mruby-oa/02.html Big Sky システム開発屋がひっそり語るぼやき http://mattn.kaoriya.net/software/lang/ruby/20120420121729.htm mruby を Ash エミュレータ上の Linux (uClinux) 環境で動かしてみる http://pylone.jp/blog/mruby_on_qemu_ash rubyco(るびこ)の日記 Windows XPでmrubyをビルドして動かすAdd Star http://d.hatena.ne.jp/rubyco/20120424/mruby mrubyコンパイルできなかったけど-std=gnu99つけてコンパイルした。 http://kimoto.hatenablog.com/entry/2012/05/01/155911


posted by Copyright (C) avrin All Rights Reserved. at 00:00| Comment(0) | mruby | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。