ccall和capi FFI调用约定之间的区别

时间:2016-06-07 19:02:51

标签: haskell ffi

我发现使用GHC's FFI有两种调用约定:ccallcapi。这些文档没有太多关于这两个公约的信息。它们之间有什么区别,我什么时候应该使用它们?一个比另一个快吗?

1 个答案:

答案 0 :(得分:6)

ccall是正常的方式。它通过直接链接到(通常用C语言编写)库中定义的符号来工作。

capi是一个ghc扩展,适用于C源代码级别。这就是为什么它可以访问ABI级别不存在的东西,例如宏。 (我不知道它是如何实现的,但我猜它会生成一个小的C函数包装器,然后在后台用C编译器编译。)

我尽可能使用ccall。它是语言标准的一部分,看起来更少"魔法"总的来说。