netail.net
自作フリーソフトや,ゲームに関する雑記を公開してます.
日記はソフトウェア工学の論文ネタが中心です.
最近のお知らせ (古いものはこちら)
2002-07-16 古い日記からの変換データ [長年日記] ▲
_ 論文 ▲
ECOOP 2002 に出ていた Dyamically Composable Collaborations with Delegation LayersKlaus Ostermannを読む.
Collaboration 単位での再利用を提案した論文.Runtime AOP みたいな雰囲気で,実行時に collaboration (アスペクトによく似ている)を結合する.
各クラスの実装に相当する部分をオブジェクトのdelegationで(一種の Decorator パターン?)で実現しているところがえらい.実際に使えるようなコンパイラ作るのは大変そうだけど.
_ JGL ▲
Java Generic Library,Recursion Software Inc. が開発した Java 用の STL みたいなものか.有料な時点で使う気なし.とりあえず JDK 1.5 の Generics を待つことにする.
http://www.recursionsw.com/products/jgl/jgl.asp
_ YAML ▲
Ruby で YAML4R が実装されたっていうので見てみた.オブジェクトを可読性の高いテキストにシリアライズできるらしい.バイナリフォーマットと違って気楽に読み書きできるのは嬉しい.オブジェクトの中身をデバッグしたいときとかに便利?手動で書き換えようとしたら死にそうだけど.
http://www.yaml.org/
_ self problem ▲
論文を読んでて遭遇したキーワード.Broken Delegation とも言うらしい.
複数のオブジェクトがかたまって1個のオブジェクトを構成する場合(Decorator パターンなんかもその一種?)A の一部であるような B がいるが,そのオブジェクトを表す "self" はA の中であっても B の中であっても A を指さなければならない.しかし,ほとんどの言語では,B のコンテキストでは self がB を指してしまうという問題.
int A::foo() { return b.foo(); }int A::hoge() { return 1; }int B::foo() { return this->hoge(); }int B::hoge() { return 0; }a.foo() = b.foo() = a.hoge() となってほしいが,実際にはa.foo() = b.foo() = b.hoge() となってしまう.厄介なバグになる可能性が高そう.