mirror of
https://github.com/ashinn/chibi-scheme.git
synced 2025-05-20 06:09:18 +02:00
can disable with USE_BIGNUMS=0 - the interactions between this and USE_FLONUMS are messy, so they will likely be merged into a single option in the near future (i.e. you either have only fixnums, or a full range of numeric types). adding rationals based on this would be easy and is a likely future feature. adding native support for complex numbers is unlikely.
52 lines
1.7 KiB
Text
52 lines
1.7 KiB
Text
|
|
Chibi-Scheme
|
|
--------------
|
|
|
|
Minimal Scheme Implementation for use as an Extension Language
|
|
|
|
http://synthcode.com/wiki/chibi-scheme/
|
|
|
|
|
|
Chibi-Scheme is a very small but mostly complete R5RS Scheme
|
|
implementation using a reasonably fast custom VM. Chibi-Scheme tries
|
|
as much as possible not to trade its small size by cutting corners,
|
|
and provides full continuations, both low and high-level hygienic
|
|
macros based on syntactic-closures, string ports and exceptions.
|
|
Chibi-Scheme is written in highly portable C and supports multiple
|
|
simultaneous VM instances to run.
|
|
|
|
To build, just run "make". This will provide a shared library
|
|
"libchibi-scheme", as well as a sample "chibi-scheme" command-line
|
|
repl. The "chibi-scheme-static" make target builds an equivalent
|
|
static executable.
|
|
|
|
You can edit the file config.h for a number of settings, mostly
|
|
disabling features to make the executable smaller. You can specify
|
|
standard options directly as arguments to make, for example
|
|
|
|
make CFLAGS=-Os
|
|
|
|
to optimize for size, or
|
|
|
|
make LDFLAGS=-L/usr/local/lib CPPFLAGS=-I/usr/local/include
|
|
|
|
to compile against a library installed in /usr/local.
|
|
|
|
By default Chibi uses a custom, precise, non-moving GC. You can link
|
|
against the Boehm conservative GC by editing the config file, or
|
|
directly from make with:
|
|
|
|
make USE_BOEHM=1
|
|
|
|
See the file main.c for an example of using chibi-scheme as a library.
|
|
The essential functions to remember are:
|
|
|
|
sexp_make_context(NULL, NULL, NULL)
|
|
returns a new context
|
|
|
|
sexp_eval(context, expr)
|
|
evaluates an s-expression
|
|
|
|
sexp_eval_string(context, str)
|
|
reads an s-expression from str and evaluates it
|
|
|