Introduction
************

Scheme48 is an implementation of Scheme based on a byte-code virtual machine with design goals of simplicity and cleanliness.  To briefly enumerate some interesting aspects of it, Scheme48 features:

  * an advanced module system based on Jonathan Rees's W7 security kernel with well-integrated interaction between macros and modules;

  * a virtual machine written in a dialect of Scheme itself, Pre-Scheme, for which a compiler is written with Scheme48;

  * a sophisticated, user-level, preëmptive multithreading system with numerous high-level concurrency abstractions;

  * a composable, lock-free shared-memory thread synchronization mechanism known as optimistic concurrency; and

  * an advanced user environment that is well-integrated with the module and thread systems to facilitate very rapid development of software systems scaling from small to large and single-threaded to multi-threaded.

It was originally written by Jonathan Rees and Richard Kelsey in 1986 in response to the fact that so many Lisp implementations had started out simple and grown to be complex monsters of projects.  It has been used in a number of research areas, including:

  * mobile robots at Cornell [Donald 92];

  * a multi-user collaboration system, sometimes known as a `MUD' (`multi-user dungeon') or `MUSE' (`multi-user simulation environment'), as well as general research in capability-based security [Museme; Rees 96]; and

  * advanced distributed computing with higher-order mobile agents at NEC's Princeton research lab [Cejtin etal 95].

The system is tied together in a modular fashion by a configuration language that permits quite easy mixing and matching of components, so much so that Scheme48 can be used essentially as its own OS, as it was in Cornell's mobile robots program, or just as easily within another, as the standard distribution is.  The standard distribution is quite portable and needs only a 32-bit byte-addressed POSIX system.

The name `Scheme48' commemorates the time it took Jonathan Rees and Richard Kelsey to originally write Scheme48 on August 6th & 7th, 1986: forty-eight hours.  (It has been joked that the system has expanded to such a size now that it requires forty-eight hours to read the source.)

This manual
===========

This manual begins in the form of an introduction to the usage of Scheme48, suitable for those new to the system, after which it is primarily a reference material, organized by subject.  Included in the manual is also a complete reference manual for Pre-Scheme, a low-level dialect of Scheme for systems programming and in which the Scheme48 virtual machine is written; see Pre-Scheme.

This manual is, except for some sections pilfered and noted as such from the official but incomplete Scheme48 reference manual, solely the work of Taylor Campbell, on whom all responsibility for the content of the manual lies.  The authors of Scheme48 do not endorse this manual.

Acknowledgements
================

Thanks to Jonathan Rees and Richard Kelsey for having decided so many years ago to make a simple Scheme implementation with a clean design in the first place, and for having worked on it so hard for so many years (almost twenty!); to Martin Gasbichler and Mike Sperber, for having picked up Scheme48 in the past couple years when Richard and Jonathan were unable to work actively on it; to Jeremy Fincher for having asked numerous questions about Scheme48 as he gathered knowledge from which he intended to build an implementation of his own Lisp dialect, thereby inducing me to decide to write the manual in the first place; to Jorgen Schäfer, for having also asked so many questions, proofread various drafts, and made innumerable suggestions to the manual.