主要观点:使用 Nix 十年后,不喜欢其自称“纯函数式包管理器”,这易造成混淆,但其与 Make 有相似处也有差异,差异如使用哈希缓存结果而非时间戳,主要优势是构建配方可组合(得益于定义的函数式编程性质)。
关键信息:
- Make 在项目中易因缺少工具导致错误,如 Firefox 构建中缺 C 编译器,其 Makefile 内定义的
cc
命令也需用 Make 规则,但自身无法引用,体现其不可组合性。 - Nix 可组合,定义能导入其他文件包括构建输出,如 Nixpkgs 有大量构建配方,由小“引导”构建而成,且对各种遗留工具如 Make 等有兼容性。
- Nix 本身仅能调用单个
exec
系统调用,其他皆基于此基础,不依赖特定工具等。
重要细节:通过对比 Nix 和 Make 在项目构建中的表现,突出 Nix 的可组合性优势,以及 Nixpkgs 如何利用这种可组合性构建大量配方,同时说明 Nix 与其他工具类别的关系,即它是可替代那些非组合性构建工具的组合式构建工具。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。