1. ホーム
  2. java

[解決済み] JVMはテールコールの最適化を妨げるか?

2023-01-03 01:10:41

質問

質問でこんな言葉を見かけました。 Webサービスを構築するための良い関数型言語は何ですか?

特にScalaは自己再帰的な関数を除いてテールコール除去をサポートしていないので、できる合成の種類が制限されます(これはJVMの基本的な制限です)。

これは本当でしょうか? もしそうなら、この基本的な制限を作り出すJVMの何がそうさせるのでしょうか?

どのように解決するのですか?

この記事 再帰か反復か? が参考になるかもしれません。

要するに、テールコールの最適化は、セキュリティモデルと常に利用可能なスタックトレースを持つ必要性のために、JVMで行うのは難しいです。これらの要件は理論的にはサポートできますが、おそらく新しいバイトコードが必要になるでしょう ( John Rose の非公式な提案 ).

また、より多くの議論が Sun バグ#4726340 で、 (2002 年からの) 評価が終了しています。

私は、それでもこれは可能だと信じていますが、小さな仕事ではありません。

現在、いくつかの作業が ダ・ヴィンチ・マシン プロジェクトで行われています。tail call サブプロジェクトのステータスは "proto 80%" と表示されており、Java 7 に入る可能性は低いですが、Java 8 では非常に良いチャンスがあると思われます。