「言語のしくみ」の感想

少し時間が経ってしまったが、正月休みに Matz 著の「言語のしくみ」を読んだので、思ったことを書き残す。

本の内容について

Matzが設計・実装している言語 Streem を元に、プログラミング言語のデザイン(文法, 言語機能, etc...)からCによるインタプリタ実装までを事細かに語っている。
ただし(いい意味で)至る所で話が脱線する。

  • SmalltalkLisp など他の言語ではどうか、という紹介
  • Ruby の設計過去話やら反省やら
  • UNIXでのソケットプログラミング
  • CSV の標準仕様(のような何か)

数え上げたらキリがないくらい、色んな話題に触れている。
でも1章からいきなりdirect threaded codeの実装が出て来るのはやりすぎだと思う。

「Matz が何を考えているか」を語るのも一つの目的となっているようで、エモさについては極めて高いと思う。 ただしそれと同じ密度でCによる実装コードが収録されているので、ただエモいだけの本にはなってない。 例えるならウォッカを日本酒で割ってるような濃さ(試したことはない)。

実装自体はまだ手を抜いている部分(GC とか)も見受けられるが、実装の解説はかなり丁寧だと思う(誤植が目立つので脳内補完は必要)。
言語処理系の実装で切って離せない構文解析・データの内部表現・評価器などはもちろんだが、

  • 時刻やCSVパースなど、実用上は必要だがこの手の解説では省略されがちなライブラリの実装
  • Streemの目玉のイベントループ・パイプライン処理機能

など、(少なくとも日本語では)なかなか見かける機会が少ない解説もある。

また、実装と解説が平行しているので、途中で文法設計を見直したりリファクタリングする、という工程が挟まるのも珍しい(とても現実的で良いと思った)。

思ったこと

自分はこの本を読んでいる間ずっと青木峰郎著の「Ruby ソースコード完全解説」(通称: RHG)が頭によぎっていた。
RHG は CRuby 1.7 のソースコードをかなり詳細に解説している、これまたマニアックな本である。

自分は大学3年の春休みにこの本に出会い、もともと興味があった言語設計・実装に完全に魅了された。
RHGで得た知識は間違いなく自分の血肉となっているし、自分にとっての RHG は今の自分を作ったとも言えるバイブル的な存在である。

扱っている対象や著者のスタンスこそ違うが、この「言語のしくみ」は徹底的に実装に拘り事細かに解説しているところが RHG に似ているな、と思った。
「また RHG みたいな本に出会いたいなぁ」と頭のなかにぼんやりとあった欲求が満たされた(「Ruby Under a Microscope」は RHG と被っている部分もあり、ちょっと物足りなかった)。

あと読み終わったら急激にコーディング欲が高まった。 で、まだインタプリタGCまで含めて実装したことがないことを思い出したので、最近空いている時間に作ってる。

はじめて知ったこと

思い出せる限りでは

  • Steeem の言語仕様詳細
  • CLOS のマルチメソッドとメソッド結合
  • V7 の存在
  • NaN boxing
  • UNIX の時刻事情
  • CSV の標準(なんてものはないということ)

辺りはこの本を読んではじめて知った。
知ったからどうというわけではないけど、ストレングスファインダーで学習欲と収集心がベスト5に入っている身としては、単純に知れたことが嬉しい。

まとめ

  • エモさと実装を両立している
  • マニアックなのは否めないけど、「プログラミング自体が好き」「色んな言語に興味がある」という人は必読で良いと思う
  • GC, マルチスレッドプログラミング, ロックフリーアルゴリズム, ソケットプログラミングの基礎勉強にもなると思う
  • 読むと実装欲が刺激される