Boost logo

Boost :

From: Brooks Prumo (brooks_at_[hidden])
Date: 2020-09-15 01:54:38


Hi everyone, this is my first time mailing the Boost developer list, and
also submitting a review. Thank you in advance for understanding any issues
it may have!

I'm writing to review Boost JSON. I've been using it very lightly for the
last week or so. My usage has been exclusively on embedded MCUs (ARM Cortex
M4, compiling with ARM GCC 9 with C++17), which I'm guessing hasn't been
the common case so far. Here's a list of things that matter a lot to me:

- Compile from source. Boost JSON passes.

- No exceptions. C++ exceptions are turned off, so all libraries I use must
support not throwing. Boost JSON passes.

- No iostreams/locale. If a library uses iostreams, my binary jumps ~220 KB
which is a deal breaker. Boost JSON passes.

- Binary size matters a lot, since onboard Flash is very limited. I am
using a "big" MCU, and that means my whole binary must be under ~512 KB.
Right now Boost JSON is not great. In doing a simple serialization and
parse, the library itself adds ~58 KB to my .text section. This is OK for
now, but surprisingly big. I know the team is aware of this and has some
ideas to reduce the binary size. I will likely need those fixes to actually
port my app to Boost JSON.

- Control over the sizes of any "large" stack buffers. Boost JSON passes.

- No external dependencies that do not meet the above requirements. Boost
JSON passes.

With this, Boost JSON is an ACCEPT from me.

THe biggest reason for me is that the API is nice to work with. I started
off with Nlohmann, but the binary size was too big due to iostreams. I'm
currently using RapidJSON, and it's definitely not easy to use. In my app,
JSON is not in the hot path. I want a library that is easy to use and meets
my requirements above. I greatly appreciate being able to use a modern C++
library.

And answers to the other questions:

  - What is your evaluation of the design?

So far so good. I do not have complicated JSON uses though.

  - What is your evaluation of the implementation?

I've only looked at the implementation when it comes to binary size.

  - What is your evaluation of the documentation?

Documentation is nice. I personally would enjoy more examples, as that is
how I commonly learn new libraries.

  - What is your evaluation of the potential usefulness of the library?

HUGE! I haven't come across another modern C++ JSON library that'll work in
the embedded space I live in. It's really exciting!

  - Did you try to use the library? With which compiler(s)? Did you have
any problems?

Yep! I used ARM GCC 9.2.1 with C++17. No issues with compilation.

  - How much effort did you put into your evaluation? A glance? A quick
reading? In-depth study?

I'd say my evaluation is "initial". I've used it in a way that mimics my
real usage, but haven't used many aspects of the whole library.

  - Are you knowledgeable about the problem domain?

Minimally. Just basic JSON knowledge.

Thank you!
Brooks


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk