ガイ・スティールJrが Sun で開発中の新言語は Traits ベース


Derive Your Dreams 経由で。


http://research.sun.com/projects/plrg/fortress0866.pdf

Traits are named program constructs that declare sets of methods. They were introduced in the Self programming language, and their semantic properties (and advantages over conventional class inheritance) were analyzed by Schärli, Ducasse, Nierstrasz, and Black [23]. In Fortress, a method declared by a trait may be either abstract or concrete: abstract methods have only headers; concrete methods also have definitions. A trait may extend other traits: it inherits the methods declared by the traits it extends (except those that it overrides). A trait declares the methods that it inherits as well as those explicitly declared in its definition.


以下、Traits 情報……


Traits はブラックとシェルリが提案した、ミックスイン(多重継承)機構の一。くだんの文章では SELF に実装されていた、クラスの代替え的役割を担う同名の言語機能(traits)と混同されていますが、両者は別物で、たしか最初の実装は Squeak システムでのプロトタイピングでだったと思います。(同じ Traits という名前のミックスインがらみの機構ということでは、XEROX の Star システムおよびその記述言語の Mesa の拡張にもあったようです)

http://citeseer.ist.psu.edu/566972.html
http://www.iam.unibe.ch/~scg/Archive/Papers/Scha03aTraits.pdf


単一継承で起こりうる弊害の象徴的存在とも言える Smalltalk のコレクションクラスを、Traits を使ってすっきりとリファクタリングしてみせるという(机上の空論で終わりがちなこの手の提案にしては珍しく…)非常に実践的で、興味深い試みもなされています。

http://www.iam.unibe.ch/~scg/Archive/Papers/Blac03aTraitsHierarchy.pdf


Squeak システムにおける Traits についてはその後、サブセットの MiniTraits が SqueakMap で供給されていたりしたのですが、Squeak 3.9 の Smalltalk では、ついに本格採用のはこびとなりました(ただし、3.9 自体はまだα版)。ということで、Squeak に限って言えば、Smalltalk も晴れて(?)多重継承サポートです。w (いや、実際には 20 年以上前に Smalltalk の中の人のインガルスたちや、他のグループによる試みがあるのですけれどもね…)

http://minnow.cc.gatech.edu/squeak/3059


Traits の特徴のいくつかは、Ruby のモジュール機構にも取り込まれる可能性が示唆されています(ただ Ruby には、attributes.rb から改名した traits.rb という Traits とは関係ないライブラリがあるので、しょうしょう紛らわしいのですが…)。

http://www.rubyist.net/~matz/20060224.html#p02
http://www.rubyist.net/~matz/20041207.html#p01
http://www.rubyist.net/~matz/20040127.html#p02
http://www.rubyist.net/~matz/20040124.html#p01


Perl でも利用可能なようです(こちらも Traits とは別に一般的な意味で traits という単語が使われることがあり紛らわしいようです…)。

http://search.cpan.org/~ovid/Class-Trait-0.20/
http://d.hatena.ne.jp/squeaker/20040424#p1