我目前在代码的性能相关部分广泛使用类型类模式。我至少发现了两个潜在的低效问题。
隐式参数会伴随着消息调用一起传递。我不知道这是否会真的发生。也许scalac可以简单地将隐式参数插入到它们被使用的位置,并从方法签名中删除它们。但在手动插入隐式参数的情况下,这可能是不可能的,因为它们可能只会在运行时解析。关于传递隐式参数,有哪些优化应用?
如果类型类实例由
def
提供(与val
相反),则需要在每次调用“类型类方法”时重新创建对象。JVM可能会通过优化对象创建来解决此问题。Scalac也可以通过重用这些对象来解决此问题。关于创建隐式参数对象,有哪些优化应用?
当应用类型类模式时,当然还可能存在其他低效源。请告诉我它们是什么。
scalaz.Monoid
?虽然专门化似乎非常有问题...甚至Numeric
也没有专门化。 - ziggystar