C是否有类似Clojure的STM库

时间:2013-01-21 03:20:59

标签: c clojure stm

是否有任何库将refatomagent带入C代码?

是否还有C的结构共享库?

1 个答案:

答案 0 :(得分:5)

据我所知,没有。

即使有,恕我直言也不适合C代码:

  • 这些方法在很大程度上依赖于JVM来提供内存管理和垃圾收集。特别是结构共享意味着您无法轻易确定还有谁正在使用数据结构的特定块。因此,当结构组件的最后一次引用消失时,你真的希望自动GC清除它。
  • STM结构的实用性实际上是在并发情况中。在C语言中编写好的并发代码比在JVM语言中编写要好得多,在JVM语言中,线程支持在整个平台/库中普遍存在且更加一致。
  • 至少在Clojure中使用它们的方式,STM结构被设计用于函数式编程语言(即函数是纯粹的语言,通常通过编写代码来编写高阶函数和数据是不可变的)。例如用于更新原子的函数swap!本身就是一个更高阶函数。

虽然我并不是说如果你足够坚定,你就不能在C中编写功能风格的STM代码......虽然它不太适合,但你最终可能会重新发明像Lisp这样的东西。我想起了格林斯普的第十条编程规则:

  

任何足够复杂的C或Fortran程序都包含一个ad hoc,   非正式指定的,错误缠身的,缓慢执行的一半   Common Lisp。

基本上,使用正确的工具: - )