我必须遵循我尝试编译为C的Haskell程序。 我看过this SO post,但在那里找不到答案。
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输出)后停止
答案 0 :(得分:7)
编译到C现在是一个特殊用途的技巧,主要用于在新体系结构上进行引导。因此,默认情况下不支持。 The GHC wiki提供了一些在启用此支持的情况下自行构建GHC的说明;标准版本和可编译为C的版本之间的主要区别是使用--enable-unregisterised
标志进行配置。另请参阅full list of pages on building GHC -非常复杂,因此,如果您决定这样做,则希望保持方便。
答案 1 :(得分:3)
那个选择很古老。
服务器年前,GHC曾经通过C进行编译,但在正常情况下不再这样做。如今,GHC不再生成C代码并使用gcc
对其进行编译,而是使用其自己的本机代码生成器(或LLVM)。
从技术上讲,可以将GHC本身编译为“未注册”以重新启用该选项。这需要根据其源代码自定义构建GHC。但是,这将产生效率很低的C代码。务实地说,只有在交叉编译或将GHC移植到新体系结构时才这样做。