# Lux Language Benchmark Results

Generated: Feb 16 2026

## Environment
- **Platform**: Linux x86_64 (NixOS)
- **Lux**: Compiled via C backend + gcc -O3
- **Tools**: hyperfine, poop
- **Comparison**: C (gcc), Rust (rustc+LLVM), Zig (LLVM)

## Quick Start

```bash
nix run .#bench        # Full hyperfine comparison
nix run .#bench-poop   # Detailed CPU metrics
nix run .#bench-quick  # Just Lux vs C
```

## CPU Benchmark Results

### hyperfine (Statistical Timing)

```
Summary
  /tmp/fib_lux ran
    1.03 ± 0.08 times faster than /tmp/fib_c
    1.47 ± 0.04 times faster than /tmp/fib_rust
    1.67 ± 0.05 times faster than /tmp/fib_zig
```

| Binary | Mean | Std Dev | vs Lux |
|--------|------|---------|--------|
| **Lux (compiled)** | 28.1ms | ±0.6ms | baseline |
| C (gcc -O3) | 29.0ms | ±2.1ms | 1.03x slower |
| Rust | 41.2ms | ±0.6ms | 1.47x slower |
| Zig | 47.0ms | ±1.1ms | 1.67x slower |

### poop (Detailed CPU Metrics)

| Metric | C | Lux | Rust | Zig |
|--------|---|-----|------|-----|
| Wall Time | 29.0ms | 29.2ms | 42.0ms | 48.1ms |
| CPU Cycles | 53.1M | 53.2M | 78.2M | 90.4M |
| Instructions | 293M | 292M | 302M | 317M |
| Cache Misses | 4.39K | 4.62K | 6.47K | 340 |
| Branch Misses | 28.3K | 32.0K | 33.5K | 29.6K |
| Peak RSS | 1.56MB | 1.63MB | 2.00MB | 1.07MB |

## Why Lux Matches/Beats C, Rust, Zig

### The Key: gcc's Recursion Transformation

Lux compiles to C, which gcc optimizes aggressively. For the Fibonacci benchmark:

**Rust/Zig (LLVM)** keeps recursive calls:
```asm
call   fib    ; actual recursive call in hot path
```

**Lux/C (gcc)** transforms to loops:
```asm
; No recursive calls - fully loop-transformed
; Uses registers as accumulators
```

### Instruction Count Tells the Story

- **Lux/C**: 292-293M instructions executed
- **Rust**: 302M instructions (+3%)
- **Zig**: 317M instructions (+8%)

More instructions = more work = slower execution.

## HTTP Benchmarks

For HTTP server benchmarks, use established tools:

### TechEmpower Framework Benchmarks
The industry standard: https://www.techempower.com/benchmarks/

### Standard HTTP Benchmark Tools

```bash
# wrk - modern HTTP benchmarking
wrk -t4 -c100 -d10s http://localhost:8080/

# ab (Apache Bench) - classic tool
ab -n 10000 -c 100 http://localhost:8080/

# hey - written in Go
hey -n 10000 -c 100 http://localhost:8080/
```

### Reference Implementations

For fair HTTP comparisons, use minimal stdlib servers:

| Language | Command |
|----------|---------|
| Go | `go run` with `net/http` |
| Rust | `cargo run` with `std::net` or hyper |
| Node.js | `node` with `http` module |
| Python | `python -m http.server` |

HTTP benchmarks measure I/O patterns more than language speed. Use established frameworks for meaningful comparisons.

## Reproducing Results

```bash
# Enter dev shell
nix develop

# Compile all
cargo run --release -- compile benchmarks/fib.lux -o /tmp/fib_lux
gcc -O3 benchmarks/fib.c -o /tmp/fib_c
rustc -C opt-level=3 -C lto benchmarks/fib.rs -o /tmp/fib_rust
zig build-exe benchmarks/fib.zig -O ReleaseFast -femit-bin=/tmp/fib_zig

# Run benchmarks
hyperfine --warmup 3 --runs 10 '/tmp/fib_lux' '/tmp/fib_c' '/tmp/fib_rust' '/tmp/fib_zig'
poop '/tmp/fib_c' '/tmp/fib_lux' '/tmp/fib_rust' '/tmp/fib_zig'
```

## Caveats

1. **Micro-benchmark**: Fibonacci tests recursion optimization, not general performance
2. **gcc-specific**: Results depend on gcc's aggressive loop transformation
3. **No allocation**: fib doesn't test memory management (Perceus RC)
4. **Single-threaded**: No concurrency testing
5. **Linux-specific**: poop requires Linux perf counters

## When Lux Won't Be Fastest

| Scenario | Likely Winner | Why |
|----------|---------------|-----|
| Simple recursion | **Lux/C** | gcc's strength |
| SIMD/vectorization | Rust/Zig | Explicit intrinsics |
| Async I/O | Rust (tokio) | Mature runtime |
| Memory-heavy | Zig | Allocator control |
| Unsafe operations | C | No safety checks |
