2作者: hinshun5 个月前原帖
你好,我是埃德加!我们正在开源 nix-ninja,这是一个针对 Nix 的增量构建系统,利用动态派生功能。 对于不熟悉的人来说,Nix 是一个强大的包管理器和构建系统,通过严格的依赖隔离确保可重现的构建。然而,它的一个局限性是将包作为整体单元进行构建——如果你更改了一个源文件,Nix 会从头开始重建整个包。 nix-ninja 通过为 Nix 构建引入编译单元级别的细粒度控制来解决这个问题。它针对 ninja 构建文件,这是一种描述构建图的格式,输出自流行的构建系统,如 CMake 和 meson。这意味着当你修改一个源文件时,仅需重建受影响的编译单元,从而显著减少构建时间。 我们对此感到兴奋,因为这为 Nix 提供了细粒度的缓存和提前截止优化(请参见《Build Systems à la Carte》论文)。结合像 Nixbuild.net 这样的远程构建农场,这使得 Nix 进入了增量云构建系统的领域,与谷歌的 Bazel 和 Meta 的 Buck2 并肩而立。 动态派生和内容寻址派生在 Nix 中仍然是实验性功能,因此我们希望通过提供一个引人注目的用例和实现来加速它们的成熟。我们的目标是让 Hydra(nixpkgs 的 CI 运行器)支持在 nixpkgs 中进行增量编译,以应对像 LLVM 这样的慢构建。 nix-ninja 今天可以编译 Nix 本身,但我们仍处于开发的早期阶段。鉴于社区对 Nix 中动态派生和增量编译的兴趣,我们决定在预发布状态下开源它,以便让社区参与其设计。 请查看一下。我们将在评论区回答任何问题:<a href="https://github.com/pdtpartners/nix-ninja" rel="nofollow">https://github.com/pdtpartners/nix-ninja</a>