gpt4 book ai didi

haskell - GHC 核心为 "bytecode"?

转载 作者:行者123 更新时间:2023-12-03 14:03:22 27 4
gpt4 key购买 nike

据我了解,GHC(Glorious Glasgow Haskell 编译器)将 Haskell 编译为“Core”,然后将该 Core 编译为机器代码。将 Haskell 程序作为 GHC Core 分发是否可行,就好像它是“字节码”一样?这样的分配会有什么好处吗?为什么或者为什么不?

最佳答案

这不切实际; GHC Core 不可移植。例如,在 32 位机器上,64 位算术被编译为核心中的外部函数调用,但在 64 位机器上,它使用 native 机器字算术。

更重要的是,GHC 实际上无法读取 Core;它可以以几种格式打印出来,但是没有实际的代码可以读取这些格式中的任何一种。我不确定这样做是否会有任何重大障碍,但多年来一直有记录的情况,所以我不希望很快出现支持。

总的来说,Core 也非常接近 Haskell。目前尚不清楚您将从以这种形式分发代码中购买什么。将 Haskell 转换为 Core 所需的时间通常会少于链接最终程序等操作所需的时间,因此它通常根本不会节省太多编译时间。

此外,与 Haskell 源代码相比,对 Core 的检查更少(尽管我认为 -dcore-lint 会减轻这种情况),并且有效地对其进行沙箱化会很困难(有 Safe Haskell,但没有 Safe Core)。当然,如果字节码的来源是可信的,这些缺点就不适用了。

基本上,GHC Core 在很大程度上是一种编译器的中间语言,而不是为此目的而设计的可移植字节码格式,如 Python 字节码和 JVM。

附带说明一下,GHC 确实具有 GHCi 使用的字节码解释器。那里使用的字节码也是不可移植的,因此与 GHC 在正常操作中产生的机器码相比,我没有想到任何优势。

关于haskell - GHC 核心为 "bytecode"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9187340/

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