slovo/benchmarks/math-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

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 fixture
  • c/math_loop.c: C comparison implementation
  • rust/math_loop.rs: Rust comparison implementation
  • python/math_loop.py: Python comparison implementation
  • clojure/math_loop.clj: Clojure comparison implementation
  • common-lisp/math_loop.lisp: Common Lisp/SBCL comparison implementation
  • run.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 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.

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.