2010-06-23 38 views
3

斯卡拉特質Haskell類型類和C++ 0x概念有什麼區別?斯卡拉特質和C++概念之間的差異

就像下面這個例子裏觀察者聲明一個抽象成員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)) 
} 
+1

我在斯卡拉發現了haskell Eq和Ord Type類的比較 http://blog.tmorris.net/the-power-of-type-classes-我不明白哪一個更強大,爲什麼 – skyde 2010-06-24 17:29:33

回答

7
  • 概念不是來的C++ 0x,他們已經在規範草案的最後幾個版本中刪除。
  • 最初設計用於參數多態性的有限量化的類型類(泛型約束,「forall x使得x是...」)以及一種機制爲少量完全類型推斷的語言提供即席多態性特別的方式。
  • 概念也用於參數多態性的有界量化並提供概念重載,這彌補了C++中模板函數缺少部分專業化。它們最初設計用於處理C++中的模板錯誤消息問題。
  • 特徵是不使用多重繼承的混合行爲機制。

所以他們只有兩個有共同的東西,但不是太多,那就是Concepts和Type-classes。本文中已經有兩個比較:A comparison of C++ concepts and Haskell type classes

+0

我不認爲#3是一個大問題,因爲每個人只是使​​用靜態的朋友類實現,並獲得相同的效果。另外,僅僅允許部分規範的功能,而不是貫穿整個概念的事情就更容易了。 – Puppy 2010-06-23 22:05:42

+0

@DeadMG:什麼問題?得到什麼樣的效果?您可以使用標籤類型調度技術來模擬模板函數的部分特殊化,這正是目前迭代器概念和「專用」算法的通用算法所完成的工作,具體取決於迭代器/容器類型特徵。無論如何,我從來沒有試圖進入任何有關問題的辯論,這只是與主題不同。 – 2010-06-23 22:16:05