Microsoft 的新 F# 编程语言提供了函数式编程(一流的词法闭包和尾调用)与高效的并发垃圾收集器的强大组合,可以轻松利用多核。
OCaml、Haskell、Erlang 以及我所知道的所有免费 Lisp 和 Scheme 实现都没有并发 GC。Scala 和 Clojure 有一个并发 GC,但没有尾调用。
因此,似乎没有结合这些功能的开源编程语言。那是对的吗?
Microsoft 的新 F# 编程语言提供了函数式编程(一流的词法闭包和尾调用)与高效的并发垃圾收集器的强大组合,可以轻松利用多核。
OCaml、Haskell、Erlang 以及我所知道的所有免费 Lisp 和 Scheme 实现都没有并发 GC。Scala 和 Clojure 有一个并发 GC,但没有尾调用。
因此,似乎没有结合这些功能的开源编程语言。那是对的吗?
Erlang 有一个无共享模型,其中每个进程都有自己的垃圾收集器。您是否认为这不是并发,这取决于您。但随着进程数量的增加,它肯定可以很好地扩展。
最新版本的 GHC 支持并行 GC。请参阅发行说明。
Scala 有一些尾递归优化。但是要获得完整的SISC 方案。
不是您问题的真正答案,但据我所知,F# 使用标准的 .NET 垃圾收集器,它不是并发的;GC期间所有线程都停止。
编辑:我的错误,在多处理器模式下存在并发 GC。
据说 Java 正在添加尾调用。当这种情况发生时,clojure 会得到它们。同时,您可以使用循环/递归机制手动获取它们。