Ruby 1.9.0のバイトコードをいじり倒す(その4)

そういえば、言い忘れていましたが、タイトルにいじり倒すと書いてある割りには、バイトコードを1から作る話は出てきません。バイトコードを1から作る話としては、hzkrさんのScheme on YARV(http://d.hatena.ne.jp/hzkr/20070323#p3)がすばらしいです。
私のほうは、Rubyコンパイラの生成したバイトコードにパッチを当てる方向で突き進みたいと思います。

今後の方針ですが、現在バイトコードのパッチを利用してbreak pointとbacktraceを実現したデバッガを作っています*1。このデバッガの解説をしていきたいと思います。(その3)までは単に配列の変形だけで簡単なのですが、この先はなかなか険しいです。YARV Maniacsだけではなく、

を読んでおくと良いと思います。あと、Rubyのソース中のiseq.cやcompile.cとは顔なじみになることでしょう。

私個人では、デバッガを開発中で止まっていてこの先の解説は出来ないのですが、まだまだ夢は広がります。

  • 並列処理で同期に楽観的なロック戦略(SMTとかタイムワープ)とか使う。でも、バイトコードのバッチを使って(変数アクセスをフックする)、利用者には一貫性の回復処理(ロールバックとか)を意識させない。
  • 実行時にプロファイルを採って、実行時に最適化する
  • 互換性回復ツール

遠くを見ると面白いのですが、現実には問題がごろごろしています。次は、今デバッガの開発が止まっている原因になっている、VM::InstructionSequenceの問題について説明します。