寻找通过异常描述尾递归优化的引用

时间:2011-09-24 14:51:18

标签: exception lisp scheme interpreter tail-call-optimization

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

优于标准技术的优点是应用于递归解释器以获得尾递归优化的有限更改。缺点可能是时机。

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

2 个答案:

答案 0 :(得分:4)

见Eli的回答。但是为了增加更多的上下文,Baker的Cheney on the M.T.A.技术是一个众所周知的技巧,用于实现正确的尾递归,它使用C堆栈作为连续帧和其他对象的托儿所(如代际GC)。这种技术不是让堆栈保持较小(如尾部递归的大多数实现那样),而是允许堆栈增长一段时间,然后每隔一段时间用大跳跃(longjmp,execption等)清除它。 。在清除堆栈之前,将所有实时内容复制到堆中。

只要您能够并且愿意跟踪堆栈并将堆栈中的对象复制到堆上,那就可以正常工作。 Eli引用的文章(广义堆栈检查的延续)是关于将技巧调整到“托管”平台,你无法直接检查堆栈。

答案 1 :(得分:3)

请参阅Pettyjohn等人的Continuations from Generalized Stack Inspection和Joe Marshall的相关addendum

(“解释”,这些日子意味着什么,与主题无关。)