@uents blog

Code wins arguments.

SICP 読書ノート#70 - 第4章 まとめ

途切れ途切れながらも半年かかって4章が終わりました。終盤はゴニョゴニョしましたが…

あらためてSICPがどのような本か、高橋征義さんのブログでの以下の言及が素晴らしいです。

少なくとも私にとってSICPとは、「プログラム」そして「プログラミング」という営為の見方を変えるもの、もっと言うと世界に対する見方、すなわち「世界観」を与えてくれるものなのです。

その世界観とは何か。ずばりまとめてみましょう。

・「新たなプログラムを作るということは、新たなプログラミング言語を作ることである」

・「世界はプログラムで表現できる」

・すなわち、「世界とは、ある種のプログラミング言語処理系である」

これです。これ。プログラミング言語好きにはなんと都合のいい世界観でしょう。でも、わりとそういう読み方を素直に許してくれるような本だと思うんですよ。

この「すべてのプログラム・世界はある種の処理系という世界観」にものすごく共感したのを覚えています。特に4章を読んでいくうちに「言語処理系のユーザーから言語処理系の設計者になってしまうことが、ソフトウェアエンジニアの技術向上には大いに役立つのではないか」という考えに至り、僕の中でSICPを読む目的がより鮮明になりました。

また、4章では、超循環評価器、継続を用いた非決定性計算、多方向性計算による質問システムのように様々な処理系が登場しますが、こういった処理系の上で、図形言語、銀行口座、デジタル回路シミュレータ、論理パズル、質問言語などのより実世界のモデルに近い処理系が動いているわけで、プログラミングの世界とはまさに処理系の抽象化を重ねて構築されているわけです。今までもそういう構築が成されていることは頭の中のイメージできているつもりでしたが、実際に手を動かして学ぶことでそれらがより明確になってくれた気がします。

しかも、これらを実装する中で、データや手続きによる抽象、環境モデル、遅延評価、ストリームなど知識も顔を出します。これらの要素ひとつひとつはプログラムを作る上でも重要ですが、処理系を作る上でも非常に重要であるいう点もおもしろいと思います。

ただ、1〜3章と比べて抽象レベルが格段に上がったためか、理解があやふやな感は正直否めません。それでも処理系の設計思想や大まかな概念は掴めたことは、自分の中でとても大きいです。

5章はレジスタマシンの実装をするようですが、これまでの流れを汲み取ると、ゴールはレジスタマシン上でScheme処理系を動かすことになるでしょう。個人的には未知の領域ですが、何処まで行けるか楽しみです。


※「SICP読書ノート」の目次はこちら