[gambit-list] getting started with gambit source code

Derek Peschel dpeschel at eskimo.com
Tue Jun 3 02:32:37 EDT 2008

On Mon, Jun 02, 2008 at 11:31:59PM -0400, Andrew I. Schein wrote:
> Can someone provide pointers on the tool that generates the C or more
> generally about where to start in looking at the source?

Gambit is the tool that generates the C.  It compiles from Scheme to C,
and the C is then compiled and linked like any other C file.  Gambit is
written in itself.  To avoid problems of circularity the C form of the
system is distributed along with the Scheme form, and is used to install
the initial copy of the compiler.  After that you don't have to worry about
the Gambit-generated C files very much.

The C that Gambit generates needs a runtime environment, with a garbage
collector and support for first-class continuations and so on.  The normal-
looking C files you found implement a lot of the runtime environment,
including OS-specific glue.  They weren't compiled from Scheme.  Also some
hand-written header files define macros that expand the Gambit-generated
code and linkage information into real C.  As a general rule, look for
files in the gsc, gsi, lib, and include directories that don't start
with an underscore.

Gambit has a foreign function interface, so you can combine Scheme and
C files in the same program.  I'm not sure how much of the system is written
using the FFI.

Gambit works with Scheme files containing code (no # in their names) and
interfaces and type definitions (# in their names).  Gambit itself is
organized that way.  The system Scheme files' names start with an underscore,
so the generated C file names also start with one.

Other organizational details:  Inside Scheme files and REPL input, the #
character has several uses:

    - the standard Scheme syntaxes
    - multiline comments
    - #!key #!optional #!rest used in function argument lists
    - #! at the beginning of "shell scripts" written in Scheme
    - the namespace feature
    - in the REPL, the result-history feature

And in C, the runtime environment uses many identifiers starting with three
underscores.  That allows Gambit's identifiers to coexist with others.

For documentation, the Gambit wiki at
is a good place to start.  You can get the manual and the mailing list
archives.  Try these sections in the manual:

    1.1		directory organization after installing
    4		command-line switches handled in the first phase
		of starting the Gambit runtime environment
		(see lib/main.c)
    2 and 3	command-line switches handled by gsc and gsi,
		in a second phase (see gsi/main.scm which is used by
		gsi/_gsi.scm and gsc/_gsc.scm)
    3.4		about linkage information, working with C and object files
    16 and 17	the tidy Scheme view of the runtime support code
		(see most of the files in lib/)
    19		the foreign function interface, if you're curious

and these wiki pages:

    Configure script options	in case you're still installing Gambit
    Make targets		ditto
    Internal Documentation	skeleton list of things not in the manual
    Namespaces			what all the ##s in the sources mean

The mailing list archives need a better index -- I don't have any ready
advice about searching them.

Finally, I can send you an Emacs TAGS file for the lib/ directory.
It's from Gambit 4.2.6 but will probably work with 4.2.8.

Let me know if you have more questions.

-- Derek

More information about the Gambit-list mailing list