SmalltalkとScalaのトレイトの違い
Smalltalkは教育用のScratchくらいで殆ど使われていないが、そのコミュニティー(というかケント・ベック)からはデザインパターンやテスト駆動といった(少なくとも出てきた当時は)汎用的で革新的なアイデアが出てきたわけだ。Haskellもそういう立ち位置のイメージがある。
2013-03-01 17:48:44@nebutalab TraitsとかClassboxes、DCIアーキテクチャはいずれも2000年以降ですから比較的最近になってからも、他でも使えるアイデアを創出していますね。教育分野以外への導入実績もあるのでぜひ知っておいて下さい→http://t.co/tAY9PvG33w
2013-03-01 18:46:04@nebutalab 例えばScalaなら http://t.co/uTFP2z5djb の孫引きで http://t.co/cGjXosl4G7 にリーチできます。ただScalaのtraitは実質はmixinなのでオリジナルのTraitsの解説を読むと少々混乱するかもしれません
2013-03-03 13:30:38@kmizu http://t.co/j4nXOQ1q28 このあたりの説明でしょうか。Traitの使い方のチュートリアルとかあればいいですね。多重継承とどう違うのかなどを知りたいです。
2013-03-03 13:43:28@nebutalab その辺ですね。あとは、Scalaのtraitはself-type annotationとか、コンポーネント間の依存関係を指定するための指定子もあったりして(そして、それが重要な用途になっている)、mixinだけが強調されるとそれもちょっと違うかなという。
2013-03-03 14:05:05@nebutalab Traitsも結局(広い意味での)多重継承の実現方法のひとつなので、基本的に独自の使い方というのはありません。複数のtraitをuseしたときにいったん平坦化されるところがmixinとの大きな違いで、useする順序というのを考えなくてもよいのがその特徴です。
2013-03-04 10:17:09@kmizu @sumim scalaのtraitに出来てsqueakのにできないことについて比較記事を書きたいところですね。やっぱりこういうものは自然言語で説明すると誤解が生まれるので、コードを出してその挙動で説明した方がよいのかも。
2013-03-04 19:30:58@nishio .@sumim そうですね。その辺、一度整理してみたいですね…。squeakのtraitは私も詳しいとはいえないので、コード例出し合ってお互い理解深めるといい感じですかね。
2013-03-05 22:59:40@kmizu 「scalaのtraitは単なるmixin」という表現の語弊のあるところはどこだと思いますか?僕は型に関するところかと思っていますが。
2013-03-06 11:05:31@nishio 概ねYESです。といっても、Scalaが静的型付き言語だから違う、という話ではなく、trait自体に他の型への依存性を記述するための機能 (self type annotation)等があるから、ですね。
2013-03-06 12:21:19@sumim squeakのtraitで「トレイトXはトレイトYとセットでなければクラスの構成要素になれない」というトレイト感の依存関係を宣言するのってどうするのでしょうか?クラスブラウザを見てもよくわかりませんでした。
2013-03-06 14:57:15@kmizu / “learn_language/trait at master · nishio/learn_language · GitHub” http://t.co/Jqyu9Pn4ou
2013-03-06 15:36:06@kmizu @nishio 書いてみました。タイトルはあえて釣りです。→Scalaのトレイトは実はトレイトじゃなくただのミクスイン http://t.co/G8L5KqIES6
2013-03-06 16:02:44@nishio 動的型言語向けのシェリルのトレイトにはそういう制約はなかったと思います。要はトレイトをJavaのインターフェイス的に使いたいという話ですよね。それが必要で、実現しようと思えばできなくはないと思いますが別の試みかと。参考:http://t.co/K2gjayHy4i
2013-03-06 16:12:57@sumim なるほど、そういう機能はないということですね。もう一点、squeakのtraitにnewを送ると普通にインスタンスが作られてしまうようですが、これは問題ないのでしょうか?
2013-03-06 16:21:09@sumim 補足ですが、先ほどの「トレイトXはトレイトYとセットでなければクラスの構成要素になれない」は、同じくシェリルらの2006年のACMの方(fine-grade reuse)の白丸メソッドのことを言いたかったのです。
2013-03-06 16:46:39@nishio 問題なくはないですが、Smalltalk では抽象クラスでも普通に new できてしまうこともざらなので、そういう危機意識がそもそも欠落しているのだと思います。
2013-03-06 16:47:38