ccall 和 capi FFI 调用约定之间的区别
Difference between ccall and capi FFI calling conventions
我发现使用 GHC's FFI 有两个调用约定:ccall
和 capi
。文档没有太多关于这两个约定的信息。它们之间有什么区别,我应该什么时候使用它们?一个比另一个快吗?
ccall
是正常的方式。它通过直接链接在(通常用 C 编写的)库中定义的符号来工作。
capi
是一个适用于 C 源代码级别的 ghc 扩展。这就是为什么它可以访问在 ABI 级别不存在的东西,例如宏。 (我不知道它是如何实现的,但我猜它会生成一个小的 C 函数包装器,然后在幕后使用 C 编译器对其进行编译。)
我会尽可能使用 ccall
。它是语言标准的一部分,总体上看起来不那么 "magical"。
我发现使用 GHC's FFI 有两个调用约定:ccall
和 capi
。文档没有太多关于这两个约定的信息。它们之间有什么区别,我应该什么时候使用它们?一个比另一个快吗?
ccall
是正常的方式。它通过直接链接在(通常用 C 编写的)库中定义的符号来工作。
capi
是一个适用于 C 源代码级别的 ghc 扩展。这就是为什么它可以访问在 ABI 级别不存在的东西,例如宏。 (我不知道它是如何实现的,但我猜它会生成一个小的 C 函数包装器,然后在幕后使用 C 编译器对其进行编译。)
我会尽可能使用 ccall
。它是语言标准的一部分,总体上看起来不那么 "magical"。