Exception 正在查找通过异常描述尾部递归优化的引用

Exception 正在查找通过异常描述尾部递归优化的引用,exception,lisp,scheme,interpreter,tail-call-optimization,Exception,Lisp,Scheme,Interpreter,Tail Call Optimization,我用python和sapid lisp本身实现了一个小型的lisp解释器(谷歌代码中的sapid lisp)。也许它的主要特点是通过异常实现尾部和相互递归优化。这里是实现细节 与标准技术相比,它的优势在于,应用于递归解释程序以获得尾部递归优化的更改有限。不利因素可能是时机 我在python装饰器()中发现了一种类似的技术。现在,为了将该技术放在上下文中,我正在寻找描述lisp或其他解释语言的此类技术的参考资料。有什么信息吗?请参见Pettyjohn等人的文章和Joe Marshall的相关文章

我用python和sapid lisp本身实现了一个小型的lisp解释器(谷歌代码中的sapid lisp)。也许它的主要特点是通过异常实现尾部和相互递归优化。这里是实现细节

与标准技术相比,它的优势在于,应用于递归解释程序以获得尾部递归优化的更改有限。不利因素可能是时机

我在python装饰器()中发现了一种类似的技术。现在,为了将该技术放在上下文中,我正在寻找描述lisp或其他解释语言的此类技术的参考资料。有什么信息吗?

请参见Pettyjohn等人的文章和Joe Marshall的相关文章


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

见Eli的答案。但是为了添加更多的上下文,Baker的技术是实现适当尾部递归的一个众所周知的技巧,它使用C堆栈作为延续帧和其他对象的托儿所(如在分代GC中)。与保持堆栈较小(大多数尾部递归实现都是这样)不同,这种技术允许堆栈增长一段时间,然后每隔一段时间进行一次大跳转(
longjmp
,execption,等等)来清除堆栈。在清除堆栈之前,将所有活动内容复制到堆中


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

非常感谢您描述Baker的技术,并将Pettyjohn的论文放在这个上下文中。这里提出的技术将飞尾递归调用转换为显式while循环。我认为没有办法将其应用于非递归尾部调用。因此,我不确定标签的更改是否相关。我错了吗?