3 ms·
Indeed, json maps are not supposed to be ordered so doing anything that depends on the order is bound to fail. This is the exact reason bencode (https://en.wik
by rakoo 7y ago
Indeed, json maps are not supposed to be ordered so doing anything that depends on the order is bound to fail.
This is the exact reason bencode (https://en.wikipedia.org/wiki/Bencode https://en.wikipedia.org/wiki/Bencode) was invented, and I still believe we can replace all uses of json by bencode and be better off it, because it solves all too common issues:
- bencoding maps are in lexicographical order of the keys, so no confusion possible for hashing/signing (a torrent id is the hash of a bencoding map)
- bencoding is binary friendly, in fact it must be because it stores the pieces hashes of the torrent
Why don't we use bencoding everywhere ?
- muldvarp 7y agoInteresting that your experience with Bencode was this positive. I've implemented a Bencode serializer/deserializer in Rust and here are a few things I've noticed: * It is very easy to parse/produce Bencode * It's probably fast * The specification is really bad * No float type * No string type, just byte sequences. This is especially bad because most/all dictionary keys will be utf-8 strings in practice but you can't rely on it * Integers are arbitrary length, most implementations just ignore this I think Bencode is an ok format for its use case, but I don't think it should be used instead of json.