これは、ETロボコン Advent Calendar 2014 - Adventarの 24日目のエントリーに備えた、補足記事です。
mrubyをよく知らない人向けに、mrubyのソフトウェア構成・開発環境についてまとめます。
mrubyのソフトウェア構成
mrubyの内部構造は、おおまかに以下の図のようになっています。
mrubyのコアとなるのは「ライブラリ(libmruby.a)」です。このライブラリがmrubyの大半の機能を実現しています。インタプリタ(mruby)、対話型シェル(mirb)、コンパイラ(mrbc)、デバッガ(mrdb)は、このライブラリとリンクして生成され、ライブラリを利用することで各々の機能を実現します。
それぞれがどのような実行モジュールであるか、以下に説明します。
インタプリタ(mruby)
Rubyで記述されたソースコードまたは中間オブジェクトを実行します。
対話型シェル(mirb)
ソースコードは指定せず、シェルへ実行命令を1行ずつ打ち込む形で実行します。Rubyのソースを一部分だけお試しで動かすときなどに役立ちます。
コンパイラ(mrbc)
Rubyで記述されたソースコードを事前にコンパイルし、中間オブジェクトを生成する際に使用します。
デバッガ(mrdb)
実行中のプログラムを中断させて、動作が意図通りとなっているかチェックしたり、意図的に振る舞いを変更させたりすることができます。プログラムを中断させたあと、1行ずつ実行させることもできます。
mrubyの実行方法
インタプリタ(mruby)とデバッガ(mrdb)は、Rubyの文法で書かれたソースを実行する環境となります。この時、実行方法は2種類存在します。
こう書くと、2の方が性能が良いと思われがちですが、「実行中の性能は変化しない」が正解です。1の方法も、実行前に中間オブジェクトに変換している*1ためです。
開発環境
実際にEV3上で動作するmrubyのソフトウェアを開発するために、ホストとターゲットの両環境を構築(クロス開発)すると便利です。
図にあるように、クロス環境を構築すると、ホスト環境で作成したソースをホスト環境でもターゲット環境でも動作させることができます。また、ターゲット環境上でmrdbを起動してデバッグ、なんてことも(環境が整っていれば)可能です。
残念ながらEV3の環境がどのような構成となるか、現時点では未確定です。ですので、まずはホスト環境のみ先に構築してmrubyに触れてみるのが良いでしょう。