Update rebar.config deps (major)#144
Open
renovate[bot] wants to merge 1 commit into
Open
Conversation
76e0764 to
50f3d12
Compare
50f3d12 to
2eb5e2c
Compare
2eb5e2c to
7305d49
Compare
7305d49 to
e8bdb9a
Compare
e8bdb9a to
b5f4755
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
1.1.2→2.0.13.2.6→5.0.4Release Notes
davisp/jiffy (jiffy)
v2.0.1Compare Source
What's Changed
Full Changelog: davisp/jiffy@2.0.0...2.0.1
v2.0.0Compare Source
The changelog is at the bottom. What follows are some general highlights.
Performance
(I used https://github.com/nickva/bench Benchee-based json benchmark to test performance. Any perf
numbers mentioned below are from running that. There are some individual benchmarks referred to by
name such as "Issue 90" or "Canada", those are just types of inputs used in benchmarking, some have
mostly numbers, some mostly strings, some are mixed)
SIMD vectorization for ASCII scan-ahead loops in both decoder string parsing and encoder
string emission. This meant replacing the byte-at-a-time scans with 16/32-byte chunked compares.
The most interesting part is it was done without writing a single line of assembly, just relying
on compiler auto-vectorization. This showed a 15x performance improvement on encoding large
strings like in the "Issue 90" benchmark. To get even better auto-vectorizer behavior, it's
advisable to set
-march=nativeor-march=x86-64-v3. That can make the auto-vectorizers onrecent compilers switch to using 256bit AVX2 registers and instructions.
UTF-8 skip-ahead in encoder and faster UTF-8 validation. This is like the scan-ahead loop for
ASCII, but it's for UTF-8 validation. This helps quite a bit on non-ASCII, Unicode-heavy inputs.
"UTF-8 unescaped" benchmark got a 5.8x speedup from it.
Use Ryu for number encoding. This is the exact Ryu version from the latest Erlang/OTP release
with all the updates and tweaks they added. This makes the float output the same as Erlang's.
However, this means the output is not exactly the same as before for Jiffy (we used to emit more
fractional digits, now it switches to the scientific notation a bit earlier). Number heavy
benchmarks like "Canada" showed a 2x speedup.
ffc.h for number parsing in the decoder. This is the fastest C number parser around at this
time. I worked with the upstream author to add a new API to it parse JSON numbers as a single call
which returns back either an integer or a double, as opposed pre-parsing to figure out which is
which first (kolemannix/ffc.h#22). Using this library yielded a 4x
speedup in the number-heavy "Canada" benchmark on decoding.
Faster array and map creation for building the result term in fewer steps. (In the processes
discovered that maps with duplicates created from NIFs were subtly broken in Erlang
erlang/otp#10976. The fix is now merged and should be in the recent patch
Erlang releases). This bulk creation improved decoding across the board. Some examples are
2.5x for "JSON Generator", 2.6x for "Github" and 3.3x for "Blockchain". Most of those
a mixed inputs so number parsing and scan-ahead played a role in there as well.
Branch hints (
JIFFY_LIKELY/JIFFY_UNLIKELY) on encoder hot paths. I saw QuickJS librarydoing this, so experimented around and saw few percent speedup from it.
Unity build. Having handled a few issues over the years related to enabling, disabling and
detecting LTO (Link-time optimization) compiler features, decided to side-step it and go with a
unity build. This is where we include all the source file into one
jiffy.cfile and compilethat. We get all the benefits of LTO but without having to juggle linker flags.
Yielding & scheduler behavior
Reduction count bumped to 4000 to match current Erlang VM defaults
Bytes per reduction lowered so cooperative yields fire more
often on long input. This results in better latency under contention without a
measurable throughput hit.
Since Jiffy is a NIF, it's crucial for it to never block schedulers and always yield appropriately.
As the concurrency increases it should degrade gracefully in proportion to the applied load. This is
not a trivial task to accomplish in a NIF, in general. Some json library NIFs use dirty schedulers,
however in cases where Jiffy is used that wouldn't work as that is still a limited resource and
during high concurrency it would lead to bottlenecks.
A separate benchmark,
bench_scheduling.shin https://github.com/nickva/bench runs concurrent JSONencoding and decoding scaled by the number of schedulers. Testing with a few Erlang json libraries
shows something like this:
There we measure both the latency of sending a term back and forth between two encoder/decoder
processes, as well as the throughput (
nis how many times we managed to do that).Features
Pre-encoded JSON — embed already-encoded JSON fragments directly in a value being encoded,
saving a round-trip through the decoder. Use
{json, IoData}terms and they will be embedded inthe emitted stream as is. This was a surprisingly popular feature over the years. Paul J. Davis
(Jiffy's original author) suggested a nice and quick patch to make it work so I went with that.
Encode UTF-8 atoms (on OTP 26+ only!) atoms with non-ASCII bytes now encode as their UTF-8
source. Unfortunately this is for OTP 26+ only.
Number-as-key encoding — integer/float map keys are encoded as string keys instead of
erroring. Both Python and Erlang/OTP's built-in json already does this.
Correctness & compliance
RFC 8259 100% compliance. A new test suite based on
nst/JSONTestSuiteis wired in and allconformance tests pass.
Big List of Naughty Strings (BLNS) added in the test mix.
Build & CI
OTP 21 is the new minimum.
C coverage checks added so the test suite reports per-file C line coverage; several uncovered
paths were closed during this work.
Changelog
Full Changelog: davisp/jiffy@1.1.3...2.0.0
v1.1.5Compare Source
What's Changed since 1.1.4
Fix uninitialized var access on allocation failure (thanks @qzhuyan)
OTP 29 Support
v1.1.4Compare Source
Release 1.1.4
Backport potential segfault in termstack #276
Full Changelog: davisp/jiffy@1.1.3...1.1.4
project-fifo/rebar3_lint (rebar3_lint)
v5.0.4Compare Source
What's Changed
Full Changelog: project-fifo/rebar3_lint@5.0.3...5.0.4
v5.0.3Compare Source
What's Changed
New Contributors
Full Changelog: project-fifo/rebar3_lint@5.0.2...5.0.3
v5.0.2Compare Source
What's Changed
Full Changelog: project-fifo/rebar3_lint@5.0.1...5.0.2
v5.0.1Compare Source
What's Changed
elvis_core5.x by @paulo-ferraz-oliveira in #81Full Changelog: project-fifo/rebar3_lint@4.2.3...5.0.1
v4.2.3Compare Source
What's Changed
elvis_coreconfiguration validation by @paulo-ferraz-oliveira in #72Full Changelog: project-fifo/rebar3_lint@4.2.2...4.2.3
v4.2.2Compare Source
What's Changed
Full Changelog: project-fifo/rebar3_lint@4.2.1...4.2.2
v4.2.1Compare Source
What's Changed
Full Changelog: project-fifo/rebar3_lint@4.2.0...4.2.1
v4.2.0Compare Source
What's Changed
Full Changelog: project-fifo/rebar3_lint@4.1.1...4.2.0
v4.1.1Compare Source
What's Changed
Full Changelog: project-fifo/rebar3_lint@4.1.0...4.1.1
v4.1.0Compare Source
What's Changed
Full Changelog: project-fifo/rebar3_lint@4.0.0...4.1.0
v4.0.0Compare Source
What's Changed
Full Changelog: project-fifo/rebar3_lint@3.2.6...4.0.0
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR was generated by Mend Renovate. View the repository job log.