我无法更改 GHC 的编译时间,但我可以控制编译内容的环境。我可以用git和stack做什么来最大限度地减少由于(重新)构建而导致的停机时间?
Haskell 堆栈将已编译的依赖项缓存在.stack-work
目录中,它非常适合一次处理一件事。但是,我发现自己在分支之间来回切换。我已经完成git checkout
了,也许有些.stack-work
缓存是可用的。但我更喜欢git worktree
在不同的目录中获得一个分支的副本。Worktree 在构建时间上特别困难,因为每个 worktree 目录都有自己的.stack-work
,因此必须下载/配置/编译/安装自己的依赖项,而不是使用现有的依赖项。
我一直在阅读有关 Nix 和 Haskell 的文章,但是由于堆栈创建了自己的缓存,因此它忽略了 Nix 已编译和安装的任何内容。从我所读到的,我真的希望 Nix 处理依赖项和堆栈来处理我的个人代码。我从 stackage 中得到了很大的好处stack solver
,所以我不想放弃它们。但是当我在运行时看到一屏“取消注册”消息时stack build --only-dependencies && stack ghci
,我知道在收到提示之前至少还有 10-15 分钟。
非常感谢!