Pet*_*iuk 6 performance static-analysis scala compilation scalaz
问题陈述:
我阅读了多篇文章/文章,这些文章暗示了scala编译的时间
我想删除/减少它们到最小可能看到没有它们的编译时间会是什么样的(代码库是基于scalaz&akka&slick的各种复杂性的大约1000个文件)
我真的不知道我可以执行什么样的静态分析.对现有工具的任何赞美/引用都非常赞赏.
确实,隐式会降低编译速度,特别是对于使用它们进行类型级计算的代码。衡量它们的影响绝对是值得的。不幸的是,追查罪魁祸首可能很困难。不过,有一些工具可以提供帮助:
运行 scalac 以-Ystatistics:typer查看在类型检查期间处理了多少个树节点。例如,您可以检查数量ApplyToImplicitArgs以及ApplyImplicitView相对于总数的数量(并且可以将其与另一个代码库进行比较)。
Scala 中心目前正在努力改善scalacenter/scalac-profiling托管的现状。它包含一个 sbt 插件,应该能够让您了解隐式搜索时间,但它仍处于起步阶段(在撰写本文时尚未发布)。我自己没有测试过,但你仍然可以尝试一下。
您还可以使用 进行编译-Xlog-implicits,将输出通过管道传输到文件并分析日志。它将显示每个已考虑但失败的隐式候选者的消息,包括源位置、搜索类型和失败原因。这种失败的搜索代价高昂。您可以使用您最喜欢的脚本语言(为什么不是 Scala?)编写一个简单的脚本来汇总数据,甚至用一些漂亮的图形来绘制它。
旁白:如何解析特定的隐式实例?
只需使用reify并进行良好的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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |