Host
Intel Core Ultra 9 285K · 24 cores
Platform
linux/amd64
Go
go1.26.0
CPython
python:3.13-slim
PyPy
pypy:3.10-slim
Runs / combo
10 + 2 warmup

Expression evaluator

Tokenise then evaluate 10,000 arithmetic expressions (mixed +, -, *, /, parens).

Runtime · median per inner-loop window

median of 10 runs

Native Gocompiled
76.5 ms0.04×
Piko interpbytecode VM
2.15 sbaseline
CPython 3.13bytecode VM
1.43 s0.66×
PyPy 7.3tracing JIT
221 ms0.10×
Ttengobytecode VM
4.36 s2.02×
Sscriggobytecode VM
n/a
Mmvmbytecode VM
5.21 s2.42×
YyaegiAST walker
12.8 s5.93×

Full statistics

RunnerNCompileRuntimeP95StddevRSSvs pikoStatus
Native Gocompiled10180 ms76.5 ms78.1 ms1.51 ms145 MiB0.04×OK
Piko interpbytecode VM102.46 ms2.15 s2.35 s65.0 ms2.88 GiB1.00×OK
CPython 3.13bytecode VM10572 µs1.43 s1.46 s26.2 msn/a0.66×OK
PyPy 7.3tracing JIT10467 µs221 ms258 ms11.6 msn/a0.10×OK
tengobytecode VM10387 µs4.36 s4.42 s47.6 ms2.19 GiB2.02×OK
scriggobytecode VM0n/an/an/an/an/an/aunsupported
mvmbytecode VM10752 µs5.21 s5.32 s71.2 ms66 MiB2.42×OK
yaegiAST walker10730 µs12.8 s13.1 s190 ms67 MiB5.93×OK
Workload & symmetry rules

Workload

For each of 10,000 randomly-generated infix expressions: tokenise with a byte-loop lexer, parse via shunting-yard, evaluate over an integer stack.

Symmetry rules

  • Bring-your-own tokeniser, parser, evaluator. No eval(), no AST library.
  • Operands are 64-bit integers; division is integer division.
Source code