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

MIT 许可证

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