タグ

ブックマーク / ktaobo.blogspot.com (3)

  • mrubyのGCの仕組みを調べた - ブレ男のブログ

    2013年4月18日木曜日 mrubyのGCの仕組みを調べた 時刻: 0:09 動機 LuaのAPIは、Lua内部で扱われる値に関してスタック上であれこれ操作出来るだけで、値自体を直接取得したり作成することはできない。値を取り出したいときはスタック上のある場所にある値の型を調べて、その型の値を取り出すAPIを呼び出す、という具合になっている。この場合、処理系で扱う値はすべて処理系側で管理されているので、ガベージコレクト(GC)できるのもわからんでもない。 しかしmrubyAPIではスクリプト内部で扱う値をmrb_valueとしてC言語側に直接取り出せる。この場合処理系の管理を逃れてしまうことはないのか。またCの関数でmrubyのオブジェクトを作成した瞬間にGCが走った場合に、まだmrubyで管理している変数からの参照がなくて、解放されてしまったりしないのか。 大昔の事しか知らないけど

  • mrubyにC++のクラスを持ち込む

    C++側で定義されているクラスをmrubyに持ち込む方法を調べた。参考にしたのはmruby-time/time.cやmruby/C構造体組み込みを読む - Code Reading Wiki。正しいかどうかは保証できないけれど、一応ちゃんと動いているようです。 C++側になにかクラス class Hoge { public: Hoge(int x) : x_(x) { std::cout << "Hoge::ctor()" << std::endl; } virtual ~Hoge() { std::cout << "Hoge::dtor()" << std::endl; } int x() const { return x_; } private: int x_; }; があったとして、これをmruby側から扱いたい場合には、DATA型を使うといいようだ: #include <mruby

    kamipo
    kamipo 2013/03/31
  • ブレ男のブログ: mrubyのAPIテスト

    2013年3月11日月曜日 mrubyAPIテスト 時刻: 21:51 mrubyをCのプログラムに組み込んで使う方法を調べる。今のところ公式のドキュメントはHello Worldくらいしか用意されてない? 文字列を直接実行 #include <mruby .h> int main() { mrb_state* mrb = mrb_open(); mrb_load_string(mrb, "puts 'hello world'"); mrb_close(mrb); return 0; } // 実行結果: // hello world mrb_open()でコンテキスト作成、mrb_close()で終了 mrb_load_string()で実行 確認用として使う分にはよいだろうが、コンパイルが入るので何度も実行するには向かないでしょう。 C言語からmrubyの関数を呼び出す #incl

    kamipo
    kamipo 2013/03/31
  • 1