主要观点:
- 介绍了 Nix 中商店路径(
/nix/store
)的哈希计算方式,包括输入派生(pessimistic)哈希,即哈希由派生文件内容构建,而非输出字节。 - 讲解了固定输出派生(FOD),其具有固定内容地址,即使派生文件有微小变化,输出内容也不变,但派生路径会改变。
- 详细说明了计算
/nix/store
路径的过程,并非简单地对drv
文件哈希,而是在计算哈希时替换inputDrv
路径,以确保固定输出派生路径改变时计算路径不变。
关键信息:
- 一个简单的示例,在 bash 脚本中添加注释会导致不同的哈希和派生路径,如
wxrsdk4fnvr8n5yid94g7pm3g2cr6dih
和r4c710xzfqrqw2wd6cinxwgmh44l4cy2
。 - 固定输出派生的示例,添加注释后派生路径改变,但最终输出不变,如
/nix/store/3lx7snlm14n3a6sm39x05m85hic3f9xy-simple-fod
。 - 计算
/nix/store
路径的步骤,包括构建指纹、替换inputDrv
、哈希和压缩等,如通过 Go 程序实现。
重要细节:
- 引用了相关文档和资源,如
\[ref\]
指向的 Nix 相关文档和PhD 论文。 - 展示了 Nix 中的各种代码片段和命令行操作,如
nix-repl
中的代码、nix-hash
命令等。 - 提到了除 CppNix 外的其他 Nix 实现,如 go-nix 对理解 Nix 工作原理的帮助。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。