!lymvtcwDJ7ZA9Npq:lix.systems

Lix Development

416 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
14 Aug 2025
@jade_:matrix.orgjade_correct, I would class that as "a bug"16:49:20
@emilazy:matrix.orgemily I think the former is what makes the most sense per JSON semantics and the general behaviour pointed at by the RFCs. the latter is defensible too. but picking one for positive values and another for negative values because of how nlohmann_json interacts with C++ numeric types not so much 16:49:22
@emilazy:matrix.orgemilyok. but I think it is hard to define these erroring semantics in a way that doesn't have weird edge cases wrt how JSON works16:50:09
@jade_:matrix.orgjade_ I think that getting a float in nix in general because it's nix is usually an undesired outcome 16:50:14
@emilazy:matrix.orgemilyfor instance, there are also JSOn literal floats that cannot be represented16:50:22
@jade_:matrix.orgjade_but alsoooo, often you want to passthru json16:50:26
@emilazy:matrix.orgemily* for instance, there are also JSON literal floats that cannot be represented16:50:26
@emilazy:matrix.orgemilyFWIW, the Nixpkgs integer parsing functions specifically reject the non-integer case, as I said16:51:02
@jade_:matrix.orgjade_so it is probably reasonable to try to just tolerate any numbers as losslessly as possible and eat the weird edge case that it's a float if it's too big16:51:05
@emilazy:matrix.orgemilyso returning floats does not make those behave spookily16:51:09
@emilazy:matrix.orgemily also, I don't think this should be a major consideration, but I suspect that making the negative case error out with nlohmann_json would be a pain 16:51:33
@emilazy:matrix.orgemilybecause it is already a float by the time you see it, because of being a value that does not fit into the integer types16:51:59
@emilazy:matrix.orgemilyI mean I guess you can compare the float but float precision issues may make that weird16:52:13
@emilazy:matrix.orgemilyand you have to determine whether it "could be" an integer16:52:20
@emilazy:matrix.orgemilylet's put it this way16:52:35
@emilazy:matrix.orgemilyif we were going to hard-reject JSON integer values16:52:40
@emilazy:matrix.orgemilyit should be based on the -(2^53)+1 to (2^53)-1 interoperable range16:53:09
@emilazy:matrix.orgemilyand happen on the serialization end as well16:53:18
@emilazy:matrix.orgemily(IMO)16:53:22
@emilazy:matrix.orgemily that would be undesirable though because of fromJSON being abused for general integer-parsing 16:53:32
@emilazy:matrix.orgemilyso we're already outside the bounds of the fully interoperable JSON format16:53:44
@jade_:matrix.orgjade_ also fromJSON may take some json that isn't actually getting operated on in nix except for rearrangement (e.g. the large integers don't actually get touched) 16:54:05
@emilazy:matrix.orgemilywell, the large integers will still get clobbered precision-wise16:54:23
@emilazy:matrix.orgemilythat's sort of inevitable though16:54:32
@emilazy:matrix.orgemilyand why people who put large integers into JSON put them in strings generally16:54:42
@jade_:matrix.orgjade_ yes, i just mean that they had it coming to a degree; having any json parsing error out is unfortunate 16:54:52
@emilazy:matrix.orgemilyNixpkgs just does the funny thing because of Nix's lack of useful parsing functions16:54:53
@emilazy:matrix.orgemilyright16:54:56
@emilazy:matrix.orgemily I will probably prepare a revert of that fromJSON change in the absence of strong objection / someone who wants to try and make it do the same for negative integers 16:55:24
@emilazy:matrix.orgemilyI wish someone had told Douglas Crockford what semantics are16:55:39

Show newer messages


Back to Room ListRoom Version: 10