Home Expressions
Docs
Drivers Gateway SDKs Benchmarks
Changelog
GitHub
Blog Status Roadmap
← Back to benchmark index
Historical language snapshot December 27, 2025

Cross-Language Runtime Snapshot

PHP, Go, Zig, and Python benchmark notes recorded on December 27, 2025.

4

language/runtime tracks included in this archive

2.7x
PHP / Eloquent-like
single-query snapshot
4.7x
Go / GORM
batched path
2.0x
Zig / pg.zig
single-query comparison
7.6x
Python / asyncpg
PyO3 path

PHP Single-Query Snapshot

Native C extension wrapping Rust with the same no-batching query pattern as the Eloquent-like baseline.

DriverImplementationQueries/sRelative to Eloquent-like
qail-php (single)Extension plus Rust core31,2192.7x
Raw PDOPrepared statements31,2712.7x
Eloquent-likePDO plus model hydration11,537baseline

PHP interpretation

In this single-query configuration, the extension path tracked raw PDO throughput and stayed above the model-hydration baseline. The page is useful as a dated implementation note rather than a current landing page for the PHP surface.

Go CGO Snapshot

CGO calling a Rust static library with 1,000 queries per batch.

DriverImplementationQueries/sRelative to GORM
pgxPure Go, optimized239,0008.9x
qail-goCGO plus Rust core126,0004.7x
GORMORM baseline27,000baseline

Go interpretation

This run placed the CGO path between direct pgx and the ORM baseline, which makes the transport overhead visible without conflating it with ORM-layer work.

Zig single-query comparison setup

  • pg.zig uses the Extended Query protocol and parses typed responses.
  • qail-zig (initial) started with Simple Query mode and no response parsing, so the comparison was rerun.
  • The historical comparison below fixes the parsed-row count at 55,000 for both paths.

Zig Single-Query Comparison

DriverWork doneQueries/sRows parsed
qail-zigZig I/O plus Rust FFI, response parse33,86655,000
pg.zigPure Zig, response parse16,99055,000

Zig implementation notes

  • Simple Query uses one message rather than Parse, Bind, Execute, and Sync.
  • The Rust wire-protocol decoder is reused from qail-pg.
  • qail-zig reused buffers in this harness while pg.zig performed additional per-query allocation work.
  • The single-query ratio in this run was 33,866 q/s versus 16,990 q/s.

Cross-Language Snapshot

RuntimeQuery speedComparison baselineRust baseline share
Rust qail-pg354K q/s-100%
qail-zig34K q/s2.0x vs pg.zigN/A
qail-php (single)31K q/s2.7x vs Eloquent-like9%
qail-go (CGO)126K q/s4.7x vs GORM36%
qail-py (PyO3)122K q/s7.6x vs asyncpg35%

This archive combines several harnesses. Use the dedicated transport reports or current runtime reports when you need the canonical surface for one subsystem.