組み込みC言語プログラマのためのmruby入門(後編) ―― mrubyの組み込み方とJavaとの違い

邑中 雅樹

tag: 組み込み

技術解説 2012年12月14日

本連載では,主にC言語で開発している組み込みプログラマを対象に,Rubyおよびmrubyについて解説している.今回は,mrubyをアプリケーションに組み込む方法について概要を説明する.また,組み込みJavaなどの類似技術との違いについても述べる.(編集部)

技術解説・連載「組み込みC言語プログラマのためのmruby入門」 バック・ナンバ
前編 Rubyとmruby,何が違う? どう違う?
中編 mrubyをお手軽に体験する!

3.mrubyの組み込み方

mrubyのコアはバイトコード処理系です.前回は,対話的にmrubyのプログラミングができるアプリケーションmirb.exeを使いましたが,mirbは文を入力するたびに内部でバイトコード・コンパイラが実行され,バイトコード・インタプリタにより実行されています.mruby.exeも同様の機能を持っていますが,同時に事前コンパイルされたバイトコードを入力とすることもできます.また,バイトコードを生成する機能だけを切り出したコンパイラがmrbc.exeです.

本稿執筆時点では,mrubyのコアのAPI仕様はまだ流動的です.そこで本稿では,将来においても変更が行われないであろうと予測できるところを中心に,mrubyの組み込み方について紹介します.具体的には,mrbcによるバイトコードの生成と,実行環境である構造体mrb_stateへの組み込み方を説明します.

それでも,関数の引き数の変更などは起こる可能性があります.後述するように,mrubyバイトコードの代表的な利用例はmruby自身です.mirb,mruby,mrbcといったツールのソース・コードも参考にしてください.


くろまるmrbcからバイトコードを出力する

mrbcが出力するバイトコードの形式は2通りあります.一つはRiteというオリジナルの形式,もう一つはC言語形式です.C言語形式は,さらに配列形式と関数形式の2種類に分かれます.

mrbcは,表1に示すコマンド・ライン・オプションを持っています.-Bオプションや-Cオプションを与えないでmrbcを呼び出すと,Rite形式のバイトコードが得られます.Rite形式の場合,-oオプションを付けないと,ソース・コードの拡張子をmrbに替えたファイル名が出力先となります.

表1 mrbc.exeのコマンド・ライン・オプション

オプション名 機能
-c 文法チェックのみ
-o<outfile> コンパイル結果の出力ファイル名を<outfile>とする
-v バージョンを表示し,冗長モードにする注1
-B<symbol> C言語の配列として扱えるソース・コード形式で出力する.<symbol>は配列の変数名となる
-C<func> C言語の関数として扱えるソース・コード形式で出力する.<func>は関数名となる
--verbose 冗長モードにする注1
--version バージョンを表示する
--copyright 著作権情報を表示する

注1:冗長モードにすると,実行(ファイル出力)時に構文解析木や出力結果のアセンブリ表記など,詳細な情報を表示する.

例として,リスト1のようなRubyのプログラムを取り扱います.aに1を代入し,aに5を加えて表示するものです.

リスト1 例として用いるRubyのプログラム(mrbc_test.rb)

a = 1
p a + 5

コマンド・プロンプトでmrbc.exeの入っているフォルダに移動するか,mrbc のあるディレクトリを Path 環境変数に追加しておき,

$ mrbc mrbc_test.rb

を実行すると,mrbc_test.mrbが生成されます.このファイルの中身は,Intel HEXフォーマットやMotorola S-recordフォーマットのように,ASCII文字列で表記されています(リスト2).

リスト2 Rite形式のバイトコード(mrbc_test.mrb)

RITE0009000000090000MATZ 000900000000007000010000 F91A00000070SC0002000500047F090000000600C000030100000601804001018042
10000A00000004A82E1000000000000000000020001p0001+7AC100000000

tag: Java, オープン・ソース, ソフトウェア, プログラミング言語, 開発環境

1 2 3 4 »

関連記事

AltStyle によって変換されたページ (->オリジナル) /