Skip to content

Conversation

@pull
Copy link

@pull pull bot commented Aug 27, 2025

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.3)

Can you help keep this open source service alive? 💖 Please sponsor : )

etiennebarrie and others added 12 commits August 27, 2025 10:01
Helps with pretty printting performance:

```
== Encoding activitypub.json (52595 bytes)
ruby 3.4.2 (2025-02-15 revision ruby/json@d2930f8e7a) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
               after     1.746k i/100ms
Calculating -------------------------------------
               after     17.481k (± 1.0%) i/s   (57.20 μs/i) -     89.046k in   5.094341s

Comparison:
              before:    16038.4 i/s
               after:    17481.1 i/s - 1.09x  faster

== Encoding citm_catalog.json (500298 bytes)
ruby 3.4.2 (2025-02-15 revision ruby/json@d2930f8e7a) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
               after    60.000 i/100ms
Calculating -------------------------------------
               after    608.157 (± 2.3%) i/s    (1.64 ms/i) -      3.060k in   5.034238s

Comparison:
              before:      525.3 i/s
               after:      608.2 i/s - 1.16x  faster

== Encoding twitter.json (466906 bytes)
ruby 3.4.2 (2025-02-15 revision ruby/json@d2930f8e7a) +YJIT +PRISM [arm64-darwin24]
Warming up --------------------------------------
               after   160.000 i/100ms
Calculating -------------------------------------
               after      1.606k (± 0.5%) i/s  (622.70 μs/i) -      8.160k in   5.081406s

Comparison:
              before:     1410.3 i/s
               after:     1605.9 i/s - 1.14x  faster
```

ruby/json@f0dda861c5
Because both strings and symbols keys are serialized the same,
it always has been possible to generate documents with duplicated
keys:

```ruby
>> puts JSON.generate({ foo: 1, "foo" => 2 })
{"foo":1,"foo":2}
```

This is pretty much always a mistake and can cause various
issues because it's not guaranteed how various JSON parsers
will handle this.

Until now I didn't think it was possible to catch such case without
tanking performance, hence why I only made the parser more strict.

But I finally found a way to check for duplicated keys cheaply enough.
@pull pull bot locked and limited conversation to collaborators Aug 27, 2025
@pull pull bot added the ⤵️ pull label Aug 27, 2025
@pull pull bot merged commit 5ff7b2c into turkdevops:master Aug 27, 2025
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants