gpt4 book ai didi

haskell - 无法在 Haskell 中使用 GHC 从 .hs 输出到 .hc

转载 作者:行者123 更新时间:2023-12-04 18:09:28 25 4
gpt4 key购买 nike

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

The Glasgow Haskell Compiler (GHC) compiles to native code on a number of different architectures—as well as to ANSI C—using C-- as an intermediate language.



所以我安装了 Haskell 平台并创建了一个简单的 .hs 文件。
main = putStrLn "Hello, World!"

并且按照说明书。

-C Stop after generating C (.hc file)



现在我运行命令。
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 行代码。

如果您真的对血腥细节感兴趣,我建议您通读 this blog post作者:Edward Z. Yang。他基本上介绍了翻译一段简单的 Haskell 代码所涉及的整个编译管道。

关于haskell - 无法在 Haskell 中使用 GHC 从 .hs 输出到 .hc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18207338/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com