我想写一个OCaml库,它将被其他编程语言(如C或Python)使用。OCaml库的绑定和反省
我不知道它甚至是可行的,我想我需要放弃一些类型安全,并添加运行时检查到动态类型语言的接口。
它可行吗?有没有工具来实现这个目标来自动生成绑定?我认为像Corba这样的东西不适合ocaml ABI,但我可能是错的。
编辑:通过删除运行时要求,并使用只有语言有一个llvm前端,我可以使用llvm作为一个普通的ABI我猜,但它似乎棘手。
我想写一个OCaml库,它将被其他编程语言(如C或Python)使用。OCaml库的绑定和反省
我不知道它甚至是可行的,我想我需要放弃一些类型安全,并添加运行时检查到动态类型语言的接口。
它可行吗?有没有工具来实现这个目标来自动生成绑定?我认为像Corba这样的东西不适合ocaml ABI,但我可能是错的。
编辑:通过删除运行时要求,并使用只有语言有一个llvm前端,我可以使用llvm作为一个普通的ABI我猜,但它似乎棘手。
OCaml的FFI为interact with C code。绑定的代码必须用C语言编写,而不是用OCaml(它没有直接表示C值,而C用OCaml值表示)写入。我的建议是:
步骤(2)的理由是让步骤(3)尽可能小。从C端操纵OCaml值有点痛苦,尤其是你有可能与垃圾收集器的交互错误,这意味着段错误 - 再加上你没有得到任何类型的安全。所以你在C方面做的工作越少越好。
有一些项目可以为你做一些包装工作。例如CamlIDL,我认为Swig对OCaml有一些支持。但我从来没有使用过这些,所以我无法评论。
如果您知道您希望将接口转换为哪种高级语言,那么可能会有专门的桥接器不需要C步骤。例如,有些库可以直接与Python表示法(搜索Pycaml,不知道它们是如何进行战斗测试)或与Java运行时(OCamlJava项目)进行交互。一个C接口仍然是一个安全的选择,可以让其他人为他们自己的语言搭建桥梁。
这是可行的,但您需要了解涉及的主题,如GC的工作原理。 看一看:http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual033.html#toc148
您需要注意存根代码中的类型,但除此之外,您可以保持类型安全。