Scheme 48 1.1 available

Michael Sperber <>
13 Jul 2004 11:14:49 -0400

          From comp.compilers

Related articles
Scheme 48 1.1 available (Michael Sperber) (2004-07-13)
| List of all articles for this month |

From: Michael Sperber <>
Newsgroups: comp.lang.scheme,comp.compilers
Followup-To: comp.lang.scheme
Date: 13 Jul 2004 11:14:49 -0400
Organization: Compilers Central
Keywords: Scheme, available
Posted-Date: 13 Jul 2004 11:14:49 EDT

Scheme 48 is an implementation of Scheme written by Richard Kelsey and
Jonathan Rees. It is based on a byte-code interpreter and is designed
to be used as a testbed for experiments in implementation techniques
and as an expository tool. It comes with a module system, an
extensive set of libraries, an interactive command-line-based
development environment and a manual in various formats. Scheme 48
runs on most Unix/Linux systems, and is fully R5RS-conformant.

Scheme 48 is available (under a very liberal license) from

Scheme 48 1.1 marks the first release since version 0.57, almost three
years ago. This release has a new VM architecture, and thus a new
major version number (0.* -> 1.*). The new architecture will
facilitate development of a native-code compiler. There have also been
a large number of bug fixes and other changes; release notes are

The Scheme 48 maintainers

Release Notes:

Version 1.0 was not stable enough to be released.


- Added enum-sets (which are in big/enum-set.scm with the struct in
- Added SRFIs 25, 26, 27, 28, 31, 37, and 42.
- Added documentation for the thread system.
- Added documentation for numerous other libraries.
- Added a structure definition for scheme/big/lu-decomp.scm.
- Added the sparse (Hilbert) vectors to the regular build and to the manual.
- Locks and placeholders work correctly.
- INEXACT->EXACT now works on exact numbers and vice versa.
- LETREC is now compiled correctly.
- CALL-WITH-VALUES now works correctly for the one-return-value case.
- SRFI 1 now exports MAP, FOR-EACH, MEMBER, and ASSOC.
- Blocking threads are held onto via cells to allow terminated threads
    to be summarily removed. MAYBE-COMMIT-AND-BLOCK is passed this cell
    as an argument. This fixes a race condition in the blocking
    mechanism. Also as a result of this, locks etc. use regular queues
    instead of thread-queues.
- Package mutation code now knows that structure clients may be either
    packages or structures
- c/write-barrier.h has been renamed c/scheme48write-barrier.h (a
    change) and added to the list of include files that are installed
    (it is #include'd by scheme48.h which was already being installed).
- INTEGER? now works correctly on floats.
- The sources can now be compiled by a C++ compiler.
- Numerous minor type issues in the C code were fixed.
- Some GC problems with the POSIX code were fixed.
- The SRFI 5 implementation now conforms to the specification.
- Channels closed by CALL-WITH-{INPUT,OUTPUT}-FILE through GC no
    longer cause a mesage to be printed.
- Fixed a problem with the debug data for LETREC environments.
- Null output ports now marked as output ports.
- Command reader now checks that , is followed by a symbol.
- Got rid of return value in void functions in vm/*.c files.


- DUP, DUP-SWITCHING-MODE, and DUP2 now takes ports as arguments, as
    the manual says, instead of channels.
- Added a start index argument to the Posix regular-expression matcher
    (this is an incompatible change).
- BLOCK and MAKE-READY are no longer exported by the thread
    package. Use the MAYBE-COMMIT-AND-... versions instead.
- Placeholders now use the commit mechanism instead of disabling
- lock.scm has been moved from rts/ to big/ because the S48 system no
    longer uses them.
- The old sort library has been replaced by Olin Shiver's collection
    of sort libraries. (The SORT structure retains its old interface.)
- It's possible to quote filenames for , commands.
- The byte-code architecture has been changed. It no longer has
    dedicated registers for the template and environment. All values are
    now accessed via the stack pointer.
- Image writer now uses hash tables instead of breaking hearts. This
    allows for more careful construction of the image files and means
    that having static areas no longer prevents writing images.
- Continuations no longer have headers when on the stack, making
    non-tail calls a little bit faster.
- Removed the unused PORT-LOCKED? from ports.
- Made for less duplication of code between the VM and RTS: put the
    continuation offsets into vm/arch.scm, moved some code around so
    that vm/data.scm could be used by the RTS, the interface definitions
    for vm/arch.scm and vm/data.scm are now shared.
- The VM's stack pointer (*STACK*) now points to the top value on the
    stack instead of the unused location just above.
- The VM files are now in organized into subdirectories.
- The interrupt and stack overflow checks have been merged into a
    single test. Calls are a little bit faster.

Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.