先日、無謀にも mrubyファミリ (組み込み向け軽量Ruby) Advent Calendar 2024 向けに mrubyをC言語のシミュレーションのプログラムに組み込んでDSLとして利用する という記事を書いてしまいました。 このgist文章はそのC++言語版かもしれません。
C++のクラスは小難しい構造体にすぎないので、 Cと同じようにC++プログラムにmrubyを組み込むことはできなくもないです。 しかし、そうするとコンストラクタとデストラクタをそのまま使うことができませんし、 使いたいC++のメソッドなどのラッパをmruby用にいちいち書く必要があり面倒です。
C++のクラスやメソッドを半自動的にmrubyに変換してくれるmrubybindが便利そうです。 ライセンスはmrubyと同じMITです。 名前的にpybindのmruby版でしょうか。 しかし、mrubyの9c9be44a98のコミットで mrb_const_get()の動作が変わり、2024年末現在最新のmrubyでは mrubybindがそのままでは動かなくなってしまったようです。
このgist文章ではGitHubにあるいくつかのmrubybindのforkを調査しレポートします。 mdorier/mrubybindのforkについては最新のmrubyとともに動くように修正してみます。
Keita Oboさんが作られたオリジナルのmrubybindは https://github.com/ktaobo/mrubybind にあったようですが、現在は残念ながらなくなってしまったようです。
変更のないforkが https://github.com/skandhas/mrubybind のようです。
Keita Oboさんの解説記事がブログ https://ktaobo.blogspot.com/2013/03/mrubybind.html にあります。
codegenディレクトリで 引数の数0-6だけ7通りtemplateを生成してmrubybind.hを作っています。 よって、mrubybind.hはデバッグしづらいです。
https://github.com/mdorier/mrubybind
Matthieu Dorierさんが C++14のvariadic templatesを使ってtemplateを超単純化されました。 mrubybind.hのデバッグが楽です。すばらしいです。 例題テストもそろっています。
残念ながら2023年5月の9c9be44a98のコミット 以降のmrubyでは動かなくなってしまいました。 修正をプルリク中です。
https://github.com/t-nissie/mrubybind
わたくしが mdorier/mrubybind をforkして、 2024年末現在最新のmrubyで動くように修正したつもりです。 例題のテストが次のようにできます。
git clone https://github.com/mruby/mruby.git
cd mruby
rake -j33
cd ..
git clone https://github.com/t-nissie/mrubybind.git
cd mrubybind/test
MRUBY=../../mruby make test
https://github.com/dycoon/mrubybind
オリジナルにいくつかの便利な機能が追加されています。 解説が https://qiita.com/dycoon/items/697be0f649f174e70931 にあります。
残念ながらmruby側のいくつかの更新のために現状では動きません。
https://github.com/lihaochen910/mrubybind
dycoon/mrubybindをforkしたものです。 mruby側のいくつかの更新のために現状では動きません。 mrubydind.hのコンパイル時にエラーの出る箇所を
auto& → auto
->env → ->e.env
などと直してゆけば動きそうな気がします。 ホントはcodegenデレクトリ以下を編集すべきで、 mrubybind.hを直接編集してはいけないです。
C++のプログラムにmrubyを組み込むときに便利そうなmrubybindを調査しました。 GitHubのforkにはさらに便利そうな機能が追加されているものがありました。 mdorier/mrubybindのforkについては最新のmrubyとともに動くような修正を施してみました。 正しい修正かどうかをチェックしていただけたら幸いです。 最新のmrubyに追従する修正は面倒なので、 いつの日かmrubybindが https://github.com/mruby/mruby の中に取り込まれるとよいですね。
自分も本家のが動かなくて丁度探してました。androidで動きました、ありがたや~
5000行がこんなに短くなるとは。
ぐぐっても本家の方が上に来るのでここにたどり着ける人がどれほどいるか