slovo/benchmarks/enum-struct-payload-loop
2026-05-22 08:38:43 +02:00
..
c Import Slovo 1.0.0-beta monorepo 2026-05-22 08:38:43 +02:00
clojure Import Slovo 1.0.0-beta monorepo 2026-05-22 08:38:43 +02:00
common-lisp Import Slovo 1.0.0-beta monorepo 2026-05-22 08:38:43 +02:00
python Import Slovo 1.0.0-beta monorepo 2026-05-22 08:38:43 +02:00
rust Import Slovo 1.0.0-beta monorepo 2026-05-22 08:38:43 +02:00
src Import Slovo 1.0.0-beta monorepo 2026-05-22 08:38:43 +02:00
.gitignore Import Slovo 1.0.0-beta monorepo 2026-05-22 08:38:43 +02:00
benchmark.json Import Slovo 1.0.0-beta monorepo 2026-05-22 08:38:43 +02:00
README.md Import Slovo 1.0.0-beta monorepo 2026-05-22 08:38:43 +02:00
run.py Import Slovo 1.0.0-beta monorepo 2026-05-22 08:38:43 +02:00
slovo.toml Import Slovo 1.0.0-beta monorepo 2026-05-22 08:38:43 +02:00

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 fixture
  • c/enum_struct_payload_loop.c: C comparison implementation
  • rust/enum_struct_payload_loop.rs: Rust comparison implementation
  • python/enum_struct_payload_loop.py: Python comparison implementation
  • clojure/enum_struct_payload_loop.clj: Clojure comparison implementation
  • common-lisp/enum_struct_payload_loop.lisp: Common Lisp/SBCL comparison implementation
  • run.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 host clang -O2 with runtime/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 i32 array through the bound struct payload, and accumulates the selected value into an i32 checksum.

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.