Arantium Maestum

プログラミング、囲碁、読書の話題

Concepts, Techniques and Models of Computer Programmingを読みはじめた

過去何回かぱらっとめくったくらいで置いておいたConcepts, Techniques and Models of Computer Programmingという本を去年の終わりあたりに少し真面目に読み始めた。

なぜか時々「ポストSICP」と言われる本で、CSの根幹部分の一つを書き表した大作・名著である。関数型や論理型やオブジェクト指向などのいわゆるプログラミング言語パラダイム、あるいは並行性などの実行モデルなどが、どのような言語機構の組み合わせで可能になり、どのようなより粒度の細かい分類が可能で、どのような特性があり、どのような書き方・問題へのアプローチを可能とするのか、について書かれている。

どこらへんが「ポストSICP」なのかは個人的には謎だが。SICPと扱うテーマの範囲も違うし、プログラミング初心者向けとは到底思えないし、SICPを読み終わった後に必ず読むべき!という順序もあまりぴんとこないし・・・ 別に例えば先にCLRS読んでもいいしPAIP読んでもいいし、CTMCPSICPの次にくるべき理由は思い当たらない・・・

ともあれCTMCPは面白そうな本である。

マルチパラダイム言語Ozとその実行環境Mozartを使って様々なプログラミング概念を提示しているのだが、そのOzというのも

  • 抽象機械によるoperational semanticsが与えられている仕様が小さいOz kernel language
  • Oz kernel languageの上にsyntax sugarを重ねた実用言語

の二層にわかれている。章を追うごとにkernel languageを拡張、あるいはsyntax sugarを追加していくことで新しいパラダイムに対応していく。それによってどのような原子的な言語要素から各言語機構が立ち上がってくるのかを明確にしている。

よっしゃとりあえずまずは実装だ!ということで例によってOCamlでkernel languageを書き始めている。

github.com

今のところ数字と関数定義のところまでできていて、次はレコードの実装。それが済んだら第2章で説明されているもっとも簡単なkernel languageはできあがる。その後はsyntax sugarを載せてみたり、先の章のkernel language extensionを実装したりしてみる。

とりあえずレコードができたら実装内容や言語の特徴についていったん振り返ってまた記事を書きたい。