4

Function2 のソース コードを読んでいると、最近 (scala 2.10 で) @unspecializedが追加されていることに気付きました。その背後にある理由は何ですか?また、コンパイルにどのように影響しますか? なぜ Function* やその他のメソッドでそれが必要なのですか?tupledcompose

4

1 に答える 1

2

安全な推測は、ターゲットメソッドの特殊化を無効にすることです。特殊化を無効にする正当な理由は、バイトコードの肥大化を避けるためです。すべてのメソッドを無差別に特殊化するのは悪い考えです。それぞれの特殊化は基本的に同じメソッドの別個のコピーであり、バイトコードのサイズは急速に増大するからです。Function2したがって、特殊化は一般に、バイトコード サイズの増加に見合うだけの価値があると考えられていたtupledと思いますcompose。これは、コード サイズと実行速度の微妙なバランスです。アイデアは、費用対効果を最大限に高めることです。

余談ですが、仕様化によって引き起こされるコードの肥大化がいかに問題になるかを示す面白い例として、次のscala bombのレシピを参照してください。

スカラ爆弾?(ジップボムのように)

于 2013-06-25T19:40:55.177 に答える