2007-11-14
■[CLOSチュートリアル] 2. 背景 
CLOS(一語で発音するなら "dross" 、二語なら "see-loss" のリズムで)とは "Common Lisp Object System" のことです。CLOSはGuy L. Steele, Jr.の「Common Lisp言語仕様」の初版が発行された後に追加されました。ANSI Common Lispが制定されてから10年後のことです。
CLOSの原型は、三つの章からなる仕様書でした。最初の二章は「APIのコンセプト」と「APIの関数」で、「Common Lisp言語仕様 第二版」の28章で見られます。この二章は後から追加されたものですが、ANSI仕様の基礎になりました。三章はメタオブジェクトプロトコルについて書かれていましたが、不完全だとみなされて(おそらく著者の判断でしょう)書籍には含まれませんでした。
このチュートリアルも完全ではありませんが、意図してそうしてあります。CLOSは様々な使い方があり、アプリケーションの数だけ拡張や再構成の機会があるくらいです(そのうちいくつかを「メタオブジェクトプロトコル」で紹介します)。このチュートリアルの目的は、90%のケースに対応できる10%のCLOSの原理を知ることで、初心者を卒業するにはこれで十分です。これからその10%である二つのマクロ defclass と defmethod を試していきます。
オブジェクトシステムに関して*1:これだけ言っておきます。このチュートリアルが終わるころには、CLOSについてある程度は理解してください(33の関数があるとか、8つのマクロがあるとか、新しい型があるとか、それとも難し過ぎたとか)。歴史的にも実装的にも、すべてのコンセプトは深く関連しています。しかしCLOSを使い始めると、コンセプト間の関連性にあまり意味がないことがわかります。そのときは必要な機能だけ取捨選択して使うといいでしょう。