Official chibi-scheme repository
Find a file
Alex Shinn a18deb68cc Optional code refactoring.
Chibi uses a lot of #if conditioned code so that configuration
management can be done entirely with the C preprocessor.

Originally this also involved conditional includes of .c files
from other source files.  The alterative, which this change
switches to, is to compile and link all files, and for uneeded
files conditionally eliminate their entire bodies so they compile
to empty object files.

Pros for conditionally including all code into one large file:

  * Don't need to declare most functions (keeps .h files small).
  * Can keep most functions static/inlined (keeps objects small).
  * Don't need to even distribute uneeded files with the default
    Makefile (e.g. can prune opt/* from dist for minimal builds).

Pros for linking multiple possibly empty files:

  * Extensions and third-party libs probably want the exported
    declarations anyway.
  * Static analysis tools work better (e.g. flymake on what previously
    was an included file).
  * Can build each file in parallel (i.e. make -j for faster builds).
  * Can build and link in just the changed files, instead of
    having to recompile the whole thing.

For Chibi these are all minor points - it will be small
regardless, and will build fast regardless - but the arguments
for splitting seem stronger.  Note the new shared lib is about
1k larger, but that can be trimmed down later.
2012-06-21 23:04:07 -07:00
benchmarks/shootout automatically making sockets non-blocking on accept 2012-05-14 08:37:45 -04:00
build-lib/chibi/char-set adding ascii and full unicode char-set libraries based on isets 2012-06-17 19:36:17 +09:00
contrib automatically making sockets non-blocking on accept 2012-05-14 08:37:45 -04:00
data adding ascii and full unicode char-set libraries based on isets 2012-06-17 19:36:17 +09:00
doc DragonFly build support patch from ctismyusername. 2012-06-19 22:47:15 -07:00
examples automatically making sockets non-blocking on accept 2012-05-14 08:37:45 -04:00
include/chibi Optional code refactoring. 2012-06-21 23:04:07 -07:00
lib small fixes and warning removals for build tests 2012-06-20 21:39:52 -07:00
opt Optional code refactoring. 2012-06-21 23:04:07 -07:00
tests small fixes and warning removals for build tests 2012-06-20 21:39:52 -07:00
tools adding ascii and full unicode char-set libraries based on isets 2012-06-17 19:36:17 +09:00
.hgignore automatically making sockets non-blocking on accept 2012-05-14 08:37:45 -04:00
AUTHORS sexp_release_object fix from Ben Weaver - wasn't releasing 2012-06-14 22:37:10 +09:00
chibi-scheme.vcproj automatically making sockets non-blocking on accept 2012-05-14 08:37:45 -04:00
COPYING automatically making sockets non-blocking on accept 2012-05-14 08:37:45 -04:00
eval.c Optional code refactoring. 2012-06-21 23:04:07 -07:00
fedora.spec automatically making sockets non-blocking on accept 2012-05-14 08:37:45 -04:00
gc.c Optional code refactoring. 2012-06-21 23:04:07 -07:00
main.c image header magic field shouldn't be const (removes warning) 2012-06-20 21:07:18 -07:00
Makefile Optional code refactoring. 2012-06-21 23:04:07 -07:00
Makefile.detect DragonFly build support patch from ctismyusername. 2012-06-19 22:47:15 -07:00
Makefile.libs small fixes and warning removals for build tests 2012-06-20 21:39:52 -07:00
mkfile automatically making sockets non-blocking on accept 2012-05-14 08:37:45 -04:00
opcodes.c Optional code refactoring. 2012-06-21 23:04:07 -07:00
README automatically making sockets non-blocking on accept 2012-05-14 08:37:45 -04:00
README.libs automatically making sockets non-blocking on accept 2012-05-14 08:37:45 -04:00
RELEASE automatically making sockets non-blocking on accept 2012-05-14 08:37:45 -04:00
sexp.c Optional code refactoring. 2012-06-21 23:04:07 -07:00
TODO automatically making sockets non-blocking on accept 2012-05-14 08:37:45 -04:00
VERSION automatically making sockets non-blocking on accept 2012-05-14 08:37:45 -04:00
vm.c Optional code refactoring. 2012-06-21 23:04:07 -07:00

                             Chibi-Scheme
                            --------------
                                   
    Minimal Scheme Implementation for use as an Extension Language

              http://synthcode.com/wiki/chibi-scheme/

Chibi-Scheme is a very small library intended for use as an extension
and scripting language in C programs.  In addition to support for
lightweight VM-based threads, each VM itself runs in an isolated heap
allowing multiple VMs to run simultaneously in different OS threads.

The default language is an extended subset of the current draft R7RS
Scheme, with support for all libraries.  Support for additional
languages such as JavaScript, Go, Lua and Bash are planned for future
releases.  Scheme is chosen as a substrate because its first class
continuations and guaranteed tail-call optimization makes implementing
other languages easy.

To build on most platforms just run "make && make test".  This will
provide a shared library "libchibi-scheme", as well as a sample
"chibi-scheme" command-line repl.  You can then run

  sudo make PREFIX=/usr/local install

to install the binaries, leaving out the PREFIX for the default
/usr/local or specifying an alternate install location.  If you want
to try out chibi-scheme without installing, be sure to set
LD_LIBRARY_PATH so it can find the shared libraries.

For more detailed documentation, run "make doc" and see the generated
"doc/chibi.html".