我可以将OCaml GC与LLVM GC接口一起使用吗?

时间:2015-08-11 12:06:12

标签: garbage-collection ocaml llvm

对于我的PHP LLVM后端,我想试用OCaml GC。是否可以将它与LLVM一起使用?特别是:

  1. OCaml GC是否解耦到足以在编译器之外使用?
  2. LLVM GC界面是否足够成熟,可以与OCaml GC一起使用?

2 个答案:

答案 0 :(得分:2)

虽然看起来将OCaml GC和Frankenstein撕成一个不同的项目似乎相对容易,但我不确定这是否是你想要在实践中做的事情。

OCaml垃圾收集器考虑到了designed with a functional programming style,这种GC架构可能是PHP等语言的一种责任,它通常在功能样式中使用

如果您准备这样做,那么我建议要么等待几个月才能将多核支持接受到OCaml编译器/运行时,或者使用其中一个试图为OCaml带来多核支持的项目(其中最严重的可能是OCamllabs上的人this project。目前,OCaml GC缺乏真正的多核支持,虽然在实践中这并不是一个很大的问题,但有些人似乎没有它就能生存。

答案 1 :(得分:2)

这不应该代表太多的工作,因为OCaml GC已经在LLVM中以某种方式处理:http://llvm.org/docs/GarbageCollection.html#the-erlang-and-ocaml-gcs。这意味着堆栈帧描述符被正确地发出用于函数调用(不是最小的,但是这应该通过当前的LLVM GC处理开发来改进)。旧版本的LLVM文档告诉我们OCaml gc没有使用写入障碍,这是错误的。因此,您应该小心确保生成的代码对于分配是正确的。

对于LLVM GC接口,当前的接口非常受限制,并且不允许生成非常高效的代码,但这应该足以在等待下一个版本时进行原型设计,该版本应包含该方面的一些重要更改。