Ruby.pm が動かない理由
Rubyをブートするとき,あとでGCするためにスタックの位置を記録しているようだが,そのせいでSystemStackErrorになるらしい。1.8, 1.9ともに問題はこのことだと思われる。
use Ruby;のときのバックトレースを調べてみた。
- main()
このXS_boot_Ruby()でRubyの初期化を行い,スタックの位置を記録している。
一方,スクリプトからRuby.pmの機能(たとえば&Ruby::eval())を呼び出すときは以下のように呼び出される。
普通にRubyを組み込もうとすると,main()やそこらでスタックの位置を初期化して,その後は関数呼び出しが深くなる一方であるはず。それが,初期化位置より浅いところでRuby APIを呼び出すことで,何かよくないことが起きている。…のだと思う。たぶん。そして原因が分かったとしても解決法が思いつかない。