4

阅读 Function2 的源代码,我注意到最近添加了 @unspecialized ( in scala 2.10)。它背后的原因是什么以及它如何影响编译?为什么我们需要它来用于 Function*tupledcompose其他一些方法?

4

1 回答 1

2

我会说一个安全的猜测是它禁用了目标方法的专业化。禁用专业化的一个很好的理由是避免字节码膨胀。不加选择地专门化每个方法是一个坏主意,因为每个专门化基本上都是同一方法的不同副本,并且字节码大小增长得非常快。所以我在这里猜想,专业化Function2通常被认为值得增加字节码大小,除了tupled那些compose并不重要到足以保证额外增加的字节码大小。这是代码大小和执行速度之间的微妙平衡,其想法是物有所值。

旁白:作为一个有趣的例子,说明由规范化引起的代码膨胀是多么有问题,请参阅这个scala 炸弹的配方:

斯卡拉炸弹?(就像一个拉链炸弹)

于 2013-06-25T19:40:55.177 回答