!lymvtcwDJ7ZA9Npq:lix.systems

Lix Development

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

Load older messages


SenderMessageTime
24 Feb 2026
@raitobezarius:matrix.orgraitobezariusThis seems like a problem we need to address14:00:27
@qyriad:katesiria.orgQyriad Ah, except for nix-env --set. Since that has nothing to do with the profile's manifest and is really about profile generation management than the profile itself 14:04:09
@emilazy:matrix.orgemily to put it another way: set1 == set2 really ought to be equivalent to attrNames set1 == attrNames set2 && attrValues set1 == attrValues set2. you can always express this in the language and if we model the current behaviour as nondeterministic there's always a conceivable execution trace that matches these semantics. so it doesn't make sense to make equality stricter than that interpretation, which is consistent with lists, consistent with the existing builtins on attrsets, and optimal in terms of runtime performance of the comparison loop. thoughts, @piegames:flausch.social ? 15:14:44
@emilazy:matrix.orgemily

the other reasonable alternative is to make it equivalent to map (name: [ name set1.${name} ]) (attrNames set1) == map (name: [ name set2.${name} ]) (attrNames set2) but this is:

  1. I think inevitably strictly slower in terms of runtime perf because there are cases where you will recurse into expensive thunks that the other variant never will
  2. more difficult to express in terms of in-language primitives
  3. less compatible - for every program that returns true or false from such a comparison, the other variant will also return that value, but this variant will abort/loop forever/throw strictly more often

both of them are entirely consistent with "angelic" choice of nondeterministic comparison orderings, but I don't think the interleaved variant has any merits

15:21:32
@emilazy:matrix.orgemily

other reasons comparing names separately makes more sense:

  1. consistent with lists, [ abort abort ] != [ abort ] compares lengths before values already, and list lengths are analogous to attrset key sets
  2. indeed the interleaving version can't legitimately even short-circuit on the number of names without complicating semantics because of { a = abort; } != { b = abort; c = abort; } -- whereas if you compare names first, you can legitimately do that short circuit because attr name set comparison happens before any thunks are forced
15:44:34
@emilazy:matrix.orgemilyI'll put a summary of this up on the Nix PR in a few hours since this is getting verbose :)15:49:55
@emilazy:matrix.orgemily but I firmly believe attrNames set1 == attrNames set2 && attrValues set1 == attrValues set2 is the right semantics on both practical and theoretical grounds (and we should fix anywhere Nixpkgs still relies on pointer equality dodging type errors/aborts/throws/infinite loops and then move towards not doing that by default) 15:51:51
@piegames:flausch.socialpiegamesOkay16:23:57
25 Feb 2026
@kirottu:kirottu.com@kirottu:kirottu.com left the room.16:55:51
@isabel:isabelroses.comisabel changed their profile picture.21:51:40
26 Feb 2026
@lily:lily.flowersLily Foster changed their profile picture.14:01:48
@n3tcat:crabsin.spacen3tcat joined the room.23:44:11
27 Feb 2026
@lavender.pet:voip.vera-visions.comfind me at @lavender.pet:queer.sh changed their display name from lavender.pet to find me at @lavender.pet:queer.sh.20:14:32
@lavender.pet:voip.vera-visions.comfind me at @lavender.pet:queer.sh changed their profile picture.20:36:06
1 Mar 2026
@somasis:matrix.orgkylie changed their profile picture.03:25:03
@somasis:matrix.orgkylie changed their display name from somasis to kylie.03:52:40
@atemu12:matrix.orgAtemu How is the lix command's -- supposed to function? Because when I do lix foo somearg -- otherarg, lix eats the -- and strips it from the args passed to lix-foo. It turns -vvvvv.. into -v -v ... too. 11:43:02
@atemu12:matrix.orgAtemuI'd have expected it to not touch any args after the subcommand11:44:22
@qyriad:katesiria.orgQyriad Yeah I think that's a bug 11:47:12
@raitobezarius:matrix.orgraitobezariusthat's because everything goes via the CLI parser11:48:21
@raitobezarius:matrix.orgraitobezariusbut we don't know yet if you are calling a subcommand11:48:26
@raitobezarius:matrix.orgraitobezariusso you are receiving the CLI parser preprocessing which is discussable11:48:34
@raitobezarius:matrix.orgraitobezariusplease open a bug indeed with the info and we can take care of it11:49:07
@hedy:envs.net@hedy:envs.net removed their profile picture.14:36:23
@hedy:envs.net@hedy:envs.net left the room.14:36:23
@piegames:flausch.socialpiegames sky1e: What are your plans for the Value outParam CLs? Will you migrate everything given enough time? (Though not sure if migrating all the primops would be a good idea …) 14:58:43
@sky1e:mildlyfunctional.gaysky1e
In reply to @piegames:flausch.social
sky1e: What are your plans for the Value outParam CLs? Will you migrate everything given enough time? (Though not sure if migrating all the primops would be a good idea …)
My intent is to ultimately work towards https://git.lix.systems/lix-project/lix/issues/744, and a major step of fixing all existing deprecated declaration usage is to remove all default constructions of Value
15:36:49
@sky1e:mildlyfunctional.gaysky1eOut param functions can't be used without having an existing value to pass in, and usually that's default constructed15:40:27
@piegames:flausch.socialpiegamesSo you're planning to also work on the OpenSSL deprecations etc. eventually?15:40:59
@sky1e:mildlyfunctional.gaysky1eI don't know, I haven't gotten that far. I figured incremental progress towards it would be helpful and appreciated for however long as I managed to stay focused on this task. It also depends on how hard the OpenSSL deprecations would be to fix. I don't know anything about them15:44:33

Show newer messages


Back to Room ListRoom Version: 10