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 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.
- 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 wallon 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.
Latest per-workload status
| Workload | Wall ratio (latest) | RSS ratio (latest) | Parity gate | Last 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.
| Workload | C (s) | lua-rs (s) | luars (s) | lua-rs / C | luars / C | Note |
|---|---|---|---|---|---|---|
| fannkuch_redux | 2.29 | 4.75 | 2.69 | 2.07× | 1.17× | |
| binary_trees | 1.72 | 4.53 | 1.32 | 2.63× | 0.77× | GC/alloc-heavy |
| nbody | 1.77 | 3.72 | 1.99 | 2.10× | 1.12× | |
| spectral_norm | 0.33 | 0.59 | 0.35 | 1.79× | 1.06× | |
| mandelbrot | 0.52 | 0.93 | 0.56 | 1.79× | 1.08× | |
| partial_sums | 0.18 | 0.31 | 0.20 | 1.72× | 1.11× | |
| fibonacci | 2.39 | 4.45 | 2.31 | 1.86× | 0.97× | |
| binarytrees (own) | 0.40 | 0.94 | 0.33 | 2.35× | 0.82× | GC/alloc-heavy |
| closure_ops | 0.17 | 0.34 | 0.17 | 2.00× | 1.00× | |
| mandelbrot_long | 0.80 | 1.46 | 0.85 | 1.82× | 1.06× | |
| string_ops_long | 0.78 | 0.99 | 0.86 | 1.27× | 1.10× | |
| table_ops_long | 2.49 | 0.96 | 0.59 | 0.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.
| When | Commit | Subject | Workload | Wall ratio | RSS ratio | Runs |
|---|