3.0 KiB
Enum Struct Payload Loop Benchmark Scaffold
Release: exp-122.
This benchmark compares enum payload selection, enum match, and immutable
fixed-array access through a struct payload plus scalar accumulation across
Slovo, C, Rust, Python, Clojure, and Common Lisp/SBCL on the same machine.
It is not a published benchmark result, performance threshold, optimizer claim, or cross-machine comparison.
Files
src/main.slo: Slovo project benchmark fixturec/enum_struct_payload_loop.c: C comparison implementationrust/enum_struct_payload_loop.rs: Rust comparison implementationpython/enum_struct_payload_loop.py: Python comparison implementationclojure/enum_struct_payload_loop.clj: Clojure comparison implementationcommon-lisp/enum_struct_payload_loop.lisp: Common Lisp/SBCL comparison implementationrun.py: build/run/timing harness
All implementations print checksum 3500013 for loop count 1000000.
Hot-loop mode uses loop count 10000000 and checksum 35000013. The runner
supplies the loop count at runtime so native compilers cannot fold the loop
into a constant answer.
Commands
Run from the Glagol repository root:
python3 benchmarks/enum-struct-payload-loop/run.py --list
python3 benchmarks/enum-struct-payload-loop/run.py --dry-run
python3 benchmarks/enum-struct-payload-loop/run.py --only python --repeats 3 --warmups 1
python3 benchmarks/enum-struct-payload-loop/run.py --mode hot-loop --only slovo --only c --only rust
To include Slovo, build or point at a Glagol binary and make sure host Clang is available:
cargo build --manifest-path compiler/Cargo.toml --bin glagol
python3 benchmarks/enum-struct-payload-loop/run.py --glagol compiler/target/debug/glagol
The runner skips missing C/Rust/Slovo/Clojure/SBCL toolchains where possible.
Use --only multiple times to select implementations:
python3 benchmarks/enum-struct-payload-loop/run.py --only slovo --only c --only rust --only clojure --only common_lisp
Clojure is detected with clojure on PATH, CLOJURE, or CLOJURE_JAR.
Common Lisp is detected with sbcl on PATH, SBCL, or --sbcl.
Comparison Method
- The runner builds each implementation once before timing. The reported numbers measure execution only, not compile time.
- Slovo timings use
glagol build, which currently lowers to LLVM and then invokes hostclang -O2withruntime/runtime.c. - C timings use
clang -O2 -std=c11. - Rust timings use
rustc -C opt-level=3 -C debuginfo=0. - The measured loop alternates between two enum payload variants, matches the
selected variant, reads one fixed
i32array through the bound struct payload, and accumulates the selected value into ani32checksum.
Timing is cold-process local-machine evidence only. Clojure timings include JVM and Clojure startup, while Common Lisp timings include SBCL script startup.
Hot-loop mode is startup-amortized local evidence. It runs a larger loop count
and reports total time plus normalized time for the base 1000000 loop count.