
-- see INSTALL for instructions on how to build VSCM
-- see DESCRIPTION for a desription of the non-R4RS features and for a
   list of changes made since September 29, 1993

______________________________________________________________________________


VSCM -- A portable Scheme implementation

Author: Matthias Blume
        Princeton University
	Department of Computer Science
	35 Olden Street
	Princeton, NJ 08544, U.S.A.

	e-mail: blume@cs.princeton.edu

This is VSCM, a complete and portable implementation of Scheme
according to R4RS (The ``Revised revised revised revised Report of the
Algorithmic Language Scheme'').

VSCM is based on a virtual machine written in ANSI C and on a
bytecode-compiler written in Scheme itself.

This version of VSCM is distinguished from its predecessor (VSCM I) by the
following properties:

	* All essential and non-essential features mentioned in R4RS plus
	  some important extras are provided.
	* VSCM is now based on a somewhat more flexible virtual machine
	  which allows more compiler optimizations.
	* The compiler now uses a flat closure representation.  (The previous
	  implementation was restricted to linked closures.)
	* VSCM now offers the complete tower of numeric types as proposed in
	  R4RS (integer, rational, real and complex).  The numeric code
	  has been completely redesigned.
	* Execution is 20-40% faster on average programs.  For certain
	  cases improvements of more than 50% could be observed.
	* The implementation is cleaned up in several ways.

Non-standard features include:

	* (executable) protable memory images
	* error handling
	* interrupt handling
	* coroutines
	* timer interrupts
	* generic ports
	* continuations with multiple arguments (will be in R5RS)
	* interfaces to runtime system, garbage collector,
	  operating system

For a more complete list and description see file DESCRIPTION.

This version of VSCM is based on its first implementation that has
been developed in part while the author was working at the department
of Computer Science, Humboldt-University of Berlin, Germany.  The most
recent version of the first implementation can be obtained via
anonymous ftp from ``nexus.yorku.ca:/pub/scheme/imp/vscm93Feb10.tar.Z''.

______________


Remarks:

Even though VSCM implements integral, rational, real and complex
numeric types and distinguishes between exact and inexact numbers you
can find ``holes'' in the type system: there are no non-integral
inexact fractions and no exact non-integral real or complex numbers.
Inexact fractions are converted to real numbers.  Usually there is no
problem with this.  However, the results of ``rationalize'' can be
surprising.
	``rationalize'' must return an inexact fraction if called with
real numbers, because real numbers are always inexact.  But since we
don't have inexact fractions we get another real number instead.  To
get the expected result you will need to call:

	(rationalize (inexact->exact <x>) (inexact->exact <y>))

I'm indebted to Alan Bawden for allowing me to use his version of
``rationalize''.

VSCM still lacks a real implementation of ``char-ready?''.  This is
due to the fact that ANSI C does not allow to implement it in a
portable machine- and operating system-independent way.

______________


I also want to thank Henry Cejtin for numerous suggestions and Greg Wilson
for pushing me to include the coroutine interface.


Princeton, March 23, 1993
	   September 29, 1993
	   November 18, 1993
