tana_ash's diary

プログラミングや電子工作など。やってみたこと、わかったことをまとめておく場所。

mrubyをビルドしたり、使ったり。

RubyLuaのようにプログラムに組み込んだりできるmrubyというものがあります。
githubで公開されています。https://github.com/mruby/mruby/
今回はふと思いつきこれを試してみることにしました。
メモも兼ねて手順を書いておきます。
ビルドは簡単です。時間もあまりかかりません。

ビルドするよ!

まず、このコマンドでソースコードをgithubから取ってきまます。

git clone https://github.com/mruby/mruby.git

次に、mrubyディレクトリに入ってビルドします。makeだけです。本当に簡単です。
ただし、bisonのインストールが必要です。

cd mruby
make

これでビルドは終わりです。本当にこれだけです。
irbのようなmirbでコードを試してみることもできるようです。

./bin/mirb

っと、ここで普通のRubyとの違いが一つありました。

1 / 0

の結果が「inf」になり、エラーが出ません。

自作プログラムに組み込んでみる

最初に、mrubyディレクトリから「cd ../」で元のディレクトリに戻っておきます。
「sample.c」という名前でこんなC言語のプログラムを用意します。

#include <mruby.h>
#include <mruby/compile.h>
#include <stdio.h>

int main() {
  mrb_state *mrb;
  mrbc_context *ctx;
  mrb = mrb_open();
  if (mrb == NULL) {
    printf("Error\n");
  }
  ctx = mrbc_context_new(mrb);
  mrb_load_string_cxt(mrb, "puts \"Hello, world\"", ctx);
  mrbc_context_free(mrb, ctx);
  mrb_close(mrb);
  return 0;
}

このプログラムでmrubyを呼び出します。
mrb_load_string_cxtという関数がRubyソースコードを実行するものだと思います。
コンパイルする時は「-lm」が必要そうです。

gcc sample.c -o sample -I./mruby/include -L./mruby/lib -lmruby -lm

実行。

./sample

「Hello, world!」と表示されます。

まとめ

これでゲームとか作れたら楽しそうです。夢が広がりますね!