『Ruby でつくる Ruby』を読む

このところ Rails 本以外の Ruby 本があまり出ないので、Rubyist としてはつまらないところもあるのですが、出る本は『プロを目指す人のための Ruby 入門』(このブログでの感想)などのように、いい本があります。本書は Ruby コミッターでもある通称「まめさん」、遠藤侑介さんが ASCII.jp に連載した記事を書籍化したもので、ミニ Ruby インタプリタMinRuby)を Ruby で実装することで、Ruby やプログラミングを学ぼうという本です。

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門

RubyでつくるRuby ゼロから学びなおすプログラミング言語入門

 
一口にプログラミングといってもいろいろな考え方があると思いますが、とりあえず(手続き型言語の)基本は次のように整理できるかもしれません。

  • 「変数」の概念
  • 条件分岐
  • ループ(繰り返し)
  • 関数(あるいはメソッド、サブルーチンなど)

おおよそこれらがわかれば、プログラミングは一応できるということになるでしょうし、これらを自由に操ることはそう簡単ではないともいえるでしょう。ただし、「ループ」は「条件分岐」や「関数の再帰呼出し」で代替できるともいえます。本書は、「抽象構文木」の処理を基本にして、この「変数の処理」「条件分岐」「関数」を実装することで、ミニ Ruby インタプリタを実装し、「ブートストラップ」(ミニ・インタプリタ自身をミニ・インタプリタで実行する)までもっていくことを解説します。

むずかしそうですか? いや、それがじつにクリアなんです。初心者の実装がむずかしいパーサー(あるいはパーザー)は Gem として事前に用意されているので、インタプリタ実装のおもしろいところだけを堪能できるわけです。自分のような初心者でもすみずみまでわかる、きわめてわかりやすい本でした。まあ自分は初心者かつ素人といっても数年間の Ruby プログラミングの経験がありますが、半年くらいの経験者でも充分わかると思います。(読書会に最適な本ではないでしょうか。)例えば「抽象構文木」とか「関数の再帰呼出し」とか「変数のスコープ」とか、むずかしそうに思う人もいるでしょうが、これらが実例によって知らぬ間に(?)解説されていきます。楽しいイラストもたくさんあって、気楽に読めますし。で、ブートストラップできるインタプリタが、(Gem の恩恵があるとはいえ)最終的にたった118行で実装できてしまうのです。

いや、言語の実装っておもしろいじゃないですか。初心者の Rubyist なら読まなきゃソンなくらいですよ!


それにしても、遠藤さんの最終的なコードには Ruby 特有の便利メソッドが一切使われていませんが、きれいで惚れ惚れするシンプルさですね。こうした「骨格」だけになっても、RubyRuby らしさは一目瞭然な気がします。やたらとアクロバティックなコードだけが Ruby ではないと思っていますし、ここぞというところで「決める」のがよい Ruby コードかとも思っています。


追記(7/28)
時々読み返していますが、ホントにおもしろい本ですね。これってどうやって実装しているのかなと思って読み返すと、すごく簡単にやっているので驚いてしまいます。やっぱりプログラミングはデータ構造とアルゴリズムが決定的で、これらをうまく選ぶとじつにきれいに実装できるものだな。著者の遠藤さんが、言語実装のいちばんおもしろいところを伝えたいと仰っていましたが、まんまと(?)うまく乗せられたなあという感じ。まあ parse は最初から Gem で用意されているのだけれど、それにしたってすごいですよ。入門書の好著じゃないかな。
 これに乗せられて、schemeRuby で実装とかしたいなあと思ってしまった。まあ僕のレヴェルではなかなかむずかしいだろうけれど、たぶんネットに実装例がいろいろあるのじゃないかな。scheme 実装ってよく課題であるみたいですものね。