組み込み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

 

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日