Nix 动态推导的早期观察

主要观点:介绍了即将推出的动态派生(dynamic derivations)功能,通过示例展示了其在 Nix 中的应用及优势,如能在构建时创建额外派生以扩展图,改善了导入派生(import from derivations,IFD)的问题,减少了构建时间等;同时指出动态派生仍在变化且有些脆弱,需使用特定版本的 Nix 并启用相关实验特性。

关键信息:

  • 在[PlanetNix2025]会议上听到关于动态派生的演讲,来自 John Ericson。
  • 动态派生可在构建时创建输出为.drv 的派生,如pkgs.runCommand "world.drv"
  • 新的builtin.outputOf可指示 Nix 遵循派生链,如(builtins.outputOf producing.outPath "out")
  • 借助递归 Nix 可动态构造 Nix 表达式图并链接到顶级派生,如在另一个 Nix 派生中动态创建inner.nix
  • 动态派生可利用其他工具如 CMake、Bazel 等构建一系列额外派生,无需lang2nix

重要细节:

  • 目前在 Nix 中通过 IFD 实现类似功能但有暂停评估阶段的缺点,所以 nixpkgs 禁止使用。
  • 示例中展示了带有 IFD 的 Nix 表达式构建时间长,而使用动态派生后评估接近即时,构建时间约 10 秒。
  • 动态派生相关工作仍新,需特定版本的 Nix 和启用实验特性,且使用unsafeDiscardOutputDependency有原因。
  • 感谢 Mark Williams 和 John Ericson 在该方面的工作。
阅读 5
0 条评论