コンピュータプログラミングの概念・技法・モデル

という本を買ってみた:http://www.amazon.co.jp/dp/4798113468
CTMとか呼ばれる本ですね.計算機プログラムの構造と解釈(SICP)のように,プログラミング一般に関する教科書です.
で,SICPschemeを使っているのと同様,CTMではOZという言語を使っています.(処理系の名前はMozart)

OZは論理型言語の影響が強いので,ちょっとマニアックな感じかな? 単一化とか普通に出てくるし.(あ,シンタックスは割と普通ですが.)僕は並列論理プログラミングのバックグラウンドがあるから,懐かしいねぇという感じだけど.

内容は良くできた教科書という感じ.並行性を基本的な要素として扱っているので,その辺はSICPよりも良いかも.(あ,この訳書は,なぜか並行(Concurrent)と並列(Parallel)を逆に訳しているので注意.)

ぱらぱらとめくっていて面白いなぁと思ったのは,遅延実行を実現するのに,"ByNeed"という言語機能を核言語に取り入れた所.ByNeedは,変数と関数を指定して結びつけます.そして,「この変数が要求されたらこの関数を実行する」という意味になります.まぁ,遅延実行を実装しようとすると,こうなるとは思うんだけど,それが言語機能として表に出てくる所が面白い.

データフロー変数だと,値が決まっていない時にその値を参照しようとすると,実行がサスペンドして値が決まるまで待つけど,この「待つ」際の実現は,変数にサスペンドした処理を結びつける必要があります.値が決まったら起こさないといけないので.

で,よく考えると,ByNeedがやっていることも,データフロー変数に処理がサスペンドすることも,「変数と処理を結びつけて,トリガ(値の要求 or 値の決定)があると,結びつけられていた処理を開始する」という意味では,実現としては同じなんだなぁと.

いずれにせよ,色々なプログラミングパラダイムについて一つの言語で説明されているので,なかなか面白い本だと思います.厚いけど.(900ページ…)