Ruby について読み始めたばかりで、特定のスクリプト ファイルを解析するためのライブラリを提供する Lua のような C++ アプリケーションに埋め込むことができるかどうか疑問に思っていました: https://stackoverflow.com/a/5127294/399107
3 に答える
はい、できます。アプリケーションに Ruby エンジンを組み込むだけです。
メインの Lua エンジンとは異なり、一部の Ruby エンジンは、他のプログラムに組み込むのにあまり適していないことに注意してください。しかし、たとえば、Rubinius、IronRuby、およびJRubyは埋め込みを念頭に置いて特別に設計されており、きれいではありませんが、YARV や MRI を埋め込み用に設計されていなくても同様に埋め込むことができます。
MRubyもありますが、他のものとは異なり、完全な Ruby 言語仕様を実装していません。それ自体は、Ruby 1.8 と Ruby 1.9 の交差点の小さなサブセットである ISO Ruby 仕様のサブセットのみを実装しています。さらに、ホームページすら存在しないことからも明らかなように、まだリリースされていません。ただし、組み込み用に特別に設計されています。つまり、他のプログラムに組み込まれることと、RAM が非常に少ない組み込みデバイスで役立つことの両方の意味があります。
お気づきかもしれませんが、アプリが Java プラットフォームまたは CLI で実行されている場合、Ruby をアプリに埋め込む方がはるかに簡単です。Java プラットフォームと CLI の両方に対応する C++ コンパイラがあるため、そのオプションが完全に問題になるわけではありません。それ以外の場合は、Rubinius の方が埋め込みが簡単だと思いますが、YARV を埋め込もうとする人が増えているため、その方法に関するブログ投稿が増えています。(あるいは、Rubinius の埋め込みは、ブログ記事を書く必要のないほど簡単なことかもしれません。)
ずっと前に、誰かが Lua VM 用の Ruby の実装に取り組んでいましたが、その実装はどこにも行きませんでした。ただし、すべての問題を解決します:-)
はい、可能です。標準ライブラリの型のほとんどは C で記述されています。C を使用できる場合は、C++ も使用できます。extern "C"
宣言された関数を使用して、適切なバインディングを取得します。rubyインタプリタをコンパイルするのに使ったコンパイラとは違う(違うバージョンの)C++コンパイラを使っていて、かなり苦労しました。
ruby 拡張ライブラリをカバーする pick axt book の一部を以下に示します: http://media.pragprog.com/titles/ruby3/ext_ruby.pdf
オープン ソースの C++ Web サーバー プロジェクトで、Rails でサーバーを使用するための ruby/rack アダプターを作成しました: https://github.com/TorstenRobitzki/Sioux/tree/master/source/rack