Remix.run Logo
mbac32768 14 hours ago

It's astonishing how involved a fucking modern JSON library becomes.

The once "very simple" C++ single-header JSON library by nlohmann is now

* 13 years old

* is still actively merging PRs (last one 5 hours ago)

* has 122 __million__ unit tests

Despite all this, it's self-admittedly still not the fastest possible way to parse JSON in C++. For that you might want to look into simdjson.

Don't start your own JSON parser library. Just don't. Yes you can whiteboard one that's 90% good enough in 45 minutes but that last 10% takes ten thousand man hours.

kstenerud 3 hours ago | parent | next [-]

I did write one, but I needed to because the already-written data must be recoverable on a crash (to be able to recover partially written files) since this is in a crash reporter - and also the encoder needs to be async-safe.

https://github.com/kstenerud/KSCrash/blob/master/Sources/KSC...

And yeah, writing a JSON codec sucks.

So I'm in the process of replacing it with a BONJSON codec, which has the same capabilities, is still async-safe and crash resilient, and is 35x faster with less code.

https://github.com/kstenerud/ksbonjson/blob/main/library/src...

https://github.com/kstenerud/ksbonjson/blob/main/library/src...

vovavili 10 hours ago | parent | prev | next [-]

I am very surprised to hear the unit testing statistic. What kind of unholy edge cases would JSON parsing require to make it necessary to cover 122 million variations?

kstenerud 3 hours ago | parent [-]

The more speed optimizations you put in, the gnarlier the new edge cases that pop up.

codr7 10 hours ago | parent | prev | next [-]

Yeah, but as long as I'm not releasing in public, I don't need to support 20 different ways of parsing.

That's the thing with reinventing wheels, a wheel that fits every possible vehicle and runs well in any possible terrain is very difficult to build. But when you know exactly what you need it's a different story.

modeless 9 hours ago | parent | prev | next [-]

This may say more about C++ than JSON

0x000xca0xfe 8 hours ago | parent [-]

The best language to handle unusual JSON correctly would probably be Python. It has arbitrary size integers, mpmath for arbitrary precision floats and good Unicode support.

EasyMark 13 hours ago | parent | prev | next [-]

Yeah I use this and I think most of friends do too :)

typpilol 13 hours ago | parent | prev | next [-]

122 million unit tests? What?

fHr 12 hours ago | parent | prev [-]

holy shit