lua-rs Performance History

Commit-keyed bench trajectory generated from harness/evidence/ledger.jsonl. Each point is one compare.sh run; the y-axis is the ratio of lua-rs to reference lua-c on the same workload. Parity at 1.00×.

Generated 2026-05-25T03:04:04+00:00
1046 measurements over 36 commits
Auto-refresh enabled

Wall-time geomean
1.27×
over 8 workloads at latest commit
RSS geomean
1.96×
resident-set vs reference lua-c
Best workload
0.38×
table_ops_long
Worst workload
2.07×
binarytrees

Wall-time ratio per workload

Ratio = lua-rs wall time ÷ reference lua-c wall time on the same workload. Lower is better; 1.00× is parity. Click a legend chip to mute that series. Off-screen points show as small triangles at the top edge.

y-max window
Tool
harness/bench/compare.sh · 3–5 runs per commit, min wall picked
Reference
PUC-Rio Lua 5.4.7 built from reference/lua-c/
Workloads
fibonacci · mandelbrot · binarytrees · closure_ops · table_ops · table_ops_long · string_ops · string_ops_long
Reading
Each point's y-value = lua-rs wall / lua-c wall on the matching workload, at the commit being benchmarked.

RSS ratio per workload

Ratio = lua-rs peak resident-set ÷ reference lua-c peak resident-set on the same workload. Lower is better; 1.00× is parity.

y-max window

Latest per-workload status

WorkloadWall ratio (latest)RSS ratio (latest)Parity gateLast commit

External comparison — vs CppCXY/luars

One-off head-to-head (not part of the per-commit time series) against CppCXY/lua-rs — a separate Rust Lua runtime (Lua 5.5, with notable unsafe), raised in issue #12. Ratio = wall time ÷ reference C Lua 5.4.7; lower is better, <1.00× beats C. Output asserted byte-identical to reference C (drift flagged). Reproduce with harness/bench/compare_luars.sh.

WorkloadC (s)lua-rs (s)luars (s)lua-rs / Cluars / CNote
fannkuch_redux2.294.752.692.07×1.17×
binary_trees1.724.531.322.63×0.77×GC/alloc-heavy
nbody1.773.721.992.10×1.12×
spectral_norm0.330.590.351.79×1.06×
mandelbrot0.520.930.561.79×1.08×
partial_sums0.180.310.201.72×1.11×
fibonacci2.394.452.311.86×0.97×
binarytrees (own)0.400.940.332.35×0.82×GC/alloc-heavy
closure_ops0.170.340.172.00×1.00×
mandelbrot_long0.801.460.851.82×1.06×
string_ops_long0.780.990.861.27×1.10×
table_ops_long2.490.960.590.39×0.24×lua-rs & luars both beat C; luars output diverged*
Geomean vs C
lua-rs = 1.68×  ·  luars = 0.90× (n=12)
Machine
Apple M3 Max · macOS arm64 · best-of-5 min wall · release builds
Reading
lua-rs leads only on table_ops (beats C); luars's edge concentrates on GC/alloc-heavy workloads (binary_trees), where lua-rs peak RSS is also markedly higher (402 MB vs 72 MB at trees depth 15).
Caveat
* luars output diverged on table_ops_long (likely a 5.5 vs 5.4 table semantic), so its number there is not fully trustworthy. macOS is the friendliest platform for both Rust impls; Linux/Windows typically shift ratios upward.

Recent runs

All bench measurements from harness/evidence/ledger.jsonl, newest first.

WhenCommitSubjectWorkloadWall ratioRSS ratioRuns