Benchmarks for various Scheme implementations. Taken with kind permission from the Larceny project, based on the Gabriel and Gambit benchmarks.
See the results here
Running the tests
./bench <scheme> <test>
Schemes that should work:
- Bigloo (
- Bones (
- Chez (
- Chibi (
- Chicken (
- Cyclone (
- Foment (
- GambitC (
- Gauche (
- Guile (
- IronScheme (
- Kawa (
- Larceny (
- MIT/GNU Scheme (
- Mosh (
- Petite Chez (
- Picrin (
- Racket (
- Rhizome/Pi (
- RScheme (
- Sagittarius (
- Scheme48 (
- Scheme 9 from Empty Space (
- Vicare (
- Ypsilon (
This should result in a file
All of these Schemes are packaged for ArchLinux. The tests are run with whatever that package produces.
to produce a file
all.csv with the test results (
Limiting compile-time and run-time
The environment variable
CPU_TIME can be set, to limit the time for compilation and for running (each individually).
CPU_TIME=3600 ./bench chez all
Path to executables
You can set an environment variable to specify the path to each Scheme.
LARCENY=/tmp/larceny/larceny MIT=/tmp/mit/mit-scheme ./bench "mit larceny" "fib ack"
Notes for specific implementations
The chicken test code assumes the presence of
Install them by running
chicken-install vector-lib r7rs
The racket test code assumes the presence of https://github.com/lexi-lambda/racket-r7rs.git.
Install the r7rs package installation-wide.
Run as root:
raco pkg install -i r7rs r7rs-lib
Precompile system libraries (optional). It is still going to be slow.
echo "(compile-system-libraries)" | mono IronScheme.Console-v4.exe
The default binary for IronScheme (can be changed by exporting IRONSCHEME in your shell before running bench) is called
If you unpack IronScheme in your home, you can create a shell script like the following:
#!/bin/bash mono ~/IronScheme/IronScheme.Console-v4.exe -nologo -emacs $*
and put that somewhere in your
Before calling Stalin, the code is run through alexpander (by default using Chicken’s
csi). Then stalin is invoked on the result.
Missing a lot of necessary functions,
read for example.
Problems with redirecting input,
read chokes. No timing functions.