Clojure STM与Haskell STM有何不同?

Zub*_*air 32 haskell language-comparisons transactional-memory clojure stm

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

wil*_*vea 26

Clojure STM有三大独特功能:

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

  • 你是否也可以将非事务性读取的零开销添加到此列表中? (3认同)

scl*_*clv 17

对于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)

  • 同样值得注意的是,GHC的实施提供了关于副作用的交易安全性的编译时保证; 以及独特的`orElse`组合器,用于原子组合事务. (8认同)

Ale*_*ler 13

马克·福克曼做了的STM一般在奇怪的循环2009年一个非常详细的介绍(和Clojure的特别STM),你可以找到这里(文章和幻灯片在这里).我真的不知道任何其他资源(除了代码)以了解Clojure的STM如何工作.