特にSunを購入した後は、末尾呼び出しの最適化が一般的な最適化手法として追加されることはないようですが、VMで実行されている言語に、コンパイラがtailcall
命令を出力するかどうかを自分で決定させることは技術的に可能ではありません。バイトコード?
例:Java、Groovyは命令を使用しないことを決定できますが、ScalaやClojureなどのより機能的な言語は命令を発行でき、HotSpot VMはtailcall
?でマークされたもののみを最適化します。
特にSunを購入した後は、末尾呼び出しの最適化が一般的な最適化手法として追加されることはないようですが、VMで実行されている言語に、コンパイラがtailcall
命令を出力するかどうかを自分で決定させることは技術的に可能ではありません。バイトコード?
例:Java、Groovyは命令を使用しないことを決定できますが、ScalaやClojureなどのより機能的な言語は命令を発行でき、HotSpot VMはtailcall
?でマークされたもののみを最適化します。
はい、これは技術的に可能です。実際、 OpenJDK用のArnold Schwaighoferによる実験的なパッチがありますが、現在のところ最新の状態に保たれていないため、パッチを適用してビルドするのは簡単ではありません。
明示的な末尾呼び出し命令には、JVMによる末尾位置での関数呼び出しの透過的な最適化よりも優れています。JVMは、末尾呼び出しとして指定したものが実際にあることを確認できるため、JohnRoseによるこの末尾呼び出しのブログ投稿でいくつかの説明を参照してください。行うことができる検証の。
JVMの未来はJavaではないと思います。時間と才能のある人が、JVMの末尾呼び出しを推進してくれることを願っています。