|
||
---|---|---|
libs | ||
r6rs-testfiles | ||
r7rs-testfiles | ||
.gitignore | ||
Dockerfile | ||
Dockerfile.jenkins | ||
Dockerfile.test | ||
Jenkinsfile | ||
LICENSE | ||
Makefile | ||
README.md | ||
compile-r7rs.bat | ||
compile-r7rs.scm | ||
configure | ||
installer.iss |
README.md
compile-r7rs is a tool to compile Scheme programs, it aims for compability with SRFI-138.
Despite it's name it also supports R6RS. Schemers, unite! <3
Notes
- No support for -D flag yet.
- Not all implementations support adding to beginning or end o load path so -I and -A might work the same
Build and install
You can run compile-r7rs on Chibi, Chicken, Gauche, Guile, Kawa, Sagittarius or STklos.
snow-chibi --impls=SCHEME "(foreign c)"
snow-chibi --impls=SCHEME "(srfi 170)"
make build-SCHEME
make install
Usage
You need to install each Scheme implementation yourself.
The environment variable COMPILE_R7RS must be set to the name of the implementation as specified in the support list. This differs from the SRFI as the SRFI excepts a path.
To get the list of supported R6RS implementations run:
compile-r7rs --list-r6rs-schemes
To get the list of supported R7RS implementations run:
compile-r7rs --list-r7rs-schemes
To get the list of all supported implementations run:
compile-r7rs --list-schemes
Then run it with the .scm file for r7rs, or .sps file for r6rs.
COMPILE_R7RS=<implementation name> compile-r7rs -I . -o main main.scm
Which produces file called main, which you can run. Note that when given Scheme is interpreter the file contains commands that run the script, and even when the file is combiled binary it might need the compiled libraries.
No other file suffixes are supported at the moment.
Setting value of COMPILE_R7RS to implementation name that supports only r7rs and input file to .sps file and other way around is undefined behaviour.
Environment variables
- COMPILE_R7RS
- Name of the implementation you want to compile with
- This differs from the SRFI as it excepts a path
- COMPILE_R7RS_SCHEME_NAME
- Additional string to insert right after the command and it's arguments can be used for example to pass C compiler flags on implementations that compile to C or anything or otherwise as backdoor
- For example for Chicken to link with libcurl you would set COMPILE_R7RS_CHICKEN="-L -lcurl"
- If implementation has - it is changed to _, for example mit-scheme -> MIT_SCHEME
- This differs from the SRFI as it's not in there
Supported implementations
Some implementations support both compiling and interpreting, in that case only the compiler functionality is used and the implementation is marked as compiler.
- chezscheme
- interpreter
- R6RS
- chibi
- interpreter
- R7RS
- chicken
- compiler
- R7RS
- cyclone
- compiler
- R7RS
- foment
- interpreter
- R7RS
- gauche
- interpreter
- R7RS
- guile
- interpreter
- R6RS
- R7RS
- Has include bug https://debbugs.gnu.org/cgi/bugreport.cgi?bug=66046 but for some reason it seems to work for me atleast sometimes
- ikarus
- interpreter
- R6RS
- ironscheme
- interpreter
- R6RS
- kawa
- interpreter
- R7RS
- Native access is enabled by default so pffi can work
- larceny
- interpreter
- R6RS
- R7RS
- loko
- compiler
- R6RS
- R7RS
- meevax
- r7rs
- mit-scheme
- interpreter
- R7RS
- mosh
- interpreter
- R6RS
- R7RS
- racket
- interpreter
- Has compiling capabilities but I havent got them to work yet
- r6rs
- r7rs
- interpreter
- sagittarius
- interpreter
- R6RS
- R7RS
- skint
- interpreter
- R7RS
- stklos
- interpreter
- R7RS
- tr7
- interpreter
- R7RS
- ypsilon
- interpreter
- R6RS
- R7RS
Roadmap
- Support for more implementations
- gambit
- husk
- Dont know how to add directories to load path yet, might not be implemented
- r7rs
- picrin
- Might not be possible, seems to not have (include...) that works like others
- r7rs
- scheme-rs
- Waiting for implementation support
- r6rs
- r7rs
- stak
- Waiting for implementation support https://github.com/raviqqe/stak/issues/2355
- r7rs
- vicare
- So old that I have problems compiling it in Docker, so testing is hard but I expect it to work once I get it to compile as it is R6RS implementation
- r6rs
- Better and tested support for Windows
- Right now there is support for running this but I can not quarantee it works on all if any cases
- Support for -D
- Most implementations dont have this or equivalent flag, but it would be really nice feature to have so filing issues and implementing it myself is something I would like to do
- Ask implementations to support adding to the front and back of load path, or
implement this onto implementations myself
- This might not be as important, but it would be nice to go towards SRFI-138 conformaty
- Environment variable to force the target operating system
- Since for example for interpreters the program produces .bat file with command to run the interpreter "cross compiling" is easy.