使用GHC在Haskell中不能从.hs输出到.hc

当我听说GHC可以向C输出文件时,我很感兴趣。

格拉斯哥Haskell编译器(GHC)在许多不同的体系结构上编译为本地代码 - 以及ANSI C--使用C--作为中间语言。

所以我安装了Haskell平台并创建了一个简单的.hs文件。

main = putStrLn "Hello, World!"

并根据手册。

-C生成C(.hc文件)后停止

现在我运行命令。

ghc -C test.hs

但它不会创建.hc文件,也不会停止中间编译。

$ ls
test.exe  test.hi  test.hs  test.o

如果您想了解Haskell程序如何在较低级别执行,最好研究Core而不是( -ddump-simpl )。 在那之后,即使是专家,代码也变得很难阅读。 主要原因是GHC的堆栈和堆管理得到了硬编码。 因此,低级生成的Haskell代码基本上是一个小小的过程,在间接跳转到未知位置之前完成复杂的指针运算。 最糟糕的意大利面代码。

为了提供实际答案 - 您可以通过查看LLVM后端来生成C:

ghc -ddump-llvm -ddump-to-file hello_world.hs
opt -O2 hello_world.dump-llvm | llc -O2 -march c -o hello_world.c

但结果只能说明这一点。 即使是微不足道的fib功能将需要大约80行代码。

如果您对血型细节非常感兴趣,我会建议您阅读Edward Z. Yang的博客文章。 他基本上遍历整个编译流程,涉及翻译一段简单的Haskell代码。

链接地址: http://www.djcxy.com/p/5695.html

上一篇: Can't output from .hs to .hc with GHC in Haskell

下一篇: How to install java jdk 7 on Snow Leopard