Ruby.pm が動かない理由

Rubyをブートするとき,あとでGCするためにスタックの位置を記録しているようだが,そのせいでSystemStackErrorになるらしい。1.8, 1.9ともに問題はこのことだと思われる。
use Ruby;のときのバックトレースを調べてみた。

  • main()
    • perl_parse()
      • S_parse_body()
        • Perl_utilize()
          • Perl_newATTRSUB()
            • S_process_special_blocks()

このXS_boot_Ruby()でRubyの初期化を行い,スタックの位置を記録している。
一方,スクリプトからRuby.pmの機能(たとえば&Ruby::eval())を呼び出すときは以下のように呼び出される。

普通にRubyを組み込もうとすると,main()やそこらでスタックの位置を初期化して,その後は関数呼び出しが深くなる一方であるはず。それが,初期化位置より浅いところでRuby APIを呼び出すことで,何かよくないことが起きている。…のだと思う。たぶん。そして原因が分かったとしても解決法が思いつかない。