问题陈述:
最佳答案
确实,隐式会降低编译速度,尤其是对于使用它们进行类型级计算的代码。衡量它们的影响绝对值得。不幸的是,追踪罪魁祸首可能很困难。有一些工具可以提供帮助:
-Ystatistics:typer
运行 scalac查看在类型检查期间处理了多少树节点。例如。您可以查看ApplyToImplicitArgs
的号码和 ApplyImplicitView
相对于总数(并且可能将其与另一个代码库进行比较)。 -Xlog-implicits
进行编译,将输出通过管道传输到文件并分析日志。它将为每个被考虑但失败的隐式候选显示一条消息,包括源位置、搜索类型和失败原因。这种失败的搜索代价高昂。您可以使用您最喜欢的脚本语言(为什么不用 Scala?)编写一个简单的脚本来汇总数据,甚至可以用一些漂亮的图形来绘制它。 旁白:如何解析特定的隐式实例?
只需使用
reify
和好 ol' println
调试:import scala.collection.SortedSet
import scala.reflect.runtime.universe._
println(showCode(reify { SortedSet(1,2,3) }.tree))
// => SortedSet.apply(1, 2, 3)(Ordering.Int)
关于performance - 如何找出我的 Scala 代码中使用了哪些隐式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48054215/