Function2 のソース コードを読んでいると、最近 (scala 2.10 で) @unspecializedが追加されていることに気付きました。その背後にある理由は何ですか?また、コンパイルにどのように影響しますか? なぜ Function* やその他のメソッドでそれが必要なのですか?tupled
compose
1 に答える
2
安全な推測は、ターゲットメソッドの特殊化を無効にすることです。特殊化を無効にする正当な理由は、バイトコードの肥大化を避けるためです。すべてのメソッドを無差別に特殊化するのは悪い考えです。それぞれの特殊化は基本的に同じメソッドの別個のコピーであり、バイトコードのサイズは急速に増大するからです。Function2
したがって、特殊化は一般に、バイトコード サイズの増加に見合うだけの価値があると考えられていたtupled
と思いますcompose
。これは、コード サイズと実行速度の微妙なバランスです。アイデアは、費用対効果を最大限に高めることです。
余談ですが、仕様化によって引き起こされるコードの肥大化がいかに問題になるかを示す面白い例として、次のscala bombのレシピを参照してください。
于 2013-06-25T19:40:55.177 に答える