为什么GHC与gcc和g ++一起分发?

Ein*_*Ein 11 haskell ffi ghc

在Windows上,GHC与gcc和g ++一起发布,例如在ghc-7.6.3\mingw\bin.从下载页面,在Windows二进制下载中也注意到,Windows的构建"还包括对编译C++文件的支持."

我可以想象,分发这些编译器只是为了方便,因为Windows没有附带任何编译器.我还可以想象使用FFI 是必要的,但我不是百分百肯定的.例如,尽管GHC将使用它自己的gcc/g ++编译器编译.c和.cpp文件,但GHC还提供了选择所需编译器和链接器的选项.事实上,你可以指定自己的gcc/g ++,它似乎有效.你甚至可以切GHC圈外远一点的通过编译.C/.cpp文件提前,并且只调用GHC编译Haskell代码,并使用链接这一切-pgml(虽然整体效果是一样的使用-pgmc-pgml) .

现在这似乎有效,但它是否依赖于您指定的纯运气-pgml-pgmc成为与GHC所考虑的兼容的gcc版本?换句话说,当我使用FFI时,我真的只应该编译并用GHC调用链接所有内容吗?

Don*_*art 11

GHC通常与许多/几个版本的GCC兼容(使用邪恶的漫游者时会出现不兼容性).

如果您尝试使用其他C编译器,您将遇到一些低级别问题(标志,asm格式).

请注意,最近的GHC会弃用C后端而支持LLVM后端,这对于日常的Haskell开发来说有点没有用.

  • 所以,如果我已经包裹着我解决这个头,在"C后端"和"LLVM后端"(和"本地代码生成器")都是指一个阶段不久产生的目标文件的每个哈斯克尔模块之前.邪恶的管家只是C后端的一部分.然后排除Ç后端,可以预计与GCC的对象文件(从.C/.cpp文件生成)GHC的对象文件的兼容性(来自名为.hs文件)---为附近GCC型式的一些未指定的范围内.但是对于任何后端(包括LLVM?),如果使用非GCC编译器,则会遇到这些低级问题. (2认同)