基准 GHC 编译时间

Benchmarking GHC compilation times

我的 Haskell 程序编译时间太长。

我的意思是:自从我能够使用 -O1 进行编译以来已经一年多了。上次尝试时,我设置了一个 64gb 的服务器来编译我的程序,并让它 运行 过夜。它 运行 内存不足。

我即将着手进行一些重大的重新设计更改,我希望这会加快编译时间,但首先我需要知道是什么花费了这么长时间,并获得一些良好的测量结果以便我可以跟踪进度。

我目前有两个关于如何做到这一点的想法:

  1. 用标志覆盖我的程序,这样我就可以尝试编译不同的片段和时间 他们。
  2. 正在为 stack build 编写一个包装程序,查找像“[75 of 83] Compiling ”这样的行,并计算它们之间的时间间隔。

(1) 听起来真的很难看,我不希望 (2) 给出好的数字,因为它不精确并且因为跨模块编译。谁有更好的主意?

比观看文本输出更好更容易,我意识到我可以简单地查看构建文件夹中文件的时间戳。

此命令为我提供了一个按时间戳排序的构建文件的漂亮列表,因此我可以粗略地判断每个构建文件花费了多长时间:

ls -l -c -T -R .stack-work/dist/x86_64-osx/Cabal-1.22.5.0/build/<source folder> | grep "rw" | grep "\." | awk '{print ,}' | sort