阅读Function2 I've noticed that @unspecialized的源代码是added recently (in scala 2.10)。它背后的原因是什么?它如何影响编译?为什么我们需要Function *的tupled
,compose
和其他一些方法呢?
答案 0 :(得分:2)
我想说一个安全的猜测是它禁用了目标方法的特化。禁用特化的一个很好的理由是避免字节码膨胀。不加区分地专门化每个方法是一个坏主意,因为每个特化基本上是同一方法的不同副本,并且字节码大小增长得相当快。所以我想在这里,专业Function2
被认为通常值得增加字节码大小,但tupled
和compose
除外,它们不足以保证额外增加。这是代码大小和执行速度之间的微妙平衡,这个想法是为了获得最大的收入。
除此之外:作为一个有趣的例子,说明由于特殊化引起的代码膨胀是多么有问题,请参阅 scala炸弹的这个配方: