是否有除ghc之外的其他编译器支持Haskell外部函数接口,如The Haskell 98 Foreign Function Interface 1.0 An Addendum to the Haskell 98 Report中所述?
答案 0 :(得分:3)
nhc98编译器包含标准外部函数接口的实现,也可以在Hugs和ghc中使用。最新发布的nhc98版本实现了外部函数声明的最新标准语法,如下所述:http://www.cse.unsw.edu.au/~chak/haskell/ffi/
我不确定是否
合规性说明
- 支持的调用约定是:ccall,noproto和cast。 (后两者是非标准的,见下文。)不支持的调用约定是:stdcall,jvm,dotnet,cplusplus。
- 尚未支持外国进口“包装”。
- 注释unsafe在nhc98中没有特殊含义;它纯粹是ghc的速度优化。
- 外部导出规范被视为导出函数的实际类型签名。您不允许使用第二种(可能更通用的)类型签名。
- 因此,您不能外部导出任何需要类字典的函数。
意味着支持只是部分支持,或者这些支持是否是可选的,但据我所知,除了GHC之外,nhc98只支持至少一大块FFI规范。 (拥抱不是一个编译器,而是一个解释器,它支持[很多] FFI规范,因为拥抱开发已经结束[2006]。)
但请注意,nhc98不再维护得很多。
在积极维护的实施中,jhc和UHC仅支持FFI(原始外国进口)的一小部分,根据各自的主页,所以GHC基本上没有竞争。< / p>
答案 1 :(得分:0)
所有Haskell实现都支持FFI,因为根据定义,如果它没有实现语言规范(包括the FFI),它就不是Haskell编译器。
这意味着Hugs,GHC,nhc98至少。