3 ms·
To see how this fares against native code, I ported their benchmark to Rust's JSON library https://serde.rs/ https://serde.rs/. Disclaimer: I am a maintainer of
by dtolnay 8y ago
To see how this fares against native code, I ported their benchmark to Rust's JSON library https://serde.rs/ https://serde.rs/. Disclaimer: I am a maintainer of Serde.
Numbers and graphs: https://github.com/serde-rs/json-benchmark/tree/gojay#serde https://github.com/serde-rs/json-benchmark/tree/gojay#serde
Rust source code: https://github.com/serde-rs/json-benchmark/blob/gojay/src/lib.rs https://github.com/serde-rs/json-benchmark/blob/gojay/src/li...
TL;DR GoJay ranges from 20% slower to 2.7x slower depending on workload.
- IshKebab 8y agoGo is "native code" but anyway nice work!
- Groxx 8y agoAs always, it's a range. Go has a runtime which you cannot control which schedules your code when it feels like it and a garbage collector. Rust has neither. Sure, Go isn't parsing and interpreting its files at runtime. But neither does Python, so I'm not sure that's a meaningful line to draw.
- abiox 8y ago> Sure, Go isn't parsing and interpreting its files at runtime afaik, referring to something as "native code" just indicates it isn't compiled to/executing as bytecode. not anything to do with gc, runtime, etc.
- Groxx 8y agoDepends on who you ask. As demonstrated by literally every commenter in this thread so far. Besides, define bytecode. Once it has run through a JIT and diverged from the on-disk representation, is it now native? How is it distinguishable from a binary that detects your CPU architecture and executes different branches of code? What about other forms of self-modifying code? There are cases where an easy argument can be made (e.g. Java, which has a separately-supplied VM to run your bytecode... but then where's the line with DLLs?), but there isn't an unambiguous line in the sand here. At any line you can produce a new system that straddles it (e.g. a JAR which ships with its own VM. the VM is native code, is the binary now native or not?), and often there are already widely-used examples.
- akmittal 8y agoIs serde best in rust world.
- staticassertion 8y agoSerde is definitely the standard for rust. There's another project, pikkr, that takes a different approach that can work well for specific workloads: https://github.com/pikkr/pikkr https://github.com/pikkr/pikkr