Self-host vs native benchmarks

Regenerate: ./scripts/bench-self-host.sh && python3 scripts/render-self-host-bench-md.py

Compares inauguration’s owned Rust front (in build on in-cli/src/main.rs) to rustc/Cargo building the same CLI crate: compile wall time, binary size, and cold process startup.

What we measure

StageCommandMeaning
Owned front + JITin build --path in-cli/src/main.rsParse/type ~1.9k fns; JIT lowering (may fail on stdlib)
rustc releasecargo build --release -p inaugurationFull crate + deps link to target/release/in
Native self-artifactin build --path … --out /tmp/inTarget: Mach-O from owned pipeline (blocked today)
Statsin compile --path … --target jit --jsonparsed_function_count, call_edge_count

Latest: in self-host

FieldValue
Generated (UTC)2026-07-05T13:43:04Z
in versionin 0.7.4
Host / CPUDarwin / Apple M5 Pro
Functions parsed1,879
Functions typed1,879
Call edges4,268
in build wall ms (avg)197.0
JIT lowering µs (last run)36,667
Front stats OKTrue
Native --outblocked — in build: native compilation failed (native-lowering-failed)

vs rustc (same shipped binary today)

Metricin (owned front)rustc / Cargo (release)
Compile wall (avg ms)197.049950.0
Speed ratio (in ÷ rustc)0.004×1.000× (baseline)
Shipped binary size69.17 MiB (72,531,952 B)69.17 MiB (72,531,952 B)
Size ratio (in ÷ rustc)1.000×same artifact today
Cold in --version (ms)157.357.33

Notes: in build parses/types main.rs through Core IR (JIT often fails on atomics); Cargo rebuilds the whole inauguration crate after touch main.rs. Binary row is the same target/release/in until native self-link works. Execution row is CLI startup, not compile throughput.

Language coverage

LanguageCompileExecuteNotes
.inJIT
.rs (in-cli main.rs)⚠️front OK; JIT/native blocked on AtomicPtr etc.
.rs (samples)native Mach-O

Polyglot compile times.

Optimization roadmap

PriorityItemStatus
P0Named/stdlib types in native_emit (AtomicPtr, atomics)blocked native + full JIT self-build
P1Daemon in daemon start — drop cold startup on repeated benchesdoc’d
P1Compile cache — persist lowered native / skip re-link inrtpartial (source hash)
P2Incremental Rust front — re-parse from Core IR cacheparallel parse landed
P2Bench on release tag — script + JSON in repo; optional deploy refreshscript ready
P3Fair rustc comparecargo clean cold + in full native artifact sizefuture

Done recently: family typecheck ↔ language_support; live JSON bench; .in strict name: Type params.