Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
An attempt at building a bootstrapped scheme
Scheme C Shell Other

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
.bs [issue] closed: destructuring-let should evaluate forms only once (b2…
clos cacheing slot ref/set
examples back to for-each
slib more work towards making slib functional
tests removing dead code. removed destructuring
.gitignore Added bs to .gitignore.
Makefile makefile cleanup added blog links
anaphoric.sch Began anaphoric macro library.
boot.sch alien printing, number padding, provided?
bs-build.sch pass-by-name requires keywords
bs-lib.sch nil being reassigned
bs.sch More work on bs.
bsch.c Only list the self-image file once in bsch.c.
clojure-containers.sch interesting clojure style generic data structure routines
clos-repl.sch added return-trace to exceptions
clos.sch alien printing, number padding, provided?
compiler.sch no need to macroexpand in later stages
conditions.sch fixed spacer regression
ffi.c more support for sdl surfaces
ffi.h adding gc support for aliens
ffi.sch more support for sdl surfaces
gc.c removing dead code. removed destructuring
gc.h more effective generic cacheing
getopt.sch Pulled down getopt from slib.
hash-table.sch reader syntax for hash-table
hashtab.c Begin work on moving to mmap() managed memory.
hashtab.h Adjust hashtable namespace to avoid conflicts with Wisp.
image.sch Start using the base-8 #o syntax when setting file permissions.
interp.c 64 bit format gcc fix. signed/unsigned fix
interp.h Add FIFTH argument macro.
io.sch Add a nicer Schemeland select function.
jit.sch converted dl to ltdl for compatibility
lazy.sch Split off delay and force into lazy library.
list.sch batch C calls together for speed
math.sch Added signum function.
morphic.sch reuse bytecode heap objects
ncurses.sch Added addch, mvaddch, and move to ncurses. Added Perl script to pad bschsfx appropriately.
pcre.sch Initial PCRE FFI work.
plot.sch Change plot library to use new pipe ports, and no FFI.
point-free.sch Fix compliment -> complement spelling error.
pool.c removing dead code. removed destructuring
pth.sch fixed spacer regression
queue.sch Add modified queue implementation from MIT Scheme.
random.sch compiler cleanup - changed if to when where appropriate
read.c automatic indentation
read.h fixed precision floating point numerics
read.sch committed an unintended change
readline.sch converted dl to ltdl for compatibility
run-tests.sch more effective generic cacheing
save-image.sch pass-by-name requires keywords
sdl.sch alien printing, number padding, provided?
socket.c automatic indentation
socket.sch removing dead code
srfi-18.sch more specific clos numeric types
stdlib.sch explicitly fill frame for fixed args
string.sch alien printing, number padding, provided?
sugar.sch Oops, need to duplicate that macro character in that last split.
swank-image.sch pass-by-name requires keywords
swank.sch compile file support
threads.sch Modify thread naming to match standard names.
tlsf.c fixed memory overrun bug in tlsf
tlsf.h switch to tlsf alloc/free within pools
types.c adding gc support for aliens
types.h cacheing slot ref/set
unittest.sch added missing gc root. ffi uses apply instead of interp
vm.c fixed spacer regression
vm.h removing dead code. removed destructuring
wisp.sch Added wisp:eval.


This is a non-compliant implementation of the Scheme language.

The C code implements a simple s-expression reader/writer, an interpreter, garbage collection, foreign function interface, and a simple virtual machine for an internal bytecode format.

The SCH code implements a base library, a compiler from scheme to the bytecode format mentioned above, and a JIT assembler that utilizes libjit (accessed via the FFI system) to allow the creation of new primitive functions. Also implemented in SCH is the extensible reader, printer, and repl. The eventual goal is to write a bytecode -> assembly translator so that we can compile the full language down to the processor's machine code.

A non-compliant implementation of CLOS is also included and is used as the foundation for the extensible reader and printer.

BrianScheme also has the ability to save images of its current state as a file on disk. It can then restart at that state very quickly making it a suitable language for command line utilities.

You can read more about the implementation at these links:

The primary implementors maintain blogs at:


Copyright 2012 Brian Taylor

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Something went wrong with that request. Please try again.