GHC的设计基于STG,STG代表"无脊椎,无标记G机"。
G机是“图缩减机”的简称,它定义了如何实现惰性执行。未求值的推迟(thunk)被存储为表达式树,执行程序需要将其归约(reducing)到正常形式。(树是无环图,但Haskell的广泛递归意味着Haskell表达式形成一般图(graph),因此采用图缩减而非树缩减。)
“无脊椎”和“无标记”的含义不太清楚。
我认为,“无脊椎”指的是函数应用节点没有“脊柱”。相反,你有一个对象来命名所调用的函数并指向它的所有参数。这个理解正确吗?
我曾认为“无标记”指的是构造节点没有标记构造ID,而是通过跳转指令解析case语句。但现在我不确定这个理解是否正确。相反,它似乎指的是节点没有标记其评估状态。谁能澄清这些解释中哪一个(如果有)是正确的?