通过程序变换从 Push/Enter 到 Eval/Apply
编程语言
2016-06-22 v1
摘要
Push/enter 和 eval/apply 是函数式语言实现中使用的两种调用约定。在本文中,我们探讨了以下观察:当考虑多参数函数时,push/enter 和 eval/apply 约定下的栈行为分别类似于列表数据类型的两种特定实现:常规 cons 列表和一种具有惰性连接的列表。沿着 Danvy 等人关于定义解释器与抽象机之间函数对应关系的思路,我们利用这一观察将实现 push/enter 的抽象机转换为实现 eval/apply 的抽象机。我们表明,我们的方法足够灵活,能够将 push/enter 的 Spineless Tagless G-machine(即 GHC Haskell 编译器的语义核心)转换为其 eval/apply 变体。
引用
@article{arxiv.1606.06380,
title = {From Push/Enter to Eval/Apply by Program Transformation},
author = {Maciej Piróg and Jeremy Gibbons},
journal= {arXiv preprint arXiv:1606.06380},
year = {2016}
}
备注
In Proceedings WoC 2015, arXiv:1606.05839