Lisp in Small Piecesを読んだ

読み終わったのは3週間くらい前だけど、ゴールデンウィークで普段よりは時間があるので、読んだ感想など書いてみる。

Lisp in Small Pieces

Lisp in Small Pieces

Lisp in Small Pieces (LiSP) は、Lispインタプリタ/コンパイラの実装について説明した本で、500ページ11章で12種類のインタプリタと2種類のコンパイラを紹介している。目次は以下のとおり。

  1. The Basics of Interpretation
  2. Lisp, 1, 2, ... ω
  3. Escape & Return: Continuations
  4. Assignment and Side Effects
  5. Denotational Semantics
  6. Fast Interpretation
  7. Compilation
  8. Evaluation & Reflection
  9. Macros: Their Use & Abuse
  10. Compiling into C
  11. Essence of an Object System

特徴的だと個人的に思っているのは、9章でマクロの実装について触れている点で、これとCへのコンパイラについての章(10章)があることがこの本を買おうと思った直接の理由だった。

しかし、実際に読んでみると、どの章も興味深く、おもしろい内容だった。

特に、6章 Fast Interpretation で、5章で登場する denotational interpreter (表示的意味論を Scheme に直訳して得られるインタプリタ?)に対して高速化のための改善をしていくうちに、あれよあれよという間にバイトコードへのコンパイラまであと一歩というところまで行ってしまう、その過程を見ているのがなかなかおもしろかった。SICPでは、このあたりは天下り的に与えられていたりして、腑に落ちない部分が多かったけど、LiSP のおかげでだいぶ解決されたような気がする。

ただ、5章 Denotational Semantics はわりと本気で表示的意味論について説明しているので、ちょっと敷居が高いかもしれない。また、お値段もお高めなので買うのは結構渋ってしまうかもしれない。

しかし、読み終えた頃にはきっと「自分でコンパイラが作れそうだ」と実感できるくらいにはなっていると思う。だから、たとえば「SICPを最後まで読んでみたはいいけど、最後の演習問題を解ける気がしない」っていう人なんかは読んでみる価値があると思う。