2013-05-27 68 views

回答

3

nhc98指出,它支持ffi

的nhc98编译器包含了标准的外国功能接口,这也是在拥抱和GHC可用的实现。 nhc98的最新发布的版本实现了外部函数声明的最新标准语法,如在规定:http://www.cse.unsw.edu.au/~chak/haskell/ffi/

我不知道是否

兼容性说明

  • 支持调用约定是:ccall,noproto和cast。 (后两者是非标准的,见下文。)不受支持的调用约定是:stdcall,jvm,dotnet,cplusplus。
  • 外部导入“包装器”尚不支持。
  • 注解不安全在nhc98中没有特别的含义;它纯粹是ghc的速度优化。
  • 将外部导出规范视为导出函数的实际类型签名。你不允许第二个(可能更通用)类型的签名。
  • 因此,您无法导出任何需要类字典的函数。

意味着支撑仅仅是局部的,或者这些是否是可选的东西,但nhc98是,据我所知,除了GHC仅有的编译器,支持至少一大块FFI规范的。 (拥抱不是一个编译器,而是一个解释器,它支持[大部分] FFI规范,因为那是当拥抱开发结束时[2006]。)

但是,请注意,nhc98不再被维护太多。

在主动维护的实现中,jhcUHC根据各自的主页仅支持FFI(原始外部导入)的一小部分,因此GHC基本上没有竞争。

0

所有的Haskell实现支持FFI,如通过定义,它不是一个Haskell编译,如果它不执行语言规范(其包括the FFI

这意味着拥抱,GHC,nhc98至少

+2

但是GHC不是Haskell编译器,因为例如报告指出允许相互递归模块,但GHC不完全支持它们。 – scravy