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