3

Scala traits Haskell type classとC++0x Conceptsの違いは何ですか?

以下の例のように、オブザーバーが抽象メンバー receiveUpdate を宣言する場合、オブザーバーは実際には「匿名」型または構造型です。

package observer
trait Subject {
   type Observer = { def receiveUpdate(subject: Any) }
   private var observers = List[Observer]()
   def addObserver(observer:Observer) = observers ::= observer
   def notifyObservers = observers foreach (_.receiveUpdate(this))
}
4

1 に答える 1

7
  • 概念は C++0x には導入されていません。ドラフト仕様の最後のいくつかのバージョンで削除されています。
  • 元々、パラメトリック ポリモーフィズム (一般的な制約、"forall x such that x is an...") の有界定量化と、あまりアドホックではない完全な型推論言語にアドホック ポリモーフィズムを提供するメカニズムのために設計された型クラス方法。
  • 概念はまた、パラメトリック ポリモーフィズムの有界定量化のためのものであり、概念のオーバーロードを提供します。これにより、C++のテンプレート関数の部分的な特殊化の欠如が補われます。これらは、もともと C++ のテンプレート エラー メッセージの問題に対処するために設計されたものです。
  • トレイトは、多重継承を使用せずに動作をミックスするメカニズムです。

そのため、共通点があるのはそのうちの 2 つだけですが、それほど多くはありません。それは、概念と型クラスです。この論文では、すでにこの 2 つの比較が行われています: C++ の概念と Haskell の型クラスの比較

于 2010-06-23T21:47:05.383 に答える