【发布时间】:2020-08-09 00:46:54
【问题描述】:
我想在 OCaml 中实现 Linux/FreeBSD 的共享库,我需要它有 C 接口。这样我就可以实现各种语言的绑定。我有几个问题:
- OCaml 是垃圾收集的,我担心传递给外部代码的对象可能会被 GC'ed。是否可以禁用 GC?也许还有其他方法可以解决此类问题?
- 有没有办法编写像 C++ 的
extern "C"或类似的 OCaml 代码,以便将其公开为 C 符号? - 是否有任何类似的更适合编写 solib 的高级语言?我仍然需要用 C/C++ 编写语言编译器,因此将其移植到新架构会相对容易。
【问题讨论】:
-
a section in the manual 正好处理这个问题。你应该从那里开始。
-
你的最后一个问题是征求意见,因为格式不适合讨论,所以对 SO 不赞成。
-
@glennsl ,我阅读了手册,但据我了解,它建议将库包装到单独的 C 代码中,以实例化 OCaml,我试图避免这种情况。
-
恕我直言,您的要求是不可能的。如果您希望代码的行为与 C 完全一样(链接和内存分配),您几乎必须用 C 编写。OCaml 为函数选择自己的名称,避免 GC 会为任何非平凡的代码生成看起来很荒谬的 OCaml。所有这些都是恕我直言。
标签: ocaml ocaml-dune