具有并发垃圾收集器的函数式语言?

Jon*_*rop 4 concurrency garbage-collection tail-call

Microsoft的新F#编程语言提供了功能编程(一流的词法闭包和尾调用)与高效的并发垃圾收集器的强大组合,可以轻松利用多核.

OCaml,Haskell,Erlang以及我所知道的所有免费的Lisp和Scheme实现没有并发GC.Scala和Clojure有一个并发GC但没有尾调用.

因此似乎没有结合这些功能的开源编程语言.那是对的吗?

sve*_*son 7

Erlang有一个无共享模型,每个进程都有自己的垃圾收集器.你是否认为这不是并发性取决于你.但随着流程数量的增加,它确实可以很好地扩展.

  • Erlang如何处理从一个进程传递到另一个进程的数据?它是在每次转移时复制的吗? (2认同)

小智 5

最新版本的GHC支持并行GC。请参阅发行说明

  • 我也想注意到这一点,但并行和并发垃圾收集不是一回事。 (3认同)
  • 我不明白,如果你生成大量垃圾并且你不关心延迟(假设这是一个运行几个小时的分析程序,你只看最终结果),那么并行 GC 的速度如何增加(即,您花费更少的挂钟时间进行 GC)并不是“扩展”。当您为 GC 提供更多内核时,程序是否运行得更快(按挂钟时间计算)? (2认同)

Ste*_*rcq 0

这并不是您问题的真正答案,但据我所知,F# 使用标准 .NET 垃圾收集器,它不是并发的;GC 期间所有线程都会停止。

编辑:我的错误,多处理器模式下有并发GC。