Iterative Fibonacci
Compute fib(100k) mod 2^64 with hand-rolled integer-to-decimal. Tests integer arithmetic and tight-loop dispatch.
Compile time · median (cold)
Full statistics
| Runner | N | Compile | Runtime | P95 | Stddev | RSS | vs pipit | Status |
|---|---|---|---|---|---|---|---|---|
| Native Gocompiled | 7 | 109 ms | 114 µs | 115 µs | 1.19 µs | 83 MiB | 215× | OK |
| Pipitbytecode VM | 7 | 505 µs | 3.00 ms | 4.14 ms | 439 µs | 58 MiB | 1.00× | OK |
| CPython 3.14bytecode VM | 7 | 246 µs | 18.8 ms | 19.2 ms | 238 µs | n/a | 0.49× | OK |
| PyPy 7.3tracing JIT | 7 | 183 µs | 10.3 ms | 10.7 ms | 382 µs | n/a | 0.36× | OK |
| tengobytecode VM | 0 | n/a | n/a | n/a | n/a | n/a | n/a | no data |
| scriggobytecode VM | 7 | 130 µs | 15.4 ms | 18.3 ms | 1.02 ms | 64 MiB | 0.26× | OK |
| mvmbytecode VM | 7 | 207 µs | 19.0 ms | 30.6 ms | 4.11 ms | 64 MiB | 0.41× | OK |
| yaegiAST walker | 7 | 228 µs | 34.7 ms | 43.8 ms | 6.28 ms | 64 MiB | 0.45× | OK |
Workload & symmetry rules
Workload
100,000 iterations of next = (a + b) & 0xFFFFFFFFFFFFFFFF, then hand-rolled int-to-decimal of the result.
Symmetry rules
- Hand-rolled int-to-decimal in every runner (no
strconv.FormatUint, nostr(), nof"{n}"). - Pure integer arithmetic; no
mathcalls. - Explicit 64-bit mask in Python so it matches Go's
uint64wrap.
Why this is a fair interpreter benchmark
Every step of the work is interpreter-bound; halving dispatch overhead halves the wall time. There is no library call on the hot path.
Source code
pipit / Go
pipit_source.gonative Go
native_main.goCPython / PyPy
cpython.py