2

我已经在 python 和 sapid lisp 本身中实现了一个小的 lisp 解释器(谷歌代码中的 lisp )。或许它的主要特点是通过异常来实现尾递归和相互递归优化。此处的实施细节https://sites.google.com/site/sapidlisp/recursion-optimization

与标准技术相比,优势在于有限的更改适用于递归解释器以获得尾递归优化。缺点可能是时机。

我发现在 python 装饰器(http://code.activestate.com/recipes/474088/)中使用了类似的技术。现在把这项技术放在它的上下文中,我正在寻找描述这种 lisp 或其他解释语言的技术的参考资料。有什么资料吗?

4

2 回答 2

4

见以利的回答。但是为了添加更多上下文,Baker 的Cheney 关于 MTA技术是一个众所周知的技巧,用于实现适当的尾递归,该技巧将 C 堆栈用作延续帧和其他对象的苗圃(如在分代 GC 中)。这种技术不是保持堆栈很小(正如大多数尾递归的实现所做的那样),而是允许堆栈增长一段时间,然后longjmp每隔一段时间用一个大的跳转(,execption,等等)清除它。在你清除堆栈之前,你将所有的活动内容从堆栈中复制到堆中。

只要您能够并且愿意跟踪堆栈并将对象从堆栈复制到堆上,它就可以正常工作。Eli 引用的论文(Generalized Stack Inspection 的延续)是关于将技巧适应“托管”平台,在这些平台上您无法直接检查堆栈。

于 2011-09-25T12:05:55.953 回答
3

请参阅Pettyjohn 等人的 Generalized Stack Inspection的延续,以及 Joe Marshall 的相关附录

(“解释”,无论这些天是什么意思,都与主题无关。)

于 2011-09-25T10:59:50.740 回答