書いた人:ささだ
YARV: Yet Another RubyVM を解説するこの連載。お久しぶりです。前回が 2011 年 04 月に更新されているようなので、2 年ぶり、ということになります。また、随分間が空いてしまいました。間が空いている間に、Ruby 2.0.0 がリリースされていたり、mruby がリリースされたりと世の中は随分と変わってしまいました。
YARV はどうかと言いますと、Ruby 2.0.0 でも利用されています。Ruby 2.0.0 にあたって、少し高速化しました。が、メジャーなところはあまり変わっていません。
ただ、mruby が盛り上がってきており、今後は mruby の処理系を CRuby/MRI として利用しよう、みたいな話が出てくるかもしれません。また、Python を高速化することを目的として開発されている PyPy プロジェクトのツールチェインを利用した Ruby 実装である Topaz がリリースされました。ベンチマークでは CRuby の 5 倍くらい速いそうで、凄いですね。YARV が 1.8 系の CRuby/MRI に取って代ったように、次の Ruby では YARV をこういうのに換えようって話もあるかもしれません。JRuby も相変わらず元気で、ますます人気を博しています。そんな感じで色々出てきています。負けてられません。
今回は、そういう流れとはまったく関係無く、最近の YARV 事情をご紹介します。といっても、沢山書いてご紹介しよう、というわけではなく、YARV を紹介した記事を紹介しよう、という感じで、つまり、YARV Maniacs 【第 1 回】 『Ruby ソースコード完全解説』不完全解説 と同じようなことをやって 1 つ記事をでっち上げよう、というものです。
今回ご紹介するのは、Ruby 1.9 の処理系の中身を概観する Ruby Under a Microscope (英語) と、ささだが 2012 年の年末にまとめました Ruby VM アドベントカレンダー (日本語) になります。
Ruby Under a Microscope は、Pat Shaughnessy さんによってまとめられた、Ruby 処理系がなぜ動くのか、を解き明かす電子書籍です。英語で書かれていますが、英文は比較的平易であり、日本人にも読みやすいと思います1。20 USD なので、円安になっている昨今ですが、そんなに高くないので買うといいと思います。オススメです。
冒頭で「My approach in this book: theory and experiment」と、本書のアプローチが理論と実験であることが紹介されています。まず、ソースコードを読んで理論を立て、そして実際に動かして確認する、という手順を踏んでいます。この理論の部分はわかりやすい図で紹介されており、簡単に概要を把握することができるでしょう。
RHG では C 言語で書かれた Ruby 本体のソースコード 1 行 1 行を丁寧に解説していくスタイルでしたが、こちらはソースコードはほとんど出てきません。筆者は冒頭で「RHG は C プログラマための本であるが、この Ruby Under a Microscope は Ruby プログラマが Ruby に関する理解を深めるための本である」と紹介しています2。実際に、C の知識は必要無い、と言い切っています。凄いですね。ちなみに、内容はいくつかのトピックに限定されており、Ruby 処理系のすべてが解説されているわけではありません。
Ruby Under a Microscope を読んで Ruby 処理系の理解を深めることで、読者は次のような利点が得られるよ、と紹介しています。
あと、JRuby、Rubinius ではどうなっているか、という点も書いてあります。1 実装だけではないのでとても親切に思います。
なんと、この本は、Pat さんが 6 ヶ月休職して書き上げたそうです。凄いですね。
以降は、Ruby Under a Microscope の各章を紹介し、本書の内容を概観しようと思います。
パーサに関する内容が書いてあります。
主に VM の実行について書いてあります。 いやー、YARV ってこうやって動いてるんですねえ。 ちなみに、1.9 ベースであり、2.0 の構造とはちょっと違います。
オブジェクトの表現と、クラスやモジュールの表現について書いてあります。
ハッシュテーブル (Hash) について書いてあります。 3 章の内容もそうですが、RHG だとまず最初にこの辺のデータ表現の話をするんですよね。ソースコードを読むためにはこれらの知識が必要になるからだと思いますが、RHG と本書の性格の違いがわかって面白いですよね。
クロージャ (Ruby の Proc) について語る章ですが、いきなり Lisp の歴史から始まっていて驚きます。
今回もう 1 つ紹介したいのは 2012 年の年末に書かれた Ruby VM アドベントカレンダーです。書いたのは笹田耕一、つまり私です。アドベントカレンダーというよりは、単に日記のエントリー集です。
下記に全記事へのリンクを示します。
主に、Ruby 2.0.0 で VM に関係が深そうなところ、というか私が弄ったところをまとめたものです。Ruby VM と題したので、もうちょっと一般的な話を書こうかと思ったのですが、新機能紹介が多いものになってしまいました。
内容を分類すると次のような感じです。
一部、記事が忘却の彼方に忘れ去られているところもあり残念ですが、なるべく例を多めに作ったつもりですので、よかったら参考にして下さい。デバッグサポートまわりは、まだどこにも書かれていないんじゃないかな。
というわけで久しぶりの YARV Maniacs、今回は (今回も) 人の文献を紹介するという技で終わらせました。でも、それぞれ、力の入った資料 (とくに、Ruby Under a Microscope) なので、とっても参考になるんじゃないかと思います。
次はまた 2 年後だったりするんでしょうか。お楽しみに。
ささだこういち。Heroku, Inc. に転職しました。CRuby/MRI の開発者として雇われています。本当に CRuby/MRI の開発しかやっていないです。通称、フルタイムコミッタです。ありがたい話です。あ、時々 @ayumin に命令されて雑用をやってます。まぁ、いいか。