From: arton Date: 2009-04-26T00:25:47+09:00 Subject: [ruby-dev:38328] Embeded Ruby-1.9.1 howto ? artonです。 ActiveScriptRubyという、Rubyの組み込みライブラリを作っているのですが、 1.9.1で、ちょっと困っています。 1.8以前は、アスキーのオブジェクト指向スクリプト言語Rubyの組み込み方法で 解説されていたように、ruby_process_optionsの呼び出しは必要ありませんでし たが、Ruby 1.9.1 を組み込んで使おうとすると、ruby_process_optionsの呼び 出しが事実上不可欠なようにみえます。 正確には、process_options(staticなので外部からは呼べない)内で実行して いるencdbの読み込みとその後の一連のエンコーディング関係のオブジェクトの 初期化とruby_init_gems(この中でGemモジュールの登録とInit_preludeの呼び 出しが行われる)の呼び出しが必要なのだと思いますが、 ・encdbの読み込みと一連のエンコーディングの設定はprocess_options内のコー ドとして埋め込まれている ・ruby_init_gemsはstaticとなっている。 ため、独立して呼び出すのが難しくなっています。というのは、いずれも独立し て外部から呼び出せないため、結局埋め込んでいる側へコードのコピーが必要と なるからです。 それを避けるにはruby_process_optionsを呼べばよいわけですが、しかし、 process_optionsは最後に、スクリプトが指定されていればそれをロードするし、 そうでなければ標準入力からのスクリプトの待ち状態とします。それを避けるには、 -eで何か適当なスクリプト片を与える必要がありますがいずれにしても、埋め込 みで使うには余分な動作です。 そこで、提案なのですが、 ruby_init_encoding (という関数は存在しない) ruby_init_gems のように、実行に必要となる初期化関数をexternとして公開するか、または、 argcが負値ならばスクリプトの読み込みに関して退出するように process_optionsを変えられないでしょうか。この場合、組み込んでいる側は、 ruby_process_options(0, NULL)と呼び出せば、必要な初期化がされた状態だけ を得られるようにするということです。 あるいは、ruby_init_interpreter みたいな、便利な関数を用意するとか。 よろしくご検討のほどお願いします。 -- arton -------------------------------------- Power up the Internet with Yahoo! Toolbar. http://pr.mail.yahoo.co.jp/toolbar/