我试图找到Clojure所谓的STM与Haskell中实现的STM之间的区别。除了实际的语言语义差异之外,我有点困惑,因为Rich Hickey在演讲中说Clojure的STM实现与其他任何东西都有很大不同,但我不理解除语言选择之外的差异。
答案 0 :(得分:25)
Clojure STM有三大独特功能:
答案 1 :(得分:16)
对于Haskell STM,请参阅SPJ的论文:http://research.microsoft.com/en-us/um/people/simonpj/papers/stm/
特别使用的是“可组合内存事务”和“具有数据不变量的事务内存”。 GHC实施的STM确实不是MVCC。我不记得所有的实施细节,但我的理解是,论文中的描述与目前GHC中的描述并没有什么不同。
(请注意,MVCC,在clojure或其他地方,可能会出现写入偏斜 - 请参阅此处:http://en.wikipedia.org/wiki/Snapshot_isolation)
答案 2 :(得分:12)