Als ich darüber recherchierte, erfuhr ich den Grund dafür:
In JDK-Klassen [...] gibt es eine Reihe sicherheitsrelevanter Methoden, die auf der Zählung von Stapelrahmen zwischen JDK-Bibliothekscode und aufrufendem Code basieren, um herauszufinden, wer sie aufruft.
Allerdings Scala, das auf JVM basiert, unterstützt die Tail-Call-Optimierung. Scala führt zur Kompilierungszeit eine Tail-Rekursionsoptimierung durch. Warum kann Java nicht den gleichen Ansatz verwenden?
PS: Ich bin mir nicht sicher, ob die neueste Version (derzeit Java 11) von Java jetzt TCO hat. Wäre toll, wenn jemand, der es weiß, dies auch teilen könnte.
Anmerkungen:
- Ich weiß, dass TCO ist im Rückstand und hat eine niedrigere Priorität, möchte aber wissen, warum Java in der Kompilierungszeit keine Änderungen ähnlich wie bei Scala vornehmen kann.
- Java tut dies nicht Es gibt keine Tail-Call-Optimierung aus demselben Grund, aus dem die meisten imperativen Sprachen sie nicht haben. Imperativschleifen sind der bevorzugte Stil der Sprache, und der Programmierer kann die Schwanzrekursion durch Imperativschleifen ersetzen. (Quelle)