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.
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.
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.
Numbers and graphs: https://github.com/serde-rs/json-benchmark/tree/gojay#serde
Rust source code: 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.