2007-12-30
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だけではなく、
- YARVアーキテクチャ(笹田さん著)http://www.atdot.net/yarv/yarvarch.ja.html
- ひとり勉強会のYARVの会(hzkrさん著)http://d.hatena.ne.jp/hzkr/19000101
を読んでおくと良いと思います。あと、Rubyのソース中のiseq.cやcompile.cとは顔なじみになることでしょう。
私個人では、デバッガを開発中で止まっていてこの先の解説は出来ないのですが、まだまだ夢は広がります。
- 実行時にプロファイルを採って、実行時に最適化する
- 互換性回復ツール
遠くを見ると面白いのですが、現実には問題がごろごろしています。次は、今デバッガの開発が止まっている原因になっている、VM::InstructionSequenceの問題について説明します。
*1:ソースコード(だけ)はhttp://d.hatena.ne.jp/miura1729/20071125/1195963181に貼り付けてあります。
- 5 http://d.hatena.ne.jp/keyworddiary/Scheme
- 2 http://d.hatena.ne.jp/keyworddiary/Ruby
- 2 http://reader.livedoor.com/reader/
- 1 http://d.hatena.ne.jp/keyword/最適化
- 1 http://d.hatena.ne.jp/keyword/Ruby
- 1 http://d.hatena.ne.jp/keyword/Scheme
- 1 http://d.hatena.ne.jp/keyword/YARV
- 1 http://d.hatena.ne.jp/negation/edit?date=20071231
- 1 http://d.hatena.ne.jp/shimobayashi/20071230
- 1 http://i-know.jp/deriwosk/