是否有可能使用inotify(或任何git-annex和Yesod使用)使Shake成为被动的,这样,如果文件系统以某种方式改变以暗示该规则应该执行,那么它是否会尽早实现?
答案 0 :(得分:8)
Shake的作者Neil Mitchell回答说:
有几种方法可以解决这个问题:
每次检测到某些内容时,您都可以重新运行Shake 改变。如果更改,Shake会针对快速重建进行高度优化 需要做一个编译,然后是Shake弄清楚什么的时候 重建可能是最小的。不需要更改Shake。
Shake在启动时会做一些事情,比如阅读 摇动数据库。如果有需求,那就证明了 及时引人注目,我很乐意提供一个廉价的重新运行的API 某种 - 这并不难。
当Shake进行重建检查时,这是最昂贵的事情 确实在检查文件修改时间。如果inotify层给出了 已更改的文件列表我只能重新检查 实际上已经改变了对于一个大型项目,你可能会看到~1s 检查修改时间,所以它可能会给你买一点,然后 实施起来并不难。
如果Shake积极建设,然后发生变化,那么你 可以抛出异常,杀死正在构建的任何东西,然后重启 抖动。 Shake已经过全面测试,抛出异常 在它,做正确的事。我知道至少有一个人使用Shake 就这样。
最后,如果Shake正在积极构建,您可以动态地进行构建 终止那些输入已经改变并重新开始的规则。 Shake可以支持这个模型,但这将是一个合理的数量 工作,并需要重新设计一些件。那将是充分的 反应模型,但我怀疑它只会在你开始时受益 有大量的文件和一些文件正在发生变化 但是大多数文件都没有。
我们还确定将Shake与像Hobbes这样的实用程序(也在Hackage上)结合使用可以进行反应式构建。