YARV Maniacs 【第 11 回】 最近の YARV の事情 (original) (raw)

初稿:2013-02-24

書いた人:ささだ

はじめに

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

ruby-under-a-microscope.png

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 の各章を紹介し、本書の内容を概観しようと思います。

1. Tokenization, Parsing and Compilation

パーサに関する内容が書いてあります。

2. How Ruby Executes Your Code

click.png

主に VM の実行について書いてあります。 いやー、YARV ってこうやって動いてるんですねえ。 ちなみに、1.9 ベースであり、2.0 の構造とはちょっと違います。

3. Objects, Classes and Modules

オブジェクトの表現と、クラスやモジュールの表現について書いてあります。

4. Hash Tables

ハッシュテーブル (Hash) について書いてあります。 3 章の内容もそうですが、RHG だとまず最初にこの辺のデータ表現の話をするんですよね。ソースコードを読むためにはこれらの知識が必要になるからだと思いますが、RHG と本書の性格の違いがわかって面白いですよね。

5. How Ruby borrowed a decades old idea from Lisp

クロージャ (Ruby の Proc) について語る章ですが、いきなり Lisp の歴史から始まっていて驚きます。

Ruby VM アドベントカレンダー

今回もう 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 に命令されて雑用をやってます。まぁ、いいか。

バックナンバー


  1. なぜなら、私がサクサク読み進められたから。
  2. その割には、紹介している内容はちょっと深すぎるようにも思いますが。