『RubyでつくるRuby』

「超ライトなsicp」という噂を聞いたので読んだ。

Rubyを用いて最小構成の(Min)Rubyインタプリタを作りましょう、という本。
著者はRubyコミッターの人らしい。『型システム入門』やら『純粋関数型データ構造』やらの翻訳もしている。これらの本を現段階で読んでもちんぷんかんぷんだろうが、いずれは読まねばと思っている。

インタプリタを作ると言ってもどうやればいいのか。著者はその手順を非常にわかりやすく整理している。

  1. .rbファイルを読み込み、コードの文字列を取得する。
  2. 取得した文字列を抽象構文木に変換する。
  3. 抽象構文木を評価する。

これを実装すればよい。しかも1と2に関しては著者が作成したライブラリが面倒を見てくれるので、読者が(写経しながら)実装するのは3だけということになる。

この本の長所

  • 抽象構文木の説明がアホみたいにわかりやすい。
  • バカでも真面目に取り組めば「インタプリタをつくったった」という謎の自信が身につく。

この本の短所

  • 先述の1と2の作業を端折っているので、やや物足りない。まああったらあったで一番重要な3にたどり着く前に飽きてしまう自信はある。
  • 本とは直接関係ないが、Rubyのデバッグが辛い。普段の仕事で主に使っているC#だと、型に守られている安心感がある。Rubyではそうはいかず、型を頼りにできないまま霧の中をさまようかのような感じにはまいった。まあでも入れ子配列(リスト)を作るのがドチャクソ楽チンなのとかは動的型付けならではでいいっすね。

あと気になっていることは、少し前に読んでいた『アンダースタンディングコンピュテーション』にも当てはまるが、読めば読むほどに「RubyじゃなくてLispでよくね?」と思ってしまうことだ。Lispならコードの構造が抽象構文木のそれとほぼ一致しているし、高階関数やらも楽に取り扱えるだろうし。
まあでも以下のような議論があるようだし、そう考えるとこれらの本がLispではなくより大衆的なRubyを題材にしたのは自然なのだろう。

https://masatoi.hateblo.jp/entry/20101102/1288654204

それにしても最近妙にRubyと関わることが多いな。