Benchmarks: Wyn vs Go vs Python
January 2026
We ran benchmarks against Go 1.23 and Python 3.12 on an M2 MacBook Air. All source code is in the benchmarks/ directory of the repo. Run them yourself with cd wyn/benchmarks && ./run.sh.
These are not cherry-picked. We picked common tasks and measured what happened.
Fibonacci(35) — recursive, no memoization
| Language | Time | Notes |
|---|---|---|
| Wyn | 52ms | TCC backend |
| Wyn (release) | 48ms | system cc -O3 |
| Go | 57ms | go build |
| Python | 3,200ms | CPython 3.12 |
Wyn and Go are in the same ballpark. Python is 60x slower, which is expected for tight recursive loops.
Spawn/goroutine 1M tasks
Fire off a million concurrent tasks that each increment a counter.
| Language | Time | Peak Memory |
|---|---|---|
| Wyn | 247ms | 2 MB |
| Go | 279ms | 12 MB |
Wyn's coroutines use 16KB stacks (pooled) vs Go's 8KB (growing). The work-stealing scheduler with batch stealing keeps things competitive. The memory difference is significant — 6x less for Wyn.
String concatenation (10K iterations)
Build a string by appending in a loop.
| Language | Time |
|---|---|
| Wyn | 19ms |
| Go | 15ms |
| Python | 8ms |
Go and Python both have optimized string builders. Wyn's arena allocator handles this reasonably but there's room for improvement with a dedicated StringBuilder path.
Binary size — hello world
| Language | Size |
|---|---|
| Wyn | 32KB |
| Go | 2.3MB |
| Rust | 300KB |
| Python | N/A (30MB runtime) |
Wyn compiles to C and links only what's used. Dead code stripping gets hello world down to 32KB.
Compilation speed
| Language | Time |
|---|---|
| Wyn (TCC) | 260ms |
| Wyn (release) | 220ms |
| Go | ~500ms |
| Rust | 5-30s |
TCC is the secret weapon for development iteration. Release builds use the system compiler with -O3.
What we're not claiming
Wyn is not faster than Go at everything. String handling is slower. We don't have a JIT. Our generics are basic. The garbage collector is an arena allocator, which means long-running servers need System.gc() calls or the HTTP handler's automatic arena reset.
The point isn't to be the fastest. It's to be fast enough while being simpler to write, build, and deploy.
All benchmark source code: github.com/wynlang/wyn/tree/main/benchmarks