Clojure STM与Haskell STM有何不同?

时间:2010-12-30 06:47:29

标签: haskell clojure language-comparisons transactional-memory

我试图找到Clojure所谓的STM与Haskell中实现的STM之间的区别。除了实际的语言语义差异之外,我有点困惑,因为Rich Hickey在演讲中说Clojure的STM实现与其他任何东西都有很大不同,但我不理解除语言选择之外的差异。

3 个答案:

答案 0 :(得分:25)

Clojure STM有三大独特功能:

  1. 实现MVCC快照,避免事务在读取失效时重新启动。
  2. 确保对读写的引用提供了一种对资源获取顺序的手动控制。
  3. 具有显式通勤功能,可减少可交换写入的重试次数。

答案 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)

Mark Volkmann在Strange Loop 2009上对STM进行了非常详细的介绍(特别是Clojure的STM),您可以找到here(文章和幻灯片here)。我真的不知道任何其他资源(除了代码)以了解Clojure的STM如何工作。