Tested against C++ and Rust.
Differential benchmarks evaluating Prismio against Clang++ C++20 (-O3) and Rustc 2021 (opt-level 3). Every workload is tested against identical algorithms, multi-run medians, and canonical checksum verification—with transparent tracking for capabilities still in development.
Overall vs C++
Clang++ -O3Geometric mean of the time ratio across 62 comparison workloads. Lower is faster; 1.00× is parity.
Overall vs Rust
rustc opt-level 3Geometric mean of the time ratio across 62 comparison workloads. Lower is faster; 1.00× is parity.
Dead Code Pruning
LLVM BackendComplete compile-time dead branch elimination across adversarial suites. A probe counts as eliminated when it runs in 10 µs or less.
Verified via binary symbol extraction and differential runtime sampling.
Toolchain & Binary Footprint
Wall-clock compilation speed and final stripped binary size across the full 78-workload suite.
Full compilation through the self-hosted frontend, AIF escape inference, and LLVM backend.
Prismio was compiled by a release build of the compiler.
Self-contained binary containing embedded AIF memory runtime, allocators, and stdlib routines.
Coverage is part of the result.
63 of 78 cataloged workloads are implemented. The remaining 15 make an absence visible instead of allowing a bespoke benchmark-only substitute.
All Workloads Matrix
Filter, search, and inspect the individual runs. Timings represent elapsed execution medians across 5 runs. Click any row to view raw sample times, memory RSS, and checksum verification.
| Details | |||||||
|---|---|---|---|---|---|---|---|
| Algorithms | 12.06 ms±1.3% | 12.08 ms | 12.05 ms | 1.00× (parity) | 1.00× (parity) | Inspect | |
| Algorithms | 505.0 µs±0.4% | 473.9 µs | 645.3 µs | 1.07× (+7%) | 0.78× (-22%) | Inspect | |
| Algorithms | 25.84 ms | 23.84 ms | 25.79 ms | 1.08× (+8%) | 1.00× (parity) | Inspect | |
| Algorithms | 70.17 ms±0.2% | 69.49 ms | 134.30 ms | 1.01× (+1%) | 0.52× (-48%) | Inspect | |
| Algorithms | 4.78 ms | 4.64 ms | 4.63 ms | 1.03× (+3%) | 1.03× (+3%) | Inspect | |
| Algorithms | 3.97 ms | 3.84 ms | 5.16 ms | 1.03× (+3%) | 0.77× (-23%) | Inspect | |
| Algorithms | 56.0 µs | 95.3 µs | 172.3 µs | 0.59× (-41%) | 0.33× (-67%) | Inspect | |
| Algorithms | 667.0 µs | 667.4 µs | 662.3 µs | 1.00× (parity) | 1.01× (+1%) | Inspect | |
| Algorithms | 39.0 µs | 149.7 µs | 433.1 µs | 0.26× (-74%) | 0.09× (-91%) | Inspect | |
| Algorithms | 312.0 µs±1.6% | 359.0 µs | 290.8 µs | 0.87× (-13%) | 1.07× (+7%) | Inspect | |
| Algorithms | 515.0 µs | 524.8 µs | 492.8 µs | 0.98× (-2%) | 1.05× (+5%) | Inspect | |
| Algorithms | 456.0 µs | 360.3 µs | 394.8 µs | 1.27× (+27%) | 1.16× (+16%) | Inspect | |
| Algorithms | 1.69 ms±1.6% | 1.90 ms | 2.70 ms | 0.89× (-11%) | 0.62× (-38%) | Inspect | |
| Algorithms | 292.0 µs | 475.2 µs | 421.0 µs | 0.61× (-39%) | 0.69× (-31%) | Inspect | |
| Algorithms | 4.96 ms | 8.62 ms | 6.43 ms | 0.58× (-42%) | 0.77× (-23%) | Inspect | |
| Algorithms | 602.0 µs±2.2% | 625.5 µs | 652.6 µs | 0.96× (-4%) | 0.92× (-8%) | Inspect | |
| Data structures | 4.50 ms±2.3% | 6.19 ms | 11.63 ms | 0.73× (-27%) | 0.39× (-61%) | Inspect | |
| Data structures | 11.93 ms | 11.31 ms | 10.45 ms | 1.05× (+5%) | 1.14× (+14%) | Inspect | |
| Data structures | 76.50 ms±0.0% | 78.40 ms | 76.57 ms | 0.98× (-2%) | 1.00× (parity) | Inspect | |
| Data structures | 4.82 ms±0.3% | 5.44 ms | 8.25 ms | 0.88× (-12%) | 0.58× (-42%) | Inspect | |
| Data structures | 1.47 ms | 1.46 ms | 1.42 ms | 1.01× (+1%) | 1.04× (+4%) | Inspect | |
| Data structures | 3.89 ms±1.0% | 3.82 ms | 4.14 ms | 1.02× (+2%) | 0.94× (-6%) | Inspect | |
| Data structures | 3.55 ms | 5.11 ms | 6.65 ms | 0.69× (-31%) | 0.53× (-47%) | Inspect | |
| Compute | 4.46 ms±2.3% | 4.41 ms | 4.59 ms | 1.01× (+1%) | 0.97× (-3%) | Inspect | |
| Compute | 3.24 ms | 3.27 ms | 4.15 ms | 0.99× (-1%) | 0.78× (-22%) | Inspect | |
| Compute | 2.96 ms±1.1% | 2.97 ms | 3.27 ms | 1.00× (parity) | 0.91× (-9%) | Inspect | |
| Compute | 2.37 ms | 2.34 ms | 2.27 ms | 1.01× (+1%) | 1.04× (+4%) | Inspect | |
| Compute | 12.40 ms±0.8% | 17.76 ms | 12.03 ms | 0.70× (-30%) | 1.03× (+3%) | Inspect | |
| Compute | 3.56 ms±0.3% | 3.54 ms | 3.45 ms | 1.00× (parity) | 1.03× (+3%) | Inspect | |
| Compute | 44.91 ms±0.3% | 44.94 ms | 44.78 ms | 1.00× (parity) | 1.00× (parity) | Inspect | |
| Compute | 18.92 ms±0.7% | 19.03 ms | 23.79 ms | 0.99× (-1%) | 0.80× (-20%) | Inspect | |
| Compute | 3.43 ms | 3.42 ms | 3.21 ms | 1.00× (parity) | 1.07× (+7%) | Inspect | |
| Compute | 7.52 ms | 7.95 ms | 7.56 ms | 0.95× (-5%) | 1.00× (parity) | Inspect | |
| Compute | 180.0 µs±1.7% | 180.4 µs | 190.3 µs | 1.00× (parity) | 0.95× (-5%) | Inspect | |
| Compute | 155.0 µs±0.0% | 150.9 µs | 151.0 µs | 1.03× (+3%) | 1.03× (+3%) | Inspect | |
| Compute | 332.0 µs±0.9% | 363.9 µs | 412.3 µs | 0.91× (-9%) | 0.81× (-19%) | Inspect | |
| Compute | 2.32 ms±0.9% | 2.97 ms | 2.25 ms | 0.78× (-22%) | 1.03× (+3%) | Inspect | |
| Compute | 19.32 ms±0.2% | 18.90 ms | 19.60 ms | 1.02× (+2%) | 0.99× (-1%) | Inspect | |
| Memory | 574.0 µs±2.4% | 1.40 ms | 1.89 ms | 0.41× (-59%) | 0.30× (-70%) | Inspect | |
| Memory | 5.18 ms±2.5% | 6.51 ms | 5.15 ms | 0.80× (-20%) | 1.00× (parity) | Inspect | |
| Memory | 6.73 ms | 6.58 ms | 6.40 ms | 1.02× (+2%) | 1.05× (+5%) | Inspect | |
| Memory | 2.15 ms±0.4% | 2.35 ms | 2.43 ms | 0.91× (-9%) | 0.88× (-12%) | Inspect | |
| Memory | 6.76 ms | 5.86 ms | 5.76 ms | 1.15× (+15%) | 1.17× (+17%) | Inspect | |
| Memory | 305.0 µs | 849.5 µs | 469.4 µs | 0.36× (-64%) | 0.65× (-35%) | Inspect | |
| Memory | 1.82 ms±1.4% | 4.16 ms | 5.58 ms | 0.44× (-56%) | 0.33× (-67%) | Inspect | |
| I/O and parsing | 701.0 µs±1.3% | 1.26 ms | 694.6 µs | 0.56× (-44%) | 1.01× (+1%) | Inspect | |
| I/O and parsing | 828.0 µs | 823.8 µs | 780.0 µs | 1.01× (+1%) | 1.06× (+6%) | Inspect | |
| I/O and parsing | 317.0 µs±2.2% | 930.4 µs | 303.8 µs | 0.34× (-66%) | 1.04× (+4%) | Inspect | |
| I/O and parsing | 145.0 µs±0.7% | 237.4 µs | 141.2 µs | 0.61× (-39%) | 1.03× (+3%) | Inspect | |
| I/O and parsing | 813.0 µs±1.8% | 786.4 µs | 764.9 µs | 1.03× (+3%) | 1.06× (+6%) | Inspect | |
| I/O and parsing | 1.06 ms | 1.13 ms | 1.80 ms | 0.93× (-7%) | 0.59× (-41%) | Inspect | |
| Adversarial | 36.68 ms | 36.09 ms | 35.45 ms | 1.02× (+2%) | 1.03× (+3%) | Inspect | |
| Adversarial | 23.50 ms±0.8% | 23.48 ms | 23.89 ms | 1.00× (parity) | 0.98× (-2%) | Inspect | |
| Adversarial | 37.33 ms | 36.05 ms | 41.46 ms | 1.04× (+4%) | 0.90× (-10%) | Inspect | |
| Adversarial | 59.95 ms±2.5% | 60.01 ms | 60.27 ms | 1.00× (parity) | 0.99× (-1%) | Inspect | |
| Adversarial | 9.51 ms±1.2% | 9.46 ms | 9.52 ms | 1.01× (+1%) | 1.00× (parity) | Inspect | |
| Adversarial | 11.15 ms | 12.03 ms | 13.23 ms | 0.93× (-7%) | 0.84× (-16%) | Inspect | |
| Adversarial | 38.74 ms±0.4% | 38.72 ms | 36.86 ms | 1.00× (parity) | 1.05× (+5%) | Inspect | |
| Adversarial | 18.83 ms±0.9% | 18.82 ms | 18.76 ms | 1.00× (parity) | 1.00× (parity) | Inspect | |
| Adversarial | 8.38 ms±1.0% | 9.77 ms | 9.15 ms | 0.86× (-14%) | 0.92× (-8%) | Inspect | |
| Adversarial | 53.28 ms±0.2% | 53.72 ms | 52.79 ms | 0.99× (-1%) | 1.01× (+1%) | Inspect | |
| Adversarial | 1.63 ms±1.3% | 1.59 ms | 1.61 ms | 1.02× (+2%) | 1.01× (+1%) | Inspect |
Unsupported means exactly that.
The suite does not award a comparison result when Prismio lacks the ordinary feature the workload is meant to evaluate. Rather than hiding gaps or using benchmark-only shims, missing capabilities are documented as formal roadmap obligations.
Regular expression engine and NFA/DFA automaton compiler in stdlib
Standard LinkedList / Deque container and operations in stdlib
Ordered balanced tree map/set (std::set / BTreeSet) in stdlib
Binary heap / priority queue data structure and push/pop API in stdlib
User-space atomic primitives (AtomicInt, CAS, memory orderings)
Async/await syntax, non-blocking I/O event reactor, cooperative scheduler
User-space synchronization locks (Mutex, RwLock, Condvar) in stdlib
Work-stealing task thread-pool runtime (Rayon / GCD equivalent)
Explicit portable SIMD vector types (e.g. f32x8, i32x4) and target intrinsics
Custom allocator trait to pass user-defined bump/arena allocators into containers
Standard JSON parser and AST/DOM value model in stdlib
Standard JSON serializer and character escaping engine in stdlib
Network socket API (std.net, POSIX socket FFI wrappers)
Memory-mapped file I/O (mmap / MapViewOfFile) in std.fs
Compile-time reflection, procedural macros, or derive code generation attributes
Test Environment & Benchmark Methodology
Exact host hardware specifications, compiler toolchains, optimization flags, and harness parameters used for the latest checked-in benchmark run.
- Processor
- Apple M5 (10 cores)
- Memory
- 16 GB
- Operating System
- macOS 27.0 (26A428)
- Target Triple
- arm64-apple-darwin27.0.0
- Power State
- Battery Power
- Prismio
- 0.1.0 (LLVM 23.1.1)
- Clang++
- 23.1.1 (C++20)
- Rustc
- 1.97.1 (Edition 2021)
- Timing Harness
- benchmarks/run.py (schema v3)
- LLVM Backend
- LLVM 23.1.1
- Prismio compiler
- release build
- Source
- a4cc420 (uncommitted changes)
- Sampling
- 5 independent runs / arm
- Reported Metric
- Median elapsed nanoseconds
- Memory Metric
- Peak RSS (task_info)
- Correctness
- 64-bit checksum verification
- DCE Filter
- ≤ 10 µs (excluded)
Run & Reproduce Locally
The harness (benchmarks/run.py), benchmark sources, and checked-in results are part of the open-source repository. To build and execute the entire differential suite locally:
That's all. The Prismio CLI handles compiling the suite, invoking comparative baselines, sampling iterations, and validating checksums.
Reproduce or challenge a result.
The harness, benchmark sources, unsupported-workload records, and raw checked-in results are fully open-source. Inspect the source arms, audit the methodology contract, or contribute workloads.
No operating system. The same programs.
Prismio against C (clang -O3) and Rust (no_std, opt-level 3) on bare-metal AArch64: no C library, no allocator, no startup files. One shared boot harness links into all three, so the only code that differs is the benchmarks. Every workload is counted in guest instructions under QEMU, which is exact and repeatable, with identical checksums across all three languages.
Overall vs C
clang -O3Geometric mean of Prismio's instruction count over the other arm's, across 20 workloads. Below 1.00× is fewer instructions.
Overall vs Rust
rustc opt-level 3, no_stdGeometric mean of Prismio's instruction count over the other arm's, across 20 workloads. Below 1.00× is fewer instructions.
Repeatable
QEMU -icountThe virtual clock advances one nanosecond per instruction, so a timer tick is 16 instructions and a repeat boot returns the same count.
Build & code footprint
Time to build the suite, and the machine code each compiler produced for it.
Compilation speed
compile and linkEach arm is built from source and linked with the shared harness. Prismio compiles the whole suite as one program.
Image size
.text of the imageExecutable code, including 9 KB of harness common to all three.
All freestanding workloads
Guest instructions per workload. Click any row to see the checksum all three arms returned and each arm's exact count.
| Details | |||||||
|---|---|---|---|---|---|---|---|
| Algorithms | 4.96 M | 5.28 M | 4.96 M | 0.94× (-6%) | 1.00× (parity) | Inspect | |
| Algorithms | 5.50 M | 5.50 M | 5.63 M | 1.00× (parity) | 0.98× (-2%) | Inspect | |
| Algorithms | 5.06 M | 5.06 M | 5.06 M | 1.00× (parity) | 1.00× (parity) | Inspect | |
| Algorithms | 11.04 M | 11.04 M | 13.44 M | 1.00× (parity) | 0.82× (-18%) | Inspect | |
| Algorithms | 9.99 M | 10.10 M | 12.96 M | 0.99× (-1%) | 0.77× (-23%) | Inspect | |
| Algorithms | 10.91 M | 10.70 M | 14.55 M | 1.02× (+2%) | 0.75× (-25%) | Inspect | |
| Algorithms | 3.14 M | 5.12 M | 7.40 M | 0.61× (-39%) | 0.42× (-58%) | Inspect | |
| Algorithms | 5.54 M | 5.60 M | 10.10 M | 0.99× (-1%) | 0.55× (-45%) | Inspect | |
| Algorithms | 9.96 M | 9.96 M | 9.99 M | 1.00× (parity) | 1.00× (parity) | Inspect | |
| Compute | 8.59 M | 8.59 M | 8.62 M | 1.00× (parity) | 1.00× (parity) | Inspect | |
| Compute | 8.63 M | 9.55 M | 8.78 M | 0.90× (-10%) | 0.98× (-2%) | Inspect | |
| Compute | 9.60 M | 9.60 M | 9.60 M | 1.00× (parity) | 1.00× (parity) | Inspect | |
| Compute | 9.04 M | 8.99 M | 8.99 M | 1.01× (+1%) | 1.01× (+1%) | Inspect | |
| Compute | 7.45 M | 9.85 M | 9.90 M | 0.76× (-24%) | 0.75× (-25%) | Inspect | |
| Memory | 9.63 M | 9.63 M | 16.85 M | 1.00× (parity) | 0.57× (-43%) | Inspect | |
| Memory | 3.75 M | 4.43 M | 3.75 M | 0.85× (-15%) | 1.00× (parity) | Inspect | |
| Memory | 9.48 M | 9.48 M | 9.48 M | 1.00× (parity) | 1.00× (parity) | Inspect | |
| Hardware | 4.50 M | 4.50 M | 4.50 M | 1.00× (parity) | 1.00× (parity) | Inspect | |
| Hardware | 8.80 M | 8.80 M | 8.80 M | 1.00× (parity) | 1.00× (parity) | Inspect | |
| Hardware | 9.00 M | 9.00 M | 9.90 M | 1.00× (parity) | 0.91× (-9%) | Inspect |
How to read this
What the number is, what it leaves out, and what is held equal.
What the number is
Guest instructions executed, read from the generic timer under QEMU's -icount shift=0 (16 instructions per tick). It is exact and repeatable, so there is no median, spread or noise model: a verdict is a fixed ±2% on the ratio.
What it leaves out
It models no cache, pipeline or branch predictor. A workload dominated by memory stalls, such as pointer_chase or mem_copy, costs more on real silicon than its count says, and a count cannot show a vectorised loop's advantage. It shows how much code each compiler asked the machine to run.
Held equal
One harness object for all three arms, built once. No floating point or SIMD and strict alignment for every arm (the MMU is off, so an unaligned access faults). The same algorithm in each language, checked by identical checksums.
Known difference
Rust indexes with bounds checks, as safe Rust does; C and Prismio's fixed arrays are unchecked. That is the language's price for safe indexing, so it stays in the number.
Toolchains
prismio 0.1.0 (bin build) · clang 23.1.1 · rustc 1.97.1 · lld 22.1.8 · qemu 11.1.1