Using Andre van Tonder's syntax-case & library system on Gambit
There is a R6RS distribution located at [[media:gambit-r6rs.tgz|gambit-r6rs.tgz]]. There is a compile script written in Gambit scheme that will compile all the libraries together into a loadable library. The libraries are divided into 3 layers; each layer being dependent on the previous layer.
- The Gambit libraries are where all the extensions to r5rs are put
- the standard and base libraries.
- The srfi's that are implemented by gambit.
There are some general differences:
- You can't use Gambit's extended lambda syntax. Instead use srfi-89
Gambit libraries:
- (gambit threads)
- (gambit exceptions)
- (gambit extensions)
- (gambit files)
- (gambit io)
- (gambit io readtable)
- (gambit programs)
- (gambit time)
- (gambit will)
- (gambit debug)
- (gambit bytevectors)
R6RS libraries implemented:
- (rnrs base)
- (rnrs lists)
- (rnrs sorting)
- (rnrs control)
- (rnrs records inspection)
- (rnrs conditions)
- (rnrs exceptions)
- (rnrs files)
- (rnrs programs)
- (rnrs arithmetic fixnums)
- (rnrs arithmetic bitwise)
- (rnrs syntax-case)
- (rnrs eval)
- (rnrs mutable-pairs)
- (rnrs mutable-strings)
- (rnrs r5rs)
R6RS libraries (incomplete):
- (rnrs unicode)
- (rnrs records procedural)
- (rnrs bytevectors)
- (rnrs io ports)
- (rnrs io simple)
- (rnrs arithmetic flonums)
- (rnrs)
R6RS libraries missing:
- (rnrs records syntactic (6))
- (rnrs hashtables (6))
- (rnrs enums (6))
SRFI libraries:
- (srfi :2)
- (srfi :4)
- (srfi :6)
- (srfi :8)
- (srfi :9)
- (srfi :18)
- (srfi :21)
- (srfi :23)
- (srfi :27)
- (srfi :39)
- (srfi :88)
- (srfi :89)
- (srfi :99)
TODO:
- Finish importing all gambit api into gambit libraries.
- Implement all R6RS api
- Remove warnings when loading the R6RS compiled library
- Create a error handler that prints R6RS conditions in repl.
- Integrate gambit and r6rs repl
- Create R6RS mode for Gambit that loads this library
- Implement a compile-library and compile-program functions.
- Implement a packaging standard