-- 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 ) (inexact->exact )) 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