[HN Gopher] Sonic: A fast JSON serializing and deserializing lib... ___________________________________________________________________ Sonic: A fast JSON serializing and deserializing library Author : ngaut Score : 27 points Date : 2021-11-21 15:02 UTC (2 days ago) (HTM) web link (github.com) (TXT) w3m dump (github.com) | throwaway889900 wrote: | Seems like it's similar in performance to Jackson? | BeeOnRope wrote: | Just another case where a library tests and publishes results for | all competing libraries _slower_ than it, but none faster. | _cough_ simdjson [1] _cough_ | | --- | | [1] https://github.com/simdjson/simdjson | [deleted] | nemothekid wrote: | simdjson is listed thought. | memco wrote: | It is mentioned here: https://github.com/bytedance/sonic/blob | /a577eafc253adb943924..., but it isn't included in the | benchmarks graphs. Seems this repo is specifically focused on | Golang and isn't necessarily motivated by being the fastest | JSON [de]serializer on the planet. | craigching wrote: | There is this one though: | https://github.com/minio/simdjson-go | TheMagicHorsey wrote: | It seems its mostly written in assembly? I'd be worried about | portability, maintainability, and security. | | I'd be way more comfortable if it was written in C, or better yet | Rust. | scottlamb wrote: | It sounds like it essentially is written in C. INTRODUCTION.md | says: | | > As for insufficiency in compiling optimization of go | language, we decided to use C/Clang to write and compile core | computational functions, and developed a set of asm2asm tools | to translate the fully optimized x86 assembly into plan9 and | finally load it into Golang runtime. | | Github says it's 59.6% assembly and 6.5% C. Possibly the | assembly is just the checked-in result of compiling+translating | the C? | | Gross that they have to do this. I know the Go folks really | prioritize speed of compilation, but I wish they'd support | debug builds with their own backend and release builds with | LLVM so you could get this kind of performance when actually | writing Go. I see there have been a few attempts at Go + | general-purpose backend (gccgo, llgo, gollvm) but none seem to | use the official Go frontend written in Go, so I think they're | doomed to be second-class at best. | | edit: and/or, if the Go folks and GCC and/or LLVM coulds could | negotiate a shared ABI (not necessarily switching to the | platform's default C ABI but having "cc --abi=special-golang- | stack-copying-thing"), folks could just link against something | compiled in C/Rust/whatever without requiring this separate | compilation+translation step (the high-maintenance, high- | performance path) or CGo overhead (the easy but slow-for- | frequent-calls path). | latchkey wrote: | I really don't care what language it is written in. As long as | there is full test coverage, I'm happy. | | I've been a long time user of jsoniter and it is much faster | than the standard lib. It really makes a difference for the | work I do. If this is even faster and has tests, even better. | uncomputation wrote: | Since when is 635 KB "large"? I suppose it depends on your use | case, since they consider 400 B a small, they probably use lots | of JSON APIs for many small things. | unspecified wrote: | Small (400B, 11 keys, 3 layers) Medium (13KB, 300+ key, 6 | layers) Large (635KB, 10000+ key, 6 layers) | | I would be so happy to work somewhere where a 0.000635 GB json | file is "large". ___________________________________________________________________ (page generated 2021-11-23 23:00 UTC)