[解決済み] 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 では非常に良いチャンスがあると思われます。
関連
-
実行中にEclipseがポップアップする A Java Exception has occurred
-
[解決済み] JVM起動時のパラメータ「-Xms」「-Xmx」とは何ですか?
-
Collections.sortがdoubleでソートできない問題を完璧に解決する。
-
StringBuilderが投げるArrayIndexOutOfBoundsExceptionの探索
-
名前 'XXX' を持つ Bean の作成に失敗しました。自動依存関係の注入に失敗しました 解決方法
-
-bash: java: コマンドが見つからない 解決方法
-
IDEAError:javaの依存性エラー。Annotation processing is not supported for module cycles...(アノテーション処理はモジュールサイクルではサポートされていません。
-
[解決済み] Javaの「for each」ループはどのように機能するのですか?
-
[解決済み] テールコール最適化とは何ですか?
-
[解決済み] JVM、JDK、JRE、OpenJDKの違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
javaの非静的メソッドを静的に参照することができない
-
Springの設定でxsdファイルのバージョン番号を設定しない方が良い理由
-
メモ帳でJavaプログラムをコンパイルして実行すると、Could not find or load main class ...というエラーが表示される。解決方法
-
Javaクラスが "Error occurred during initialization of boot layer "というエラーで実行される。
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException:5 エラー
-
Javaがリソースリークに遭遇した:'input'が閉じない 解決方法
-
代入の左辺は変数でなければならない 解答
-
Spring Bootは、Tomcatの組み込みのmaxPostSizeの値を設定します。
-
[解決済み】再帰と反復のどちらを選ぶ?
-
[解決済み] Java のスタックサイズを大きくするには?