10

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

是否还有结构共享库供 C 伴随?

4

1 回答 1

6

据我所知没有。

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

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

虽然我并不是说如果你有足够的决心,你就不能用 C 编写函数式 STM 代码……但它并不适合,而且你最终可能会重新发明像 Lisp 这样的东西。我想起了 Greenspun 的第十条编程规则:

任何足够复杂的 C 或 Fortran 程序都包含一个临时的、非正式指定的、充满错误的、缓慢的 Common Lisp 一半的实现。

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

于 2013-01-21T04:15:50.140 回答