Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ecraven/r7rs-benchmarks
Benchmarks for various Scheme implementations. Taken with kind permission from the Larceny project, based on the Gabriel and Gambit benchmarks.
https://github.com/ecraven/r7rs-benchmarks
Last synced: 3 months ago
JSON representation
Benchmarks for various Scheme implementations. Taken with kind permission from the Larceny project, based on the Gabriel and Gambit benchmarks.
- Host: GitHub
- URL: https://github.com/ecraven/r7rs-benchmarks
- Owner: ecraven
- Created: 2016-05-04T06:36:49.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2024-07-29T06:38:41.000Z (4 months ago)
- Last Synced: 2024-07-29T07:55:44.088Z (4 months ago)
- Language: Scheme
- Size: 7.7 MB
- Stars: 266
- Watchers: 27
- Forks: 32
- Open Issues: 11
-
Metadata Files:
- Readme: README.org
Awesome Lists containing this project
README
* R7RS Benchmarks
Benchmarks for various Scheme implementations. Taken with kind permission from the Larceny project, based on the Gabriel and Gambit benchmarks.See the results [[http://ecraven.github.io/r7rs-benchmarks/benchmark.html][here]]
* Running the tests
Just run
#+BEGIN_SRC
./bench
#+END_SRC
Schemes that should work:
- [[https://www-sop.inria.fr/indes/fp/Bigloo][Bigloo]] (=bigloo=)
- [[http://www.call-with-current-continuation.org/bones][Bones]] (=bones=)
- [[http://scheme.com][Chez]] (=chez=)
- [[http://synthcode.com/scheme/chibi][Chibi]] (=chibi=)
- [[https://www.call-cc.org/][Chicken]] (=chicken=)
- [[http://justinethier.github.io/cyclone/][Cyclone]] (=cyclone=)
- [[https://github.com/leftmike/foment][Foment]] (=foment=)
- [[http://gambitscheme.org/wiki/index.php/Main_Page][GambitC]] (=gambitc=)
- [[http://practical-scheme.net/gauche/][Gauche]] (=gauche=)
- [[http://www.gnu.org/software/guile/][Guile]] (=guile=)
- [[https://github.com/IronScheme/IronScheme][IronScheme]] (=ironscheme=)
- [[http://www.gnu.org/software/kawa/][Kawa]] (=kawa=)
- [[http://www.larcenists.org/][Larceny]] (=larceny=)
- [[https://scheme.fail/][Loko]] (=loko=)
- [[https://www.gnu.org/software/mit-scheme/][MIT/GNU]] Scheme (=mit=)
- [[http://mosh.monaos.org][Mosh]] (=mosh=)
- [[http://scheme.com/][Petite Chez]] (=chez=)
- [[https://github.com/picrin-scheme/picrin][Picrin]] (=picrin=)
- [[https://racket-lang.org][Racket]] (=racket=)
- [[http://www.kt.rim.or.jp/~qfwfq/rhiz-pi/index-e.html][Rhizome/Pi]] (=rhizome=)
- [[http://www.rscheme.org][RScheme]] (=rscheme=)
- [[https://bitbucket.org/ktakashi/sagittarius-scheme/wiki/Home][Sagittarius]] (=sagittarius=)
- [[http://s48.org][Scheme48]] (=scheme48=)
- [[http://t3x.org/s9fes/][Scheme 9 from Empty Space]] (=s9fes=)
- [[https://gitlab.com/jobol/tr7][TR7, tiny R7RS interpreter]] (=TR7=)
- [[http://marcomaggi.github.io/vicare.html][Vicare]] (=vicare=)
- [[http://www.littlewingpinball.net/mediawiki/index.php/Ypsilon][Ypsilon]] (=ypsilon=)
This should result in a file =./results.=.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
- vector-lib
- r7rsInstall 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:
- Chez :: =--optimize-level 3=
- Gerbil / Gambit :: =(declare (not safe))=