GHC核心为“字节码”?

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


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

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

核心与Haskell相当接近; 目前还不清楚以这种形式分发代码需要购买什么。 将Haskell转换为Core所花费的时间通常会少于执行链接最终程序所需的时间,因此通常不会节省编译时间。

此外,对Core进行的检查比Haskell源代码少(尽管我认为-dcore-lint可以缓解此问题),并且有效地对其进行沙盒检查会很困难(这里有Safe Haskell,但没有安全核心)。 当然,如果字节码的来源是可信的,则这些缺点不适用。

基本上,GHC Core非常适合编译器的中间语言,与为此目的设计的便携式字节码格式相反,如Python字节码和JVM。

作为旁注,GHC确实有一个字节码解释器,正如GHCi所使用的。 这里使用的字节码也是不可移植的,所以与正常操作中GHC产生的机器码相比,我可以想到没有任何优势。

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

上一篇: GHC Core as "bytecode"?

下一篇: Why can't GHC reason about some infinite lists?