ecraven / r7rs-benchmarks

Benchmarks for various Scheme implementations. Taken with kind permission from the Larceny project, based on the Gabriel and Gambit benchmarks.
270 stars 32 forks source link

See the results [[http://ecraven.github.io/r7rs-benchmarks/benchmark.html][here]]

All of these Schemes are packaged for ArchLinux. The tests are run with whatever that package produces.

Run

+BEGIN_SRC

make csv

+END_SRC

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).

+BEGIN_SRC

CPU_TIME=3600 ./bench chez all

+END_SRC

** Path to executables You can set an environment variable to specify the path to each Scheme.

+BEGIN_SRC

LARCENY=/tmp/larceny/larceny MIT=/tmp/mit/mit-scheme ./bench "mit larceny" "fib ack"

+END_SRC

** Notes for specific implementations *** Chicken The chicken test code assumes the presence of

Install them by running

+BEGIN_SRC

chicken-install vector-lib r7rs

+END_SRC

*** Racket The racket test code assumes the presence of https://github.com/lexi-lambda/racket-r7rs.git.

Install the r7rs package installation-wide.

Run:

+BEGIN_SRC

sudo raco pkg install --scope installation r7rs

+END_SRC

*** IronScheme Install the latest version of .NET Runtime (currently 9.0-preview, requires at least IronScheme 1.0.357) from https://dotnet.microsoft.com/en-us/download/dotnet .

The default binary for IronScheme (can be changed by exporting IRONSCHEME in your shell before running bench) is called =ironscheme=.

If you unpack IronScheme in your home, you can create a shell script like the following:

+BEGIN_SRC

!/bin/bash

export DOTNET_CLI_TELEMETRY_OPTOUT=1 dotnet ~/IronScheme/IronScheme.ConsoleCore.dll $*

+END_SRC

and put that somewhere in your =$PATH=. * Stalin Before calling Stalin, the code is run through [[http://petrofsky.org/src/alexpander.scm][alexpander]] (by default using Chicken's =csi=). Then stalin is invoked on the result. * Unsupported Schemes Owl Lisp Missing a lot of necessary functions, =read= for example. TinyScheme Problems with redirecting input, =read= chokes. No timing functions. Safety The benchmarking code does not* use unsafe optimizations. These make code run even faster (but less safe ;) Specific options that could be used are: