12 个版本
0.3.8 | 2023 年 10 月 5 日 |
---|---|
0.3.7 | 2023 年 10 月 5 日 |
0.3.6 | 2023 年 9 月 28 日 |
0.3.0 | 2023 年 8 月 25 日 |
0.1.1 | 2023 年 8 月 7 日 |
#10 in #watchexec
250KB
5.5K SLoC
注意: ghcid-ng
已重命名为 ghciwatch
请使用 ghciwatch
包 代替。
ghcid-ng
ghcid 的下一代,一个基于 ghcid
的文件监视器和重新编译器。 ghcid-ng
会监视您的模块以检测更改,并在 ghci
会话中重新加载它们,显示任何错误。
为什么要重新实现?
当我们开始开发 ghcid-ng
时,ghcid
存在一些显著的限制。特别是,ghcid
无法处理移动或删除的模块,并且由于它 无法在运行时轻松更新监视的文件集,因此不会检测到新目录。我们还观察到需要每天多次重启的内存泄漏。由于 ghcid
代码库相对较小,重写似乎比在陌生的代码库中进行广泛更改更高效。
为什么选择 Rust?
Rust 使发布静态二进制文件变得容易。Rust 还与 Haskell 共享许多功能:具有推断的 Hindley-Milner 类型系统、模式匹配和默认不可变性。Rust 还可以 与 Haskell 交互,因此将来我们能够将 ghcid-ng
作为原生 Hackage 包发布。最后,Rust 是出色的跨平台和经过实战检验的 watchexec
库的家园,该库用于实现 watchexec
二进制文件和 cargo-watch
,这解决了监视文件时的许多棘手问题。
为什么不直接使用 watchexec
或类似工具?
当文件发生变化时重新编译项目是相当常见的一项开发任务,因此有大量工具具有这个大致目标。特别是,watchexec
是一个不错的现成解决方案。为什么不让它执行 watchexec -
呢?实际上,ghcid-ng
不仅在检测到更改时重新编译项目。它还管理一个交互式 ghci
会话,并指示它当需要时重新加载模块。这涉及到与 ghci
通过 stdin 通信以及解析其 stdout 的相当复杂的舞蹈,因此一个定制工具在这里很有用。
依赖关系
~24–59MB
~1M SLoC