As I’m working on many projects that run on multiple R7RS Scheme implementations I thought I’d write a little bit about Scheme implementations ease of use and usability in R7RS programming.
Implementations are rated by ease of use, R7RS compability and I added some additional notes like compile-r7rs support, snow-chibi support and foreign-c support.
No implementation is perfect and no implementation is useless. Even if implementation does not get recommendations here, I’m very gratefull to everyone who is or has worked on any of them. Thank you!
This guide is unapologetically opinionated and ignores everything else other than R7RS. Lets begin.
Use if youre just starting
- Gauche
- Sagittarius
- Chibi
- Very good R7RS support
- Easy to use, but needs compiling on windows which might be a hurdle if you are just starting
- Has lots of SRFIs and libraries
- Comes with snow-fort client that supports many implementations, including Gauche and Sagittarius so I recommend you install Chibi just for that
- compile-r7rs supports
- (foreign c) supports
- snow-chibi supports
Use if you know what you are doing
Compilers
- Chicken (5)
- Install r7rs with “chicken-install r7rs” and use -X r7rs -R r7rs when running or compiling
- compile-r7rs supports
- (foreign c) supports
- snow-chibi supports
- Can be embedded
- Cyclone
- Easy to use but when I’ve used this in r7rs-srfi project it does not compile same code as many other R7RS implementations so I’m assuming there are still bugs in R7RS compability that you might run into
- compile-r7rs supports
- snow-chibi supports
- Loko
- Compiles to machine code, has no way to call C libraries
- snow-chibi supports
Interpreters
- Foment
- compile-r7rs supports
- (foreign c) supports
- snow-chibi supports
- Kawa
- Runs on JVM
- compile-r7rs supports
- (foreign c) supports
- snow-chibi supports
- Racket
- Not best error messages due to R7RS being a library
- I use this only as one of the build/test targets for my code
- Install racket-r7rs library
- raco pkg install –auto r7rs
- compile-r7rs supports
- (foreign c) supports
- snow-chibi supports
- Not best error messages due to R7RS being a library
- STklos
- Might work little bit weirdly regarding R7RS but implementation development is active and R7RS compability is a goal
- Has lots of SRFIs
- compile-r7rs supports
- (foreign c) supports
- snow-chibi supports
- tr7
- compile-r7rs supports
- Can be embedded
Do not use for R7RS (yet)
- Gambit
- Slow to compile
- Hard to use, not straightforward manual, no support for all R7RS like syntax-rules
- snow-chibi supports
- Gerbil
- Slow to compile
- Hard to use and built on top Gambit so same R7RS issues most propably
- snow-chibi supports
- Guile
- Has include bug which often makes it not work with R7RS
libraries
- Otherwise R7RS support is good
- compile-r7rs supports
- (foreign c) supports
- snow-chibi supports
- Can be embedded
- Has include bug which often makes it not work with R7RS
libraries
- Mit-scheme
- Hard to use
- Example
- Only one additional load-path can be added, so for example to run a program compile-r7rs adds every library with –load
- Example
- compile-r7rs supports
- Hard to use
- LIPS
- Runs on Javascript
- No full R7RS support, for example libraries
- Working towards it
- BiwaScheme
- Runs on Javascript
- No full R7RS support, for example libraries
- Working towards it
Do not use for R7RS (anymore)
If you know what you are doing and want to use these then go ahead. There is just a risk with not actively developed implementations that if you run into a bug it might not be fixed.
- Mosh
- Not actively developed
- compile-r7rs supports
- (foreign c) supports
- snow-chibi supports
- Larceny
- Not actively developed
- Picrin
- Not actively developed
- Husk
- Not actively developed
- Ypsilon
- Not actively developed
- compile-r7rs supports
- (foreign c) supports
- snow-chibi supports
Do not use for R7RS
- s7
- No library support
- Not working towards it
- R7RS support reported as “I believe it is compatible with r5rs and r7rs”
- No library support
Upcoming or otherwise interesting ones
These implementations aim for R7RS compability but are in different stages of getting there, are too unknown for me (havent used them much yet) to recommend or I would not recommend them to be used in day to day scheme applications development by inexperienced people or by people who just want to get things done, or are just interesting as is. :)
- callcc
- Compiles R7RS with LLVM
- Guile
Hoot
- R7RS Scheme to webassembly compiler
- Meevax
- C++
- Skint
- C
- Small
- Stak
- Rust
- Can be embedded
- Steel
- Rust
- Can be embedded
- scheme-rs
- Rust
- Can be embedded
- vonuvoli
- Rust
- Swift-lispkit
- Swift