!lymvtcwDJ7ZA9Npq:lix.systems

Lix Development

411 Members
(Technical) development of Lix, the package manager, a Nix implementation. Please be mindful of ongoing technical conversations in this channel.135 Servers

Load older messages


SenderMessageTime
10 Dec 2025
@piegames:flausch.socialpiegamesyes, but the issue is, what is your cache key?17:25:37
@piegames:flausch.socialpiegamesinode number and ctime might be our best bet17:28:31
@piegames:flausch.socialpiegamesbut in terms of cachable data structures, bytecode gives us that for free17:29:02
@piegames:flausch.socialpiegames* but in terms of cachable data structures, bytecode gives us that bit for free17:29:28
@charles:computer.surgeryCharles
In reply to @piegames:flausch.social
yes, but the issue is, what is your cache key?
What do other interpreters do?
17:31:54
@piegames:flausch.socialpiegamesI don't think any other interpreters have comparable performance requirements for parsing17:33:30
@piegames:flausch.socialpiegamesif there constraints weren't as tight we could just go content-addressed and use a hash17:33:43
@qyriad:katesiria.orgQyriad bytecode is our::Qyriad's long term goal 17:35:18
@qyriad:katesiria.orgQyriad or really whenever someone pays us for it 17:35:25
@qyriad:katesiria.orgQyriad * or whenever someone pays us for it 17:35:36
@piegames:flausch.socialpiegamesI think browser engines have sufficient control over their baseline caching pipelines and what data changes when that they can probably just track what changes easily, but I'm guessing here17:36:08
@kfears:matrix.orgKFears (burnt out)
In reply to @piegames:flausch.social
no, parsing is super fast, mostly thanks to horrors, it's just that Nixpkgs is 3.6MLOC over 40k files and every single NixOS eval loads a good chunk of that, realistically multiple times. The main issue is that caching was never a thought in the architecture and adding it afterwards is really tricky
I don't know how many of those lines are going to be actually parsed (now I wish I could somehow learn that into), but assuming 20% utilization (that doesn't sound too unreasonable, considering that my desktop has 2k packages, but there's a lot of re-evals due to module system, splicing, package variations etc.), that doesn't sound too terrible? Like, other interpreters and compilers probably deal with 700k LOC codebases. How do they deal with that?
17:36:40
@piegames:flausch.socialpiegamesI'm dreaming of tackling it for 2.96 really17:36:58
@piegames:flausch.socialpiegamesI already have a half-working prototype from a year ago, horrors had one too, and we should soon have all the parts together for doing it17:37:37
@piegames:flausch.socialpiegamesmain question is whether to do it in C++ or to block it on RPC and do it in Rust17:37:53
@helle:tacobelllabs.nethelle (just a stray cat girl)please don't do it in C++17:38:13
@helle:tacobelllabs.nethelle (just a stray cat girl)we don't want to have to migrate that later on17:38:26
@qyriad:katesiria.orgQyriad we would either block it on RPC, or bind it to existing libexpr over C bindings. the refactoring necessary for libexpr to use a bytecode interpreter over C ABI would be like half the battle for the decoupling we need to do anyway 17:40:46
@xokdvium:matrix.orgSergei Zimmerman (xokdvium)FWIW v8 uses the source code hash as the cache key https://github.com/v8/v8/blob/427f7cce6d69a2d6ce113200e8dcc1151765058c/src/snapshot/code-serializer.cc#L820-L83417:41:09
@xokdvium:matrix.orgSergei Zimmerman (xokdvium)So the closest thing would be to hash .nix files -> cached bytecode -> cached optimizer -> .... -> profit?17:42:32
@piegames:flausch.socialpiegamesthat's the goal yes17:44:02
@piegames:flausch.socialpiegamesunclear about profit though17:44:06
@commentator2.0:elia.gardenRutile (Commentator2.0) feel free to pingDo we understand the overall parsergoal correctly as "use the fastest parser available, errors be damned and if it fails reparse with a good error handling one performance be damned"?17:44:16
@piegames:flausch.socialpiegamesunclear. Having a single fast parser with decent error handling and performance would be nice17:44:52
@kfears:matrix.orgKFears (burnt out)
In reply to @qyriad:katesiria.org
we would either block it on RPC, or bind it to existing libexpr over C bindings. the refactoring necessary for libexpr to use a bytecode interpreter over C ABI would be like half the battle for the decoupling we need to do anyway
I obviously don't participate in development so my voice matters little, but doing C ABI jumps sounds miserable
17:45:11
@qyriad:katesiria.orgQyriad We will need C interop for many parts of the codebase one way or anotherĀ  17:45:37
@qyriad:katesiria.orgQyriad However, we are in the very lucky position that we don't need that ABI to be stable 17:46:09
@qyriad:katesiria.orgQyriad Which helps a lot 17:46:25
@piegames:flausch.socialpiegamesyes, that's why doing it in Rust will mean interop via RPC and subprocesses (which we want anyways)17:46:29
@xokdvium:matrix.orgSergei Zimmerman (xokdvium)That's the hard part too. I imagine bytecode to not be so compact so that serialising it and persisting would have a big overhead. Needs a policy and profiling to see which code is worth caching at all17:46:35

Show newer messages


Back to Room ListRoom Version: 10