...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
These libraries are not comparable. The output of the simdjson parser is a read-only structure. In other words, it can't be changed, and the only way to create one is by parsing a JSON string. On the other hand, Boost.JSON allows you to modify the container holding the parsed JSON, or even build a JSON document from scratch through the container interface.
The purpose of this library is to enable algorithms which implement JSON
functionality in their public interfaces to be interoperable, by providing
a value
type that meets the bar for vocabulary type suitability. Parsing directly
into a user defined type offers some advantages but is not the goal of
the library. However, users who wish to parse directly into their own
types may implement a custom handler for this purpose.
Using standard allocators would require that value
be declared as a class
template, which would impose an additional compilation burden. By avoiding
the template, most of the function definitions in the library can be
excluded from the headers and emitted in a separate static or dynamic
library.
storage_ptr
over polymorphic_allocator
?
polymorphic_allocator
treats
the memory resource as a reference with respect to ownership. Boost.JSON
uses a reference counted smart pointer container to simplify the lifetime
management of memory resources. In addition to being reference counted,
storage_ptr
can function as an uncounted reference wrapper around a memory_resource
.
string
instead of std::string
?"
The string provided by the library uses the storage_ptr
allocator model,
has the same interface on all C++ versions, and has an optimized class
layout to keep the size of JSON values small. string
also implements an improved
interface that replaces extraneous overloads with ones that use string_view
.