For what it’s worth - I publish some simple non-serious benchmarks with my Datastar api, across a range of different backends. This one isn’t measuring raw rps numbers so much as doing quite a bit of real work per request translating 100kb slabs of HTML into event stream format data, and pushing it out over the wire.
All of the Zig implementations win this one easily, since they are doing zero allocation in-stream transforms.
Of all the Zig implementations, it’s pretty close, but stdlib + zio coroutines wins on rps, memory usage, and latency. The margins are small, except for latency which is significantly better with zio.
Http.zig performs admirably, considering its “age”, but I think we are at a point now where the new stdlib approach nudges ahead. It’s taken years to get there, which is a huge compliment to Karl’s work.
There may well be room for improvement there with zio, but as it stands, it’s comfortably in 1st place on this use case, so that’s good enough for me until Zig 1.0 rolls around.
Rust works fine, but the numbers are unimpressive.
On the same benchmarks, Go is at least 2 times slower, but that’s due to doing a whole lot of GC backed allocations and string munching per request. On the wire Go is fine.
JIT compiled Erlang is a bit slower than Go, but surprisingly posts very very good tail latency numbers anyway .. it’s 2nd only to zig+zio. It might be 200 year old code now, but does show that good design is always hard to beat.
Bun (pre rust fork) didn’t fare well on this benchmark. Not bad, but not good either.