すがブロ

sugamasaoのhatenablogだよ

C言語から Ruby を呼びたい><

C言語がメインで、サブルーチンとして Ruby を呼びたいのです

パフォーマンスを出したいので C 言語で実装したい。だけど、利便性を考えて少し Ruby のライブラリを読んで処理を噛ませたい!
http://www.sb.soft.iwate-pu.ac.jp/~yushi/memo/ruby_ext.html
ここのサイトのような、拡張モジュールを作成する、というやり方だとどうしても主が Ruby になってしまう。
メインプログラムや起動エントリー部分は C 言語で作成したいので、このやり方だとうまく行かない気がする。まぁ、起動部分は Ruby で書いて、実ロジックをほぼC言語で書きながら、部分的に Ruby を呼ぶ方式を選ぶのならば上記でも良いのだろうけど。。。

C#Ruby の連携ならあった

http://jp.rubyist.net/magazine/?0021-RubyWithCSharp
ここによると、 dll をインポートしてほぼインタープリタを内蔵するような雰囲気?でコーディングすれば C# -> Ruby を実現できるようだ。
スクリプト自体はプログラム起動時に読み込んで eval すれば(たぶん)そんなにオーバーヘッドもかからないであろう。
んで、dll を読み込むのは C# の特別な方法ではなさそうなので、これを応用すれば C言語からでも呼べるかもしれない。・・・が、これは windows の話なので、LinuxUnix の場合はmsvcrt-ruby18.dll的な、なにがしか別途のライブラリがあるのだろうか。

というわけで

1時間も調べていないけど、方針としては以下の二つで検討すべきか

  1. プログラムエントリー部分は Ruby で書く。実ロジックは C言語で実装する。たまに C 言語から Ruby のライブラリを使う。
  2. C言語でプログラムエントリー部分を書く。実ロジックも C言語で実装する。たまに C 言語から Ruby のライブラリを使う。

1. の方法は本末転倒な気がするが、パフォーマンスに支障をきたさず目的が達成できればガワの部分が Ruby だろうが文句は言われまい。