SICPをプログラミングの本だとして批判したら、そうじゃねーだろという反応が多く帰ってきた。
いまSICPを読むのは時間の無駄
じゃあ、SICPはどういう本か。
LISPを使って仮想マシンを作って、LISPコンパイラを作って実行させて、プログラムがどのように動くかを勉強する本だ。
遅延評価したりガベージコレクションしたりする仮想マシンを作って、LISPプログラムをその仮想マシンで動かせるようにコンパイルする。LISPは、サンプルプログラムとしては機械語のように使われている。そこで作成されるプログラムが扱う対象としては高級言語として使われている。
LISPはアセンブラであり高級言語というバランスをもてるコンパクトな言語で、そこにSICPがLISPを使っている必然性がある。
そういう本なのに、プログラミングの本として批判してたから、違うだろと言われたわけだ。
ただ、現実問題として、プログラミングの本としてとか、関数型言語に触れるためにSICPを読む人は多くいて、また、仮想マシンをつくりはじめる4章に入る前に挫折してしまう人も多くいる。
4章に入らないのなら、SICPである必要はまったくなく、そういう意味を含めて「時間のむだ」と書いた。
昨日の時点では、そこだけを意識してエントリを書いてしまった。
仮想マシンで動かすためのコンパイラを作るという本なら、たとえばこういう本がある。
- 作者: 今城哲二,岩沢京子,千葉雄司,布広永示
- 出版社/メーカー: オーム社
- 発売日: 2004/09/01
- メディア: 単行本
- 購入: 2人 クリック: 21回
- この商品を含むブログ (13件) を見る
この本は、プログラムがどのように解釈されどのように動くかを説明しているという点で、SICPの4章5章に対応していると言えるのだけど、仮想マシンを書籍の中で構築するわけではなくJavaVMを使っている。また、プログラムを記述する言語がJavaなので、動かしながら実装するという具合にはなっていない。
実行時最適化など新しいことも扱われていて、読みやすい本ではある。
実際に動かしながら言語処理系と仮想マシンを作っていくという本は、日本語の本でSICP以外には知らない。
SICPをやるならば、最後までやる必要があり、最後までやるなら、SICPはいい本だ。