| 31 Jul 2025 |
WeetHet | It's not impure it's uhh non-deterministic | 14:04:29 |
WeetHet | And it's only because computing the hash before copying is slow? | 14:05:00 |
WeetHet | And it's only non-deterministic if you're comparing the paths for equality | 14:06:08 |
WeetHet | * And it's only non-deterministic if you're comparing paths for equality | 14:06:21 |
WeetHet | I'm not sure that's even a real usecase | 14:06:32 |
WeetHet | Because on a path <-> string boundary the paths are devirtualised | 14:07:33 |
WeetHet | So the nondeterminism leak is minimal | 14:07:51 |
WeetHet | I don't love it but realistically it's not as big of a trade off as it can seem in the first place | 14:09:10 |
emily | tbf, lazy trees prevents torn writes | 14:10:47 |
emily | though of course nondeterminism in pure eval mode sans IFD is not really acceptable | 14:10:57 |
emily | (and does not really seem necessary) | 14:11:07 |
WeetHet | The real issue is that calculating the path and copying the source to the store are computationally very similar tasks | 14:11:53 |
emily | they're not really | 14:12:16 |
emily | just hashing is meaningfully faster | 14:12:28 |
WeetHet | I don't know if nar-hash can be constructed iteratively so that you only need to rehash changed files | 14:13:14 |
emily | see https://github.com/NixOS/nix/pull/13225#pullrequestreview-2858935020 for discussion, particularly the later review subthread | 14:13:17 |
emily | I think roberth has it right that you want an opaque path type | 14:13:26 |
emily | though that is of course a big lift | 14:13:30 |
emily | NAR hashing is also just bad… but that's another matter | 14:13:50 |
emily | anyway | 14:14:00 |
emily | does anyone have feelings about /nix/var/nix/b instead of /nix/var/nix/builds? | 14:14:07 |
emily | I have implemented most of the thing to fix the Unix socket length issue | 14:14:24 |
emily | with /b/ we end up below the previous average length of a build directory | 14:14:33 |
emily | with /builds/ we are still slightly above | 14:14:42 |
emily | though if you count path normalization i.e. /private/tmp/… which I think a lot of things are doing behind the scenes we are ahead even with /builds/ | 14:14:53 |
WeetHet |
Path equality and ordering (as observable to users) must remain identical
I've changed my opinion on this, though I'm not sure if there are really no usecases for comparing paths
| 14:15:15 |
WeetHet | But it would be interesting to go over github and just see if anyone ever compares paths | 14:15:38 |
emily | forbidding path comparison is precisely what a more opaque path type would achieve without breaking the language guarantees | 14:16:27 |
emily | it has other nice advantages too (you can do objcap stuff) | 14:16:39 |
raitobezarius | In reply to @emilazy:matrix.org tbf, lazy trees prevents torn writes I might not be using Flakes enough but I never saw a torn writes and I probably run the most experimental filesystem stack on my main system with the one of the largest stores around (and I hit most of the store bugs :D) | 14:16:41 |