我发现使用GHC的FFI有两种调用约定:ccall和capi.这些文档没有太多关于这两个公约的信息.它们之间有什么区别,我什么时候应该使用它们?一个比另一个快吗?
ccall是正常的方式.它通过直接链接到(通常用C语言编写)库中定义的符号来工作.
capi是一个ghc扩展,适用于C源代码级别.这就是为什么它可以访问ABI级别不存在的东西,比如宏.(我不知道它是如何实现的,但我猜它会生成一个小的C函数包装器,然后它会在幕后用C编译器编译.)
我会ccall尽可能使用.它是语言标准的一部分,看起来不那么"神奇".
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |