C是否有类似Clojure的STM库

Vi.*_*Vi. 9 c clojure stm

是否有任何库将refs,atoms和agents引入C代码?

C还有结构共享库吗?

mik*_*era 5

据我所知没有.

即使有,恕我直言,它不会特别适合C代码:

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

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

任何足够复杂的C或Fortran程序都包含一个特殊的,非正式指定的,错误缠身的,一半Common Lisp的缓慢实现.

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