我想知道 Clojure 怎么可能已经实现了软件事务内存并且没有看到任何问题,而微软没有完成 C# 的工作并注意到一些问题使得实现此处描述的 STM 不切实际:http: //www.bluebytesoftware.com/blog/2010/01/03/ABriefRetrospectiveOnTransactionalMemory.aspx
请问有什么想法吗?
我想知道 Clojure 怎么可能已经实现了软件事务内存并且没有看到任何问题,而微软没有完成 C# 的工作并注意到一些问题使得实现此处描述的 STM 不切实际:http: //www.bluebytesoftware.com/blog/2010/01/03/ABriefRetrospectiveOnTransactionalMemory.aspx
请问有什么想法吗?
Clojure 几乎从影响语言设计和语言使用方式的语言开始就开始使用 STM,以使他们的 STM 实用。C# 必须从现有的语言和现有的使用方式开始,这导致了一个更困难的问题。最重要的区别是Clojure 的 STM 从语言核心的不可变数据开始,然后在其之上构建身份概念,而 STM 在身份概念之上构建。还值得注意的是,它们有许多不同种类的 STM,而 clojure 的 STM 非常不同。
STM有许多不同的方法。这是一个非常广泛的主题,例如“类型系统”:一种方法很容易成功,而其他方法由于各种不同的原因而失败。
Clojure 的 STM 有一些设计决策,使其在恕我直言,比以前的方法更实用和有效:
ref
和类似的)。这使得它比许多早期的 STM 方法更简单、更集中的设计(这包括 Microsoft 的方法,至少如上面链接的文章中所述)由于这些设计决策,Clojure 的 STM 与以前的 STM 方法截然不同,我认为成功是因为其新颖的设计。下面的视频有点陈旧,但如果您想大致了解它的工作原理,则非常棒:
http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey