首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么不能在基于JVM的Lisp中优化尾部调用?

为什么不能在基于JVM的Lisp中优化尾部调用?
EN

Stack Overflow用户
提问于 2013-10-19 12:17:01
回答 3查看 7.6K关注 0票数 22

主要问题:我认为尾部调用优化(TCO)最重要的应用是将递归调用转换为循环(在递归调用具有特定形式的情况下)。更准确地说,当翻译成机器语言时,这通常会翻译成某种类型的跳转。一些编译为本机代码(例如SBCL)的Common Lisp和Scheme编译器可以识别尾递归代码并执行此转换。基于JVM的Lisp,比如Clojure和ABCL,很难做到这一点。JVM作为一台机器,是什么阻止或使这一点变得困难的?我还是不明白。显然,JVM在循环方面没有问题。编译器必须弄清楚如何实现TCO,而不是它编译到的机器。

相关问题: Clojure可以将看似递归的代码转换为循环:如果程序员将对函数的尾部调用替换为关键字recur,它的行为就像是在执行总体拥有成本。但是,如果可以让编译器识别尾部调用--例如,SBCL和CCL就是这样做的--那么为什么Clojure编译器不能弄清楚,它应该像处理recur一样处理尾部调用

(对不起--这无疑是一个常见问题,我确信上面的评论表明我的无知,但我没有成功地找到前面的问题。)

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19462314

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档