«前の日記(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の効率の良い実装とか、 実現までには解決しなければならない問題がいくつかありそうだ。

お名前:
E-mail:
コメント:
[]

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

track feed Matzにっき Creative Commons License This work is licensed under a Creative Commons License.