# Guix Scheme Containers and Environments Run Scheme implementations in Guix containers/environments, and package libraries for them. Supports Chibi, Foment, Sagittarius, Gauche, Loko, STKlos, TR7, Mosh, Chez, and SKINT. ## Portable R6RS and R7RS Libraries Some Scheme systems packaged here will read `R7RS_LIBRARY_PATH` (or `R6RS_LIBRARY_PATH` for R6RS systems) to find paths for strictly conforming R7RS (R6RS) libraries. To copy libraries to these pathes, use the `portable-r7rs-build-system` (`portable-r6rs-build-system`). On systems that support both R6RS and R7RS, the R6RS libraries will take precedence (rationale: R6RS has more stuff). ## SRFIs and Portability Libraries This channel packages some SRFIs for portable use. They are labeled `srfi-M-rNrs`, where `M` is the number and `N` is the standard. The SRFIs are packaged so that R7RS systems use `(srfi M)` and R6RS systems use `(srfi :M)`. No claim is made to the portability of `(srfi :M name)`, etc, unless made necessary by sublibraries. * SRFI-1 * SRFI-8 * SRFI-9 (R6RS only) * SRFI-128 * SRFI-227 None of these packages have any dependencies. This is because some implementations already come with optimized versions of these SRFIs. For instance, a system with built-in comparators doesn't need to pull in the portable SRFI-128 implementation to use some other library that imports SRFI-128. The following portability libraries are also exported. * `compatible-parameters`: Exports `(mcgoron compatible-parameters)` for R6RS systems that exports either an SRFI-39 or R7RS parameter interface. ## Supported Implementations ### Chibi Scheme * Package: `chibi-scheme-with-path` * Path: `chibi-lib-dir`, `chibi-binlib-dir` * Supports `R7RS_LIBRARY_PATH` ### Foment * Package: `foment-with-path` * Path: `foment-lib-dir` * Supports `R7RS_LIBRARY_PATH` The build script here will build [Foment](https://github.com/leftmike/foment). The last release of Foment was a long time ago, so the build is for the current HEAD at the time of writing (6089c3c). ### Sagittarius * Package: `sagittarius-scheme-with-path` * Path: `sagittarius-lib-dir` * Supports `R7RS_LIBRARY_PATH`, `R6RS_LIBRARY_PATH` ### Gauche * Package: `gauche-with-path` * Pure Scheme: `gauche-pure-scheme-build-system` TODO: explain gauche, add gauche build system ### Loko * Package: `loko-scheme-with-path` * Path: `loko-scheme-lib-dir` * Supports `R7RS_LIBRARY_PATH`, `R6RS_LIBRARY_PATH` ### STKlos * Package: `stklos-with-path` * Path: `stklos-lib-dir` * Supports `R7RS_LIBRARY_PATH` TODO: loading bytecode ### TR7 * Package: `tr7-with-path` * Path: `tr7-lib-dir` * Supports `R7RS_LIBRARY_PATH` TODO: extensions ### Mosh * Package: `mosh-scheme-with-path` * Path: `mosh-lib-dir` * Supports `R6RS_LIBRARY_PATH` ### SKint * Package: `skint-with-path` * Path: `skint-lib-dir` * Supports `R7RS_LIBRARY_PATH` ### Chez Scheme * Package: `chez-scheme-with-path` * Path: `chez-lib-dir` * Supports `R6RS_LIBRARY_PATH` TODO: heap files? ## Planned Any R6RS/R7RS that has a path mechanism and that can run on a system running Guix should be included. ### Maybe? * Picrin (does not search the filesystem for libraries) * Chicken, Cyclone, Gambit (compilers) * The Javascipt ones * Kawa (java) * Racket, MIT-Scheme (dunno how they work) * Ikarus * Vicare (difficult to compile on modern systems)