『Ruby のしくみ』を読んだ

『Ruby のしくみ』という本を読みました。

Rubyのしくみ -Ruby Under a Microscope-

Rubyのしくみ -Ruby Under a Microscope-

この本は XP 祭り 2015 のクロージングで、初参加者への贈呈品としていただいたものです。ありがとうございます。

どういう本か

『Ruby のしくみ』は Ruby のコードが処理系に読み込まれ、実際に実行されるまでの処理について説明している本です。処理というのは、おもに以下のようなものです。

  • 字句解析/構文解析
  • メソッドの探索と呼び出し
  • ブロック構文の実現
  • クラス/オブジェクトの実現
  • メタプログラミングの実現
  • ガベージコレクション

バージョン 1.9 以降の MRI (Matz' Ruby Interpreter) では、コードを YARV という仮想マシンが読める命令列にコンパイルして実行しています。本書では、YARV が組み込まれた MRI を前提としています。とはいえ、MRI 以外にも JRuby と Rubinius についてもそれぞれ章が割かれています。

説明は図が多用されており、処理系中でのオブジェクト間の接続や包含関係など、複雑な概念をわかりやすく説明するために役立っています。

感想

Ruby が分かっていれば読み進められる本ではありますが、内容はディープです。ちゃんと読むと時間がかかります。言語処理系の偉大さが感じられます。また、コラムでは C で書かれた処理系の実装に踏みこんだ説明があるので、そこを理解しようとすれば C の知識も若干必要だと思います。通常の説明でもポインタの概念を使った図があったりするので C の知識があったほうが理解は早いと思います。

個人的には、継承やモジュールのインクルードとか、ブロックのクロージャとしての動作をしくみから理解できたのは、満足感があり良かったです。こういう話を知っていることと、Ruby のユーザとして実際に使われるソフトウェアのコードをちゃんと書けることは別の話だとは思っています。が、ふだん自分が使っているもののしくみを知りたいタイプの人にはおすすめです。また、しくみからわかっていれば、モジュールまわりで期待したメソッドが呼ばれてないコードを書いたりしないという良い効果もあるのではないかという気もします。