- 3.1 OVERVIEW OF LOCKING
- 用語と概念の整理。
- locks, seize, release, busy, free, owner。
- Simple lock, Null lock。
- 用語と概念の整理。
- 3.2 DEFINING THE KINDS OF OBJECTS-CLASSES
- クラスの設計。lock, simple-lock, null-lock。
- 用語の整理。built on, is a drect superclass of, is a direct subclass of, basic class
- basic classを導入するメリット。
- (typep obj 'lock)で、チェックできる。
- 名前付け、を統一特性として全てのロックに付与することができる。
- デフォルトの振舞を定義できる。
- (typep obj 'lock)で、チェックできる。
- lockクラス、simple-lockクラス、null-lockクラスを定義。
- :documentation
- :reader, :writer, :accessor。
- :writerとsetf。
- クラスの設計。lock, simple-lock, null-lock。
- 3.3 CREATING NEW OBJECTS-INSTANCES
- make-instance。
- constructor functions.
- constructor functionsを作ることを推奨。
- type-of, typep, subtypep。
- make-instance。
- 3.4 DEFINING THE INTERFACE-GENERIC FUNCTIONS
- lambda-lists, congruent。
- 総称関数はクラス名を含めた方がよい。reset、ではなくreset-lock。genericすぎると名前が衝突。
- generic functionsはa protocolを成す。
- protocolは、振舞からlockのsemanticsを規定している。
- protocolは、考え方であり、CLOSのメカニズムではない。
- lambda-lists, congruent。
- 3.5 DEFINING THE IMPLEMENTATION-METHODS
- argument と parameterは違う。
- specialized parameters。
- applicable methods。
- "Rule of method applicability"
- without-process-preemption, process-wait, *current-process* の定義。
allegroでは、次のよう?
(defun without-process-preemption (&body body)
(funcall #'without-interrupts body)) - set-ifマクロを定義。
- methodsを定義。
- argument と parameterは違う。
- 3.6 SPECIALIZING THE BEHAVIOR OF LOCKS
- print-object。print,prin1,printc,write,formatなどなど、print-objectを使っている。
- allegroでは、(system:memref l 0 0 :unsigned-natural) ?
- print-objectはエラーを吐くべきではない。
- basic classes - default methods。
- 既存の総称関数のメソッドで済ませられるときは、そうすべき。
- print-object。print,prin1,printc,write,formatなどなど、print-objectを使っている。
- 3.7 ANALYZING THE INHERITANCE OF LOCKS
- "Rule 1 of class precedence: A class always has precedence over its superclasses."
- generic dispatch。
- "Rule 1 of class precedence: A class always has precedence over its superclasses."
- 3.8 EXTENDING THE LOCKING PROGRAM
- mixin class, aggregate classes。
- deadlock。
- ordered lock。
- ordered-lock-mixinを定義。
- :type
- ordered-lockとordered-null-lockを定義。
- mixin classはbefore-methodやafter-methodで振舞を記述することが多い。
- aggregate classにメソッドを定義することは極力さける。それがプログラムのモジュラー性を維持する。
- "Rule 2 of class precedence: Each class definition sets the precedence order of its direct superclass."
- after-method: most-specific-last。
- ordered lockの振舞を実装。
- process自体がclassになっていて、どのlockを所有しているかを持てる形もあるが、ここではそれはa hash tableで管理する。
- ordered locksのメソッドは、beforeで定義する。このbeforeはhigher lockを所有しているかのチェックをしてもってればsignalを上げるという形にする。すると既存のprimary methodそのままでordered lockがいける。
- 同様に、seizeとreleaseにafterでメソッドを足すことにより、ordered-lock-mixinに対する追加的な振舞(処理)を記述する。
- mixin class, aggregate classes。
- 3.9 HOW CLIENT PROGRAMS USE LOCKS
- 今さらだが、describeは普通の関数(non generic)なので、describe-objectにメソッドをつくる。
- 今さらだが、describeは普通の関数(non generic)なので、describe-objectにメソッドをつくる。
- 3.10 REVIEWING THE LOCK CLASSES
- OOプログラムを説明する際のポイント。
- クラスの一覧。
- それぞれのクラスが提供するslotsとmethods。
- class precedence list。
- クラスの一覧。
- ここの"contribute"の使い方は違和感あり。こういうものなのかな。
- OOプログラムを説明する際のポイント。
- 3.11 THE EXTERNAL AND INTERNAL PERSPECTIVES
- externalとinternalでメソッドなどを分類。
- externalとinternalでメソッドなどを分類。
- 3.12 GUIDELINES ON DESIGNING PROTOCOLS
- ガイドラインの5項目を紹介。
- ガイドラインの5項目を紹介。
2008年2月5日火曜日
3 Developing a Simple CLOS Program: Locks
2008年2月2日土曜日
2 Elements of CLOS Programs
- 前説
- CLOSの構成要素は、classes、instances、generic functions と methodsであり、これらが密接に関係している。
- CLOSの構成要素は、classes、instances、generic functions と methodsであり、これらが密接に関係している。
- 2.1 CLASSES AND INSTANCES
- CLOSプログラミングはclassの定義からはじまる。
- a class は a COMMON LISP typeである。そのclassのオブジェクトをinstanceという。
- CLOSのinstanceのアイデンティティの考え方は、そもそものLisp objectsのそれと合致している。
- CLOSプログラミングはclassの定義からはじまる。
- 2.2 SLOTS
- classの構造はslotsで表現される。slotsはaccessorでread/writeされる。
- slotsには、local slots と shared slots がある。
- classの構造はslotsで表現される。slotsはaccessorでread/writeされる。
- 2.3 SUPERCLASS
- classからclassを作る。元のclass(component class)をsuperclassという。できたclassは、structureとbehaiviorを継承する。
- superclassの対義語はsubclass。
- superclass、subclassの関係は数珠繋ぎにできる。直近のsuperclassをdirect superclassという。
- classからclassを作る。元のclass(component class)をsuperclassという。できたclassは、structureとbehaiviorを継承する。
- 2.4 GENERIC FUNCTIONS
- instanceを操作するときは、generic functionsを用いる。
- generic functionsは、利用者からみると、通常のCL関数と同じようである。
- generic functionsがインターフェイスを定め、実装はmethodsでやる。この点が通常のCL関数と異なる。
- どのmedthodを呼ぶかを判断する機構は、generic dispatchと呼ばれる。
- instanceを操作するときは、generic functionsを用いる。
- 2.5 METHODS
- 前章とおなじ。
- 前章とおなじ。
- 2.6 METHOD ROLES
- メソッドにはrolesがある。
- メソッドには、primary methodsとauxilaly methodsがある。
- auxilaly methodsには、before-methodsとafter-methodsとaround methodsがある。
- primary methodsが主たる機能を担う。
- auxilaly medhodsは副作用を担うことが多い。
- methodsは継承される。
- 継承と、primary,auxilalyの兼ね合いとが、methods間の作業分担を形成する。
- メソッドにはrolesがある。
- 2.7 THE CONTROLLER OF INHERITANCE
- 2つのsuper classes が競合する特徴をもっていた場合、inheritanceはどうなるか?
- a class precedence list に従って、precedenceが決まり、それがinheritanceを決める。
- a class precedence list は、class定義のあり様によってきまる。
- more specific なら more prior。
- 2つのsuper classes が競合する特徴をもっていた場合、inheritanceはどうなるか?
- 2.8 SUMMARY OF THE CLOS MODEL
- 特になし。
- 特になし。
- 2.9 HOW CLOS EXTENDS COMMON LISP
- defstructとCLOSの比較。
- 良好な接続。classesはtypesと同じように扱える。
- CLOSの方が柔軟。
- defstructとCLOSの比較。
登録:
投稿 (Atom)