这根本不是一个真正的 Haskell 问题,但我想有很多追随 Haskell 标签的人会知道这个问题的答案......
我目前正在努力思考如何将函数的输入和输出以及局部变量和临时值都保存在同一个堆栈上,但最终在退出时得到正确的堆栈布局。
通常堆栈提供 Push 和 Pull 操作,它们仅修改最顶部的堆栈项。有时,您还可以随机读取堆栈下方的项目。(这解释了如何将变量保留在那里并随机访问它们。)但通常更改堆栈大小的唯一方法是从其中拉出项目。如果您想将项目保留在堆栈顶部并删除其下方的内容,那并不是很好。
真正的编译器是如何做这些事情的?