如何在 nix-repl 中刷新 nix 推导(nix pill 的 7.5)?

How to refresh a nix derivation (nix pill's 7.5) in nix-repl?

查看 the 7th nix pill 中给出的示例,键入 :b simple 构建一个简短的 c 程序的推导。在nix-repl

simple = derivation { name = "simple"; builder = "${bash}/bin/bash"; args = [ ./simple_builder.sh ]; gcc = gcc; coreutils = coreutils; src = ./simple.c; system = builtins.currentSystem; }
:b simple

编译源代码并使输出目录包含 simple-可执行文件。

如果 c 源代码稍作更改,比如说,我们想要输出 "Simple?",具有相同参数的简单推导似乎不起作用。

为什么会这样,这是否意味着即使对 c 文件进行微小更改,也必须为推导提供新名称 (?) 参数?

如果是这样,如何摆脱在 nix-repl 中使用 :b adrvn 进行的旧推导?

问题是 simple 是一个 value/constant 而不是函数。鉴于 Nix 是纯函数式的,无论你计算多少次 simple 它总是会产生相同的输出(在 nix-repl 的同一个实例中)。另一方面,使用外部文件(例如 simple.nix)并使用 nix-build 将获取对推导输入的更改,包括 simple.c.

至于清理推导,可以使用nix-collect-garbage