将Haskell程序编译为C.

Ore*_*lom 5 c haskell compilation

我必须遵循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]))
Run Code Online (Sandbox Code Playgroud)

这是我试过的:

$ ghc -C main.hs
Run Code Online (Sandbox Code Playgroud)

而我得到的是:

ghc: the option -C is only available with an unregisterised GHC
Usage: For basic information, try the `--help' option.
Run Code Online (Sandbox Code Playgroud)

这有点奇怪,因为当我看到帮助时,我看到了这个:

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

chi*_*chi 9

这种选择很古老。

多年前,GHC 曾经通过 C 进行编译,但在正常情况下不再这样做。gcc现在 GHC 不再生成 C 代码并使用 编译它,而是使用它自己的本机代码生成器(或 LLVM)。

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


Dan*_*ner 7

编译为C现在是一种特殊用途技巧,主要用于在新架构上进行引导.因此默认情况下不支持它.GHC维基有一些关于在启用此支持的情况下自行构建GHC的说明; 标准构建和允许编译为C的构建之间的主要区别是使用--enable-unregisterised标志进行配置.另请参阅有关构建GHC完整页面列表 - 它非常复杂,因此如果您决定这样做,您将希望保持这种方便性.