Performance evidence
Measure the work.
Keep the context.
These numbers come from real Ostrin programs. The runner compares the reference interpreter with the generated native executable, checks identical output and records the environment beside every median.
Recorded run
One result with its provenance attached.
Timing depends on hardware, operating system and compiler state. The page makes those variables visible so later runs can be compared responsibly.
| Workload | Interpreter | Native | Ratio | Compile |
|---|
Semantic overhead probe
Float and Quantity, same workload shape.
Each bar is a process median from the recorded run. The pair keeps the array length and arithmetic aligned so the unit carrying cost is visible without turning it into a cross-language claim.
Memory cost · M2-C
What the scientific types allocate.
The same 50,000-step accumulation with a plain Float, a temperature interval, an absolute temperature and a Measurement that carries a shared source. Native executables report requested bytes and peak resident set when run with OSTRIN_MEM_DETAIL=1.
| Workload | Bytes requested | Allocations | Peak RSS |
|---|---|---|---|
| control: scalar Float | 0 | 0 | 5,040 KB |
| Quantity | 0 | 0 | 5,040 KB |
| TemperaturePoint shifted by an interval | 0 | 0 | 5,044 KB |
| Measurement with one shared source | 5,200,293 | 200,010 | 5,104 KB |
Quantities and absolute temperatures are plain values and never touch the heap. Measurement builds one new source list per operation and shares unchanged source records; it needed 450,008 allocations before the single-pass source merge and needs 200,010 now, with the same output and a peak of 12 live allocations. Receipt: validation/m2c-abstraction-overhead-windows.json.
Reproduce it
Source first. Numbers second.
Build the release compiler, run the deterministic workload set and regenerate the public data file. The raw JSON remains available as a CI artifact for each scheduled or manually triggered benchmark workflow.
cargo build --release --manifest-path compiler/Cargo.toml
node scripts/benchmark.mjs --iterations 7 --warmups 1
node scripts/benchmark-page.mjs --write