SICPの価値

SICPをプログラミングの本だとして批判したら、そうじゃねーだろという反応が多く帰ってきた。
いまSICPを読むのは時間の無駄


じゃあ、SICPはどういう本か。
LISPを使って仮想マシンを作って、LISPコンパイラを作って実行させて、プログラムがどのように動くかを勉強する本だ。
遅延評価したりガベージコレクションしたりする仮想マシンを作って、LISPプログラムをその仮想マシンで動かせるようにコンパイルする。LISPは、サンプルプログラムとしては機械語のように使われている。そこで作成されるプログラムが扱う対象としては高級言語として使われている。
LISPアセンブラであり高級言語というバランスをもてるコンパクトな言語で、そこにSICPLISPを使っている必然性がある。


そういう本なのに、プログラミングの本として批判してたから、違うだろと言われたわけだ。
ただ、現実問題として、プログラミングの本としてとか、関数型言語に触れるためにSICPを読む人は多くいて、また、仮想マシンをつくりはじめる4章に入る前に挫折してしまう人も多くいる。
4章に入らないのなら、SICPである必要はまったくなく、そういう意味を含めて「時間のむだ」と書いた。
昨日の時点では、そこだけを意識してエントリを書いてしまった。


仮想マシンで動かすためのコンパイラを作るという本なら、たとえばこういう本がある。

コンパイラとバーチャルマシン (IT Text)

コンパイラとバーチャルマシン (IT Text)

この本は、プログラムがどのように解釈されどのように動くかを説明しているという点で、SICPの4章5章に対応していると言えるのだけど、仮想マシンを書籍の中で構築するわけではなくJavaVMを使っている。また、プログラムを記述する言語がJavaなので、動かしながら実装するという具合にはなっていない。
実行時最適化など新しいことも扱われていて、読みやすい本ではある。


実際に動かしながら言語処理系と仮想マシンを作っていくという本は、日本語の本でSICP以外には知らない。
SICPをやるならば、最後までやる必要があり、最後までやるなら、SICPはいい本だ。