在Java中的尾调用优化

9 浏览
0 Comments

在Java中的尾调用优化

自 Java 8 开始,Java 不提供尾递归优化(TCO)。

在研究此事时,我了解到其原因是:

在 JDK 类中,有一些安全敏感的方法依赖于计算 JDK 库代码和调用代码之间的堆栈帧数量,以确定是谁在调用它们。

然而,基于 JVM 的 Scala 支持尾递归优化。Scala 在编译时进行尾递归优化。为什么 Java 不能采用相同的方法呢?

附注:

  1. 我知道 TCO 在待办事项中,优先级较低,但想知道为什么 Java 不能像 Scala 一样在编译时进行更改。

  2. Java 之所以没有尾递归优化,原因与大多数命令式语言没有它的原因相同。命令式循环是该语言的首选风格,程序员可以用命令式循环替代尾递归。(来源

0