«前の日記(2004年12月06日) 最新 次の日記(2004年12月08日)» 編集

Matzにっき


2004年12月07日 [長年日記]

_ [OOP]Traitsについて再び

OOPSLA 2004の「Applying Traits to the Smalltalk Collection Classes」を読み返し、 Traitsについて考えてみる。

で、しばらく考えるにRubyのようなOpenなクラス/モジュールを持つ動的言語では、 TraitsよりもMix-inの方が適しているという結論に達した。

しかし、Traitsの演算は魅力だ。Moduleへ演算を追加することで、 Mix-inのまま、Traitsの利点を導入することは理論的には可能のような気がするが、 普通に実装すると実行効率が下がりそうな気がする。

内部的に多重継承を素直に実装するのが一番単純だが、 CLOSのように毎回クラスリストをソートするのは避けたい。

いろいろ考えるに、

  • モジュールに変更タイムスタンプをつける
  • メソッド検索時にタイムスタンプの比較も行う
  • モジュールに対してメソッドの削除(exclude)演算を用意する。 あるいはモジュールのundefの挙動をexcludeにする。
  • モジュールから、そのモジュールから指定したメソッドをexcludeした新しいモジュールを生成するメソッド(exclude)を新たに定義する

ことで、Traitsの良さとMix-inの良さのいいとこ取りができそうだが、 タイムスタンプを格納する領域とか、excludeの効率の良い実装とか、 実現までには解決しなければならない問題がいくつかありそうだ。


«前の日記(2004年12月06日) 最新 次の日記(2004年12月08日)» 編集