1# 0.5 2 3## Highlights 4 5Performance 6* Faster and simpler UTF-8 validation with the lookup4 algorithm https://github.com/simdjson/simdjson/pull/993 7* We improved the performance of simdjson under Visual Studio by about 25%. Users will still get better performance with clang-cl (+30%) but the gap has been reduced. https://github.com/simdjson/simdjson/pull/1031 8 9Code usability 10* In `parse_many`, when parsing streams of JSON documetns, we give to the users runtime control as to whether threads are used (via the parser.threaded attribute). https://github.com/simdjson/simdjson/issues/925 11* Prefixed public macros to avoid name clashes with other libraries. https://github.com/simdjson/simdjson/issues/1035 12* Better documentation regarding package managers (brew, MSYS2, conan, apt, vcpkg, FreeBSD package manager, etc.). 13* Better documentation regarding CMake usage. 14 15Standards 16* We improved standard compliance with respect to both the JSON RFC 8259 and JSON Pointer RFC 6901. We added the at_pointer method to nodes for standard-compliant JSON Pointer queries. The legacy `at(std::string_view)` method remains but is deprecated since it is not standard-compliant as per RFC 6901. 17* We removed computed GOTOs without sacrificing performance thus improving the C++ standard compliance (since computed GOTOs are compiler-specific extensions). 18* Better support for C++20 https://github.com/simdjson/simdjson/pull/1050 19 20# 0.4 21 22## Highlights 23 24- Test coverage has been greatly improved and we have resolved many static-analysis warnings on different systems. 25- We added a fast (8GB/s) minifier that works directly on JSON strings. 26- We added fast (10GB/s) UTF-8 validator that works directly on strings (any strings, including non-JSON). 27- The array and object elements have a constant-time size() method. 28- Performance improvements to the API (type(), get<>()). 29- The parse_many function (ndjson) has been entirely reworked. It now uses a single secondary thread instead of several new threads. 30- We have introduced a faster UTF-8 validation algorithm (lookup3) for all kernels (ARM, x64 SSE, x64 AVX). 31- C++11 support for older compilers and systems. 32- FreeBSD support (and tests). 33- We support the clang front-end compiler (clangcl) under Visual Studio. 34- It is now possible to target ARM platforms under Visual Studio. 35- The simdjson library will never abort or print to standard output/error. 36 37# 0.3 38 39## Highlights 40 41- **Multi-Document Parsing:** Read a bundle of JSON documents (ndjson) 2-4x faster than doing it 42 individually. [API docs](https://github.com/simdjson/simdjson/blob/master/doc/basics.md#newline-delimited-json-ndjson-and-json-lines) / [Design Details](https://github.com/simdjson/simdjson/blob/master/doc/parse_many.md) 43- **Simplified API:** The API has been completely revamped for ease of use, including a new JSON 44 navigation API and fluent support for error code *and* exception styles of error handling with a 45 single API. [Docs](https://github.com/simdjson/simdjson/blob/master/doc/basics.md#the-basics-loading-and-parsing-json-documents) 46- **Exact Float Parsing:** Now simdjson parses floats flawlessly *without* any performance loss, 47 thanks to [great work by @michaeleisel and @lemire](https://github.com/simdjson/simdjson/pull/558). 48 [Blog Post](https://lemire.me/blog/2020/03/10/fast-float-parsing-in-practice/) 49- **Even Faster:** The fastest parser got faster! With a [shiny new UTF-8 validator](https://github.com/simdjson/simdjson/pull/387) 50 and meticulously refactored SIMD core, simdjson 0.3 is 15% faster than before, running at 2.5 GB/s 51 (where 0.2 ran at 2.2 GB/s). 52 53## Minor Highlights 54 55- Fallback implementation: simdjson now has a non-SIMD fallback implementation, and can run even on 56 very old 64-bit machines. 57- Automatic allocation: as part of API simplification, the parser no longer has to be preallocated-- 58 it will adjust automatically when it encounters larger files. 59- Runtime selection API: We've exposed simdjson's runtime CPU detection and implementation selection 60 as an API, so you can tell what implementation we detected and test with other implementations. 61- Error handling your way: Whether you use exceptions or check error codes, simdjson lets you handle 62 errors in your style. APIs that can fail return simdjson_result<T>, letting you check the error 63 code before using the result. But if you are more comfortable with exceptions, skip the error code 64 and cast straight to T, and exceptions will be thrown automatically if an error happens. Use the 65 same API either way! 66- Error chaining: We also worked to keep non-exception error-handling short and sweet. Instead of 67 having to check the error code after every single operation, now you can *chain* JSON navigation 68 calls like looking up an object field or array element, or casting to a string, so that you only 69 have to check the error code once at the very end. 70