GHC 的设计基于 STG,它代表“无脊椎、无标签的 G 机器”。
现在G-machine显然是“图缩减机”的缩写,它定义了惰性是如何实现的。未评估的 thunk 存储为表达式树,执行程序涉及reducing这些都归结为正常形式。 (Atree是一个无环图,但 Haskell 普遍的递归意味着 Haskell 表达式形成了一般形式graphs,因此是图缩减而不是树缩减。)
不太清楚的是术语“无骨气”和“无标签”。
I think“无脊椎”是指功能应用程序没有功能应用程序节点的“脊椎”。相反,您有一个对象,该对象命名被调用的函数并指向其所有参数。那是对的吗?
我认为“无标记”是指构造函数节点没有使用构造函数 ID“标记”,而是使用跳转指令解析 case 表达式。但现在我不确定这是否正确。相反,它似乎指的是节点没有标记其评估状态的事实。谁能澄清这些解释中哪一个(如果有的话)是正确的?
GHC 维基包含一个关于STG的介绍文章 https://ghc.haskell.org/trac/ghc/wiki/Commentary/Compiler/GeneratedCode马克斯·博林布鲁克写的:
STG 机器是世界领先的 GHC 的重要组成部分
哈斯克尔编译器。它定义了 Haskell 评估模型应该如何
在标准硬件上有效实施。尽管有这个键
但 GHC 用户普遍对其了解甚少。这
本文旨在概述 STG 机器的现代、
基于 eval/apply 的、指针标记的化身,由一系列简单的
显示 Haskell 源代码如何编译的示例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)