在Java中的尾调用优化
- 论坛
- 在Java中的尾调用优化
9 浏览
在Java中的尾调用优化
自 Java 8 开始,Java 不提供尾递归优化(TCO)。
在研究此事时,我了解到其原因是:
在 JDK 类中,有一些安全敏感的方法依赖于计算 JDK 库代码和调用代码之间的堆栈帧数量,以确定是谁在调用它们。
然而,基于 JVM 的 Scala 支持尾递归优化。Scala 在编译时进行尾递归优化。为什么 Java 不能采用相同的方法呢?
附注:
- 我知道 TCO 在待办事项中,优先级较低,但想知道为什么 Java 不能像 Scala 一样在编译时进行更改。
- Java 之所以没有尾递归优化,原因与大多数命令式语言没有它的原因相同。命令式循环是该语言的首选风格,程序员可以用命令式循环替代尾递归。(来源)