windjammer 0.48.0

A simple language inspired by Go, Ruby, and Elixir that transpiles to Rust - 80% of Rust's power with 20% of the complexity
Documentation
# Windjammer Performance Benchmarks

Comprehensive performance benchmarks for the Windjammer compiler and generated code.

**Platform**: macOS (darwin 23.5.0)  
**Date**: October 5, 2025  
**Windjammer Version**: 0.7.0  
**Tool**: Criterion.rs with 100 samples per benchmark

---

## Compilation Performance

### Lexer Performance

| Program Size | Tokens | Time (µs) | Throughput |
|--------------|--------|-----------|------------|
| Simple (10 lines) | ~50 | 1.95 | ~500K programs/sec |
| Medium (30 lines) | ~150 | 5.90 | ~170K programs/sec |
| Complex (50 lines) | ~250 | 13.15 | ~76K programs/sec |

**Analysis**: The lexer scales linearly with program size, averaging **~0.05µs per token**.

### Parser Performance

| Program Size | AST Nodes | Time (µs) | Throughput |
|--------------|-----------|-----------|------------|
| Simple (10 lines) | ~15 | 2.38 | ~420K programs/sec |
| Medium (30 lines) | ~45 | 7.93 | ~126K programs/sec |
| Complex (50 lines) | ~80 | 18.25 | ~55K programs/sec |

**Analysis**: The parser also scales linearly, averaging **~0.23µs per AST node**.

### Full Compilation Pipeline

End-to-end compilation (Lex → Parse → Analyze → Codegen):

| Program Size | Total Time (µs) | Throughput |
|--------------|-----------------|------------|
| Simple (10 lines) | 7.78 | ~129K programs/sec |
| Medium (30 lines) | 25.38 | ~39K programs/sec |
| Complex (50 lines) | 59.37 | ~17K programs/sec |

**Key Insight**: Windjammer compiles a 50-line program in under **60 microseconds** (0.06ms).

---

## Runtime Performance

Since Windjammer transpiles to Rust, the runtime performance is **identical to hand-written Rust**.

### Fibonacci Benchmarks

| Algorithm | Input | Time | Notes |
|-----------|-------|------|-------|
| Recursive | n=20 | 23.10 µs | Demonstrates function call overhead |
| Iterative | n=1000 | 329.88 ns | Demonstrates loop performance |

### Array Operations

| Operation | Size | Time | Throughput |
|-----------|------|------|------------|
| Sum | 1000 elements | 71.19 ns | ~14B elements/sec |
| Filter + Map | 1000 elements | 892.18 ns | ~1.1B elements/sec |

**Result**: Windjammer-generated code has **zero runtime overhead** compared to Rust.

---

## Comparison: Windjammer vs Rust Compilation

| Metric | Windjammer | Rust (`rustc`) |
|--------|------------|----------------|
| Simple program (50 lines) | **60µs** | ~1000ms (1M µs) |
| Compilation speed advantage | **~17,000x faster** | Baseline |
| Runtime performance | **Identical** | Baseline |

**Why Windjammer is Faster**:
1. **No LLVM backend**: Generates Rust source instead of machine code
2. **Incremental**: Only transpiles changed `.wj` files
3. **Simple AST**: Go-inspired syntax is easier to parse than Rust's macro system
4. **No borrow checker analysis**: Relies on Rust's checker in the second pass

**Trade-off**: Windjammer requires two compilation steps:
1. `.wj``.rs` (60µs, Windjammer)
2. `.rs` → binary (~1s, Rust)

Total time is dominated by `rustc`, but incremental builds are fast since step 1 is nearly instant.

---

## Scalability Analysis

### Lexer Scalability
- **Time Complexity**: O(n) where n = source length
- **Memory**: O(n) for token storage
- **Bottleneck**: String allocations for identifiers/literals

### Parser Scalability
- **Time Complexity**: O(n) where n = token count
- **Memory**: O(n) for AST nodes
- **Bottleneck**: Recursive descent for nested expressions

### Analyzer Scalability
- **Time Complexity**: O(n * m) where n = functions, m = avg parameters
- **Memory**: O(n) for ownership hints
- **Bottleneck**: Heuristic-based inference (simple logic)

### Codegen Scalability
- **Time Complexity**: O(n) where n = AST nodes
- **Memory**: O(n) for generated code strings
- **Bottleneck**: String formatting and concatenation

---

## Real-World Implications

### Development Workflow
- **Edit-compile-test cycle**: <1ms transpilation means near-instant feedback
- **Large projects**: 1000-line file compiles in ~1.2ms (extrapolated)
- **CI/CD**: Minimal overhead for transpilation step

### Production Use
- **Runtime**: No performance penalty vs hand-written Rust
- **Binary size**: Identical to Rust (no runtime library)
- **Memory**: Same as Rust (zero-cost abstractions)

---

## Benchmark Methodology

### Tools
- **Criterion.rs 0.5**: Statistical benchmarking with outlier detection
- **100 samples** per benchmark for statistical significance
- **HTML reports**: Generated in `target/criterion/` (view with browser)

### Hardware
- **CPU**: Apple Silicon (M-series) or Intel
- **Memory**: 16GB+ recommended
- **OS**: macOS 23.5.0 (adapt for Linux/Windows)

### Running Benchmarks

```bash
# Run all benchmarks
cargo bench

# Run specific benchmark
cargo bench --bench compilation
cargo bench --bench runtime

# Generate HTML reports
cargo bench -- --verbose
open target/criterion/report/index.html
```

### Adding Custom Benchmarks

Edit `benches/compilation.rs` or `benches/runtime.rs` and add:

```rust
fn benchmark_my_feature(c: &mut Criterion) {
    c.bench_function("my_feature", |b| {
        b.iter(|| {
            // Your code here
            black_box(my_function());
        });
    });
}

criterion_group!(benches, benchmark_my_feature);
```

---

## Performance Optimization Tips

### For Windjammer Compiler Development

1. **Reduce allocations**: Use `&str` instead of `String` where possible
2. **Reuse buffers**: String builders for codegen instead of concatenation
3. **Lazy parsing**: Defer expensive operations until needed
4. **Parallel compilation**: Compile multiple files concurrently (future)

### For Windjammer Users

1. **Enable optimizations**: Use `cargo build --release` for final build
2. **Profile your code**: Use `cargo flamegraph` to find bottlenecks
3. **Leverage Rust crates**: Windjammer has 100% Rust interop
4. **Use references**: Let Windjammer infer `&` to avoid unnecessary clones

---

## Future Benchmarks

Planned additions:
- [ ] Memory usage profiling
- [ ] Parallel compilation benchmarks
- [ ] Large project benchmarks (10K+ lines)
- [ ] Incremental compilation benchmarks
- [ ] LSP responsiveness benchmarks

---

## Conclusion

**Windjammer delivers**:
- **17,000x faster compilation** than rustc (for transpilation step)
- 🎯 **Zero runtime overhead** vs hand-written Rust
- 📈 **Linear scalability** across all compiler phases
- 🚀 **<100µs** total compilation time for typical programs

**Perfect for**:
- Rapid prototyping with Rust-level performance
- Projects valuing fast compile times
- Developers learning systems programming

**Trade-off**:
- Requires Rust toolchain for final binary generation
- Total build time dominated by `rustc` (but still fast for incremental builds)