将Haskell程序编译为C

11

我有一个Haskell程序,我正在尝试将其编译为C。

我查看了这个SO帖子,但在那里没有得到答案。

quicksort [] = []
quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater)
  where
    lesser  = filter (<  p) xs
    greater = filter (>= p) xs

main = print(quicksort([5,2,1,0,8,3]))

这是我尝试的方法:

$ ghc -C main.hs

我得到的是:

ghc: the option -C is only available with an unregisterised GHC
Usage: For basic information, try the `--help' option.

这有点奇怪,因为当我查看帮助文档时,看到以下内容:

-C 在生成 C (.hc 输出) 后停止


-C 在生成 C (.hc 输出) 后停止


5
请注意,你可以使用外部函数接口编译Haskell代码生成目标文件和C语言头文件,然后将它们链接到C程序中。这种方法比直接将Haskell代码转译成C源代码要好得多。 - leftaroundabout
2个回答

12
编译成C语言现在是一种特殊的技巧,主要用于在新架构上进行引导。因此,默认情况下不支持该功能。GHC Wiki提供了一些构建启用此功能的指令;标准构建和启用编译成C语言的构建之间的主要区别是使用--enable-unregisterised标志进行配置。还可以查看构建GHC的完整页面列表--这相当复杂,因此如果您决定这样做,您会需要将其放在手边。

11

那个选项很古老了。

几年前,GHC曾经通过C编译,但在普通情况下不再这样做。现在,GHC使用自己的本地代码生成器(或LLVM)代替生成C代码并使用gcc进行编译。

从技术上讲,可以将GHC本身编译为“未注册”的方式,以重新启用该选项。这需要从源代码构建GHC的自定义版本。然而,这将产生一个相当低效的C代码。实际上,这只有在交叉编译或将GHC移植到新架构时才会这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接