主要观点:介绍了即将推出的动态派生(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 在该方面的工作。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。