JVM是否阻止尾部调用优化?

杰森·达吉特(Jason Dagit):

我在以下问题上看到了这句话:构建Web服务时应使用哪种良好的功能语言?

除自递归功能外,Scala特别不​​支持尾部调用消除,这限制了您可以执行的组合类型(这是JVM的基本限制)。

这是真的?如果是这样,那么创建此基本限制的JVM是什么?

迈克尔·迈尔斯(Michael Myers):

帖子:递归还是迭代?可能有帮助。

简而言之,由于安全模型以及始终需要可用的堆栈跟踪,因此在JVM中很难进行尾部调用优化。这些要求在理论上可以得到支持,但是可能需要一个新的字节码(请参阅John Rose的非正式建议)。

Sun bug#4726340中还有更多讨论,评估(从2002年开始)在此结束:

我相信仍然可以做到这一点,但这不是一个小任务。

当前,达芬奇机器项目中正在进行一些工作尾部调用子项目的状态列为“原始80%”;不太可能将其纳入Java 7,但我认为它在Java 8中有很大的机会。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

(前向)管道运算符可以/是否可以阻止尾部调用优化?

Java是否支持并优化尾部递归调用?

为什么noreturn / __ builtin_unreachable阻止尾部调用优化

JavaScript尾部调用中的函数是否已优化?

尾部调用优化是否适用于此功能?

Go递归函数调用是否优化了尾部?

Java 8是否具有尾部调用优化功能?

是否对JavaScript引擎尾部调用(TCO)进行了优化?

尾部调用优化是否适用于除递归调用以外的其他调用?

我在此代码上收到StackOverFlowException,因为我的JVM不支持尾部调用优化,对吗?

F#是否使用|> Option.bind执行TCO(尾部调用优化)

Node.js:异步函数中是否对尾部调用进行了优化?

Swift是否实现尾部调用优化?在相互递归的情况下?

ML系列编译器是否对尾部调用进行了任何复杂的优化?

Javascript引擎中的尾部调用优化实现

共享指针会破坏尾部调用优化吗?

为什么尾部调用优化需要操作码?

为什么没有JavaScript引擎支持尾部调用优化?

Quicksort的尾部呼叫优化

Rebol尾部呼叫优化

如何记录返回函数调用的函数(用于优化尾部调用)

是否可以禁用JVM JIT循环优化

预设为“ es2016”的Babel是否实现了尾部呼叫优化?

更加不稳定:是否需要阻止优化?

为什么此尾部调用优化函数会失败,并导致最大调用堆栈大小超出错误?

Azure ServiceBus OnMessage是否阻止调用?

为什么JVM仍然不支持尾调用优化?

Java:JVM将如何优化对void函数的调用?

Android中的JVM是否优化了硬编码条件?