| .. | ||
| c | ||
| clojure | ||
| common-lisp | ||
| python | ||
| rust | ||
| src | ||
| .gitignore | ||
| benchmark.json | ||
| README.md | ||
| run.py | ||
| slovo.toml | ||
Math Loop Benchmark Scaffold
Release: established by exp-39; Clojure comparison and shared runner
updated by exp-40; Common Lisp/SBCL comparison added by exp-41;
hot-loop mode added by exp-42.
This directory is a local timing harness for comparing one deterministic math-heavy loop 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/math_loop.c: C comparison implementationrust/math_loop.rs: Rust comparison implementationpython/math_loop.py: Python comparison implementationclojure/math_loop.clj: Clojure comparison implementationcommon-lisp/math_loop.lisp: Common Lisp/SBCL comparison implementationrun.py: build/run/timing harness
All implementations print the same checksum, 5000001, for the default loop
count, 1000000. Hot-loop mode uses loop count 10000000 and checksum
50000001. 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/math-loop/run.py --list
python3 benchmarks/math-loop/run.py --dry-run
python3 benchmarks/math-loop/run.py --only python --repeats 3 --warmups 1
python3 benchmarks/math-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/math-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/math-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.
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.