Sudoku solver, 100 boards
Backtracking solver across 100 medium-difficulty boards. End-to-end favours pipit; inner-loop flips the verdict.
Compile time · median (cold)
Full statistics
| Runner | N | Compile | Runtime | P95 | Stddev | RSS | vs pipit | Status |
|---|---|---|---|---|---|---|---|---|
| Native Gocompiled | 7 | 109 ms | 1.12 ms | 1.13 ms | 2.98 µs | 1.62 GiB | 73.8× | OK |
| Pipitbytecode VM | 7 | 1.48 ms | 18.4 ms | 18.7 ms | 99.2 µs | 591 MiB | 1.00× | OK |
| CPython 3.14bytecode VM | 7 | 512 µs | 26.2 ms | 26.3 ms | 88.7 µs | n/a | 0.35× | OK |
| PyPy 7.3tracing JIT | 7 | 410 µs | 25.9 ms | 28.0 ms | 951 µs | n/a | 0.28× | OK |
| tengobytecode VM | 7 | 273 µs | 53.4 ms | 54.1 ms | 465 µs | 1.68 GiB | 0.18× | OK |
| scriggobytecode VM | 0 | n/a | n/a | n/a | n/a | n/a | n/a | unsupported |
| mvmbytecode VM | 7 | 438 µs | 39.8 ms | 41.3 ms | 590 µs | 1.68 GiB | 0.30× | OK |
| yaegiAST walker | 7 | 491 µs | 114 ms | 122 ms | 9.82 ms | 1.68 GiB | 0.33× | OK |
Workload & symmetry rules
Workload
Solve 100 9×9 sudoku boards via classical backtracking with most-constrained-cell selection. Print a 32-bit fingerprint of the concatenated solutions.
Symmetry rules
- Pure backtracking: no SAT solver, no constraint propagation library.
- Boards stored as flat 81-element arrays.
Why end-to-end and inner-loop disagree
End-to-end includes interpreter startup. Inner-loop amortises it. On this workload, pipit's startup is fast enough to win the e2e race despite slower hot-path code; once startup is amortised, PyPy's JIT pulls ahead.
Source code
pipit / Go
pipit_source.gonative Go
native_main.goCPython / PyPy
cpython.pytengo
script.tengo