A. Release Notes
The previous full release of MIT Scheme was version 7.4.7 in 1998. This
section describes major changes that have occurred since that time. For
more detailed information, see the `RCS.log' files in the source
Note that MIT Scheme still conforms to the Revised^4 Report on the
Algorithmic Language Scheme, but not to the Revised^5 Report on
The Algorithmic Language Scheme.
A.1 Recent Changes
These are the changes since release 7.5.0:
Release 7.5.17 includes enhancements to IMAIL and many bug
fixes. IMAIL now has a Dired-like browser for folders; the
`rmail:' and `umail:' folder types have been retired in favor
of a more uniform `file:' type; and some problems using
IMAIL with Microsoft Exchange have been fixed. Many people
experienced trouble trying to compile release 7.5.16 from source code; a
number of bugs have been fixed and this release should now build cleanly
on most unix systems. Finally, the representation of character-set
objects has been changed; unfortunately this requires recompiling any
code that refers to the procedures
Release 7.5.16 fixes two limitations in email support. First, the
mail-sending interface has been reworked to generate the formatted
message to a temporary file rather than a buffer. This allows sending
very large attachments. Second, IMAIL's handling of
file-based folders has been reworked to store a copy of the file in an
"external string" The in-heap data structures no longer contain excerpts
from the file, but instead keep indexes into the file and extract the
excerpts on demand. This allows reading very large mail files with
reasonably-sized heaps (however it does require enough virtual memory to
hold an image of the file). The actual in-heap storage is quite small,
approximately 100 bytes per message.
Release 7.5.15 has no user-visible changes. The crypto code in the
system has been re-engineered so that it can be dynamically loaded on
GNU/Linux systems, thus avoiding a direct dependence on crypto
libraries. This allows Scheme to be used without crypto libraries
(except for the crypto support, of course).
Release 7.5.14 has changed the way that the crypto libraries are
handled. We now support OpenSSL and mcrypt in addition to mhash and the
older, more custom libraries we were using. Additional bug fixes:
transcript files now record output as they are supposed to; Edwin Info
mode doesn't complain if Scheme's private Info directory is missing;
termcap support has been reworked to eliminate compilation errors on Red
Release 7.5.13 finishes the source-tree reorganization; this software is
now packaged for Debian. A fatal bug in the bchscheme garbage collector
has been fixed. X graphics procedures now accept any coordinate
argument that satisfies the
real? predicate; previously it did
not accept exact rational numbers or complex numbers with inexact
imaginary zero. Quite a few bugs have been fixed in IMAIL,
including some changes needed to interact properly with UW
IMAP. IMAIL's user interface has been tweaked a
bit. Edwin now has a
Release 7.5.12 is a complete reorganization of the source tree to use
modern configuration techniques based on Autoconf. The purpose of this
reorganization is to simplify maintenance, porting, and the generation
of binary packages (e.g. Debian `.deb' packages). The C code has
been extensively modified to support this, and a lot of general cleanup
has been done. There should be no user-visible changes due to the
reorganization, aside from the usual crop of bug fixes.
Release 7.5.11 includes unencumbered support for Blowfish encryption,
reflecting recent changes to US export controls. More bug
fixes, including a fatal bug in the
purify procedure when running
bchscheme, which has been around for many years and never noticed.
Release 7.5.10 fixes numerous bugs, and offers significant speed
improvements to the basic operation of IMAIL. This release
also provides a shell script to build the system from source code (works
on GNU/Linux and FreeBSD systems only).
Release 7.5.9 adds the IMAIL mail reader; IMAIL is a
new Rmail-like mail reader that supports IMAP and
MIME. Edwin's mail-sending support has also been enhanced to
understand MIME, so that it is now possible to send
MIME attachments. Numerous changes to the runtime system and
to Edwin have been made to support these changes.
Edwin now has rudimentary support for a mouse wheel.
Edwin buffer-menu now does better job aligning its columns.
In Edwin, M-x vc-version-other-window now defaults the version if
string->decoded-time (and consequently other procedures that
convert RFC-822 time strings) now accepts two-digit years,
pivoting around 1970. This is a crock, but we have seen recent email
messages utilizing such strings.
Release 7.5.8 fixes a nasty uninitialized-memory bug in the Win32
event-handling code. No other system is affected.
Release 7.5.7 changes: add support for the mhash library under
GNU/Linux; fix bug in international keyboard support under Windows
(thanks to Jacques Herry); beep now works properly in Edwin under
Windows 9x; fix a fatal Edwin bug triggered by deleting a continued line
at the top of the window; fix assorted bugs in Edwin's VC mode.
Release 7.5.6 has a number of changes mostly having to do with
CVS: sources converted from RCS to CVS;
change logs converted to GNU ChangeLog format; VC
now supports CVS; VC program logic cleaned up;
several bugs fixed in abbrev support; new procedures convert times
to/from ISO C
Release 7.5.5 changes the implementation of
merge-sort) when applied to lists: previously this procedure was
recursive to a depth of half the length of the list being sorted; the
new implementation recurses only to a depth of lg(N). Additionally,
this release provides new procedures
Release 7.5.4 fixes some bugs in the SOS object instantiation
code (reported by Joe Marshall). It also includes several improvements
to Edwin: implementation of abbrevs; implementation of adaptive fill;
change incremental search to terminate on RET rather than
ESC; show mode-specific key bindings in C-h m.
Release 7.5.3 fixes problems in the Windows port that caused errors when
trying to read gzipped Info files. This release also fixes a bug that
prevented the code from compiling properly when using egcs or GCC 2.95.x
Release 7.5.2 adds support for FreeBSD; no other system is affected.
The code for GNU/Linux has been re-compiled but should otherwise be
Release 7.5.1 fixes some bugs in Edwin Rmail and in how Edwin displays
characters with codes between
A.2 Overall Changes
The following changes affect the entire system:
MIT Scheme has been re-released under the GNU General Public License.
With this release we no longer support Windows 3.1 or any form of
DOS. The only supported Microsoft operating systems are
Windows 95, Windows 98, and Windows NT. We have tested on Windows 95,
Windows 98, and Windows NT 4.0.
Although there have been no significant changes to the compiler, there
have been some low-level representation changes to records and
structures that make compiled code in this release incompatible with
that from the previous release.
SOS object-oriented programming extensions are now included in
the base release. They are not loaded by default; evaluate
(load-option 'sos) to load them.
The documentation has been overhauled. The Reference Manual has
sections describing both new facilities and also some older facilities
that were never properly documented. The User's Manual has new material
in the Installation, Debugging, and Edwin chapters, and has been revised
A.3 Base System Changes
These are the major changes to the base system:
-edwin command-line options can now be
specified together, meaning that a band containing both compiler and
Edwin support should be loaded.
The heap-sizing code now automatically defaults the
command-line option to the correct size for the band being loaded, and
adds the heap used by the band to the requested heap size. In
consequence, it should rarely be necessary to specify
An additional benefit is that the
-heap command-line option now
specifies exactly how much heap space is available when Scheme is
started; previously the available amount was less than the specified
amount due to the band's heap usage.
Command-line arguments can now be defined by user code.
Several changes to the number reader and printer have resulted in
greatly improved performance, particularly for floating-point numbers.
flonum-unparser-cutoff can now specify the format in
which the numbers are to be printed, e.g.
The parser now treats
*parser-radix* differently: if it is set to
a value other than
10 and the parser encounters radix-10 syntax
(e.g. a decimal point), an error is signalled.
Strings and characters:
Regular-expression match and search are now available for strings.
String search procedures are now implemented, using Boyer-Moore search
Characters now have 16 bits of character code (instead of 7) to allow
8-bit ISO latin and Unicode characters. Strings are still based on
fresh-line operation is now supported by all common port
close-output-port now close
only one side of a bidirectional port; previously they closed both
The following port operations have been eliminated:
The low-level port data abstraction has been overhauled. The new design
has port types that implement the operations for the port, and are
shared between all ports of a given type.
Synchronous subprocesses can now be run from Scheme code.
Date and time support has been fleshed out and now provides a rich set
of representations and conversions. Unfortunately, this support depends
on underlying support of the C library, which is sometimes of low
A bug in socket support has been fixed: port numbers are now specified
normally and automatically translated to network order. Previously it
was necessary to translate them to network order by hand.
return one I/O port rather than an input port and an output
port. TCP sockets now use
"\r\n" end-of-line marker
regardless of the operating system.
Under Linux, Scheme now detects various foreign filesystems such as
hpfs, and sets the
default line translation for files on those systems to
Red-black trees now support operations to read or delete the minimum or
maximum element of a tree.
quick-sort are now available. As
sort defaults to
Pathname objects can now be written (using
fasdump) on one
operating system and read (using
fasload) on another. Previously
this didn't work between unlike operating systems, such as Windows and
unix, because Scheme only loaded the pathname support for the operating
system it was running on. Now support for all operating systems is
loaded, no matter what system is being used.
Numerous fixes to stream code, eliminating premature dereferencing of
streams, and dropping pointers to streams as soon as possible.
transcript-on) are now local to a particular
REPL. This is usually relevant only when using Edwin, where
there can be several REPL buffers. Previously transcripts
only recorded activity on the Scheme console, and ignored any other
REPLs, including Edwin REPL buffers.
bkpt is no longer a macro. Instead, it extracts an environment
from the continuation it is called with, by looking at the innermost
stack frame. In order for this to work properly, it must not be called
in a tail-recursive position. Calling it in a tail-recursive position
will not generate any errors, but will cause the breakpoint to be
visiting the wrong environment.
Under X11, the BackSpace keysym is treated as Delete, as long as
BackSpace is bound to ASCII backspace.
The `hppacach' program knows how to find kernel files for HP-UX
10.x and later.
Under OS/2, the default font for the Scheme console window has been
More sophisticated heuristics are used to discover the user's home
directory on OS/2 systems.
Under OS/2 Warp 4.0, Scheme now reports the operating-system version
A new undocumented generic-procedure dispatch mechanism and its
associated tagged data structures provides a high-performance substrate
for building CLOS-like object-oriented programming systems.
This mechanism has been fully integrated into the existing record and
defstruct code. The SOS system (which is
documented) has been added as a load option to allow writing
Undocumented interfaces now provide support for
MD5 checksums, and blowfish encryption. The blowfish
encryption is disabled by default, but we may later distribute a key to
A.4 Edwin Changes
These changes affect only Edwin:
The following are new language modes: HTML, Java,
PHP, Verilog, VHDL. Some of these modes are pretty
sketchy, consisting of little more than syntax and indentation -- they
are not to be confused with the more powerful modes provided by Emacs.
Edwin can read and write files compressed with
compress. It can also read and write files
encrypted with blowfish (but this is currently disabled due to export
On PC systems, compressed files, encrypted files, and Rmail files
do not have line translation; they are stored in Scheme's native format
(i.e. with newlines as line terminators).
Edwin now indirects through symbolic links to find the true file being
edited, and backup files go in the directory of the true file rather
than the link.
Commands that read arguments from the minibuffer now have prompt
histories, which can be accessed by using M-p and M-n.
eval-expression is now bound to M-: for
compatibility with newer versions of Emacs.
A new command
insert-filename, bound to C-c C-i, prompts
for a filename in the minibuffer, then inserts it at point. The
formatting of the filename is controlled by the variable
insert-filename-format, which by default uses Scheme string
Shell buffers now implement command completion. This is overloaded onto
the filename-completion command C-M-i just as in Emacs.
A new command-line option
-edit causes the editor to start up
when Scheme is started.
A new command
inferior-repl-flush-output, bound to C-c C-o,
deletes output from the previous command. This works similarly to the
corresponding command in shell buffers.
Errors in the REPL buffer now prompt in the REPL
buffer itself, rather than in the minibuffer as previously. The new
prompts are less intrusive.
The evaluation commands now permit the evaluation environment to be set
to the name of a package, and use the package's environment if
available. If the package's environment is unavailable, or if the
package doesn't exist, the global environment is used instead.
repl now treats its argument differently, simplifying
the creation of multiple inferior REPL buffers. A new command
set-inferior-repl-buffer associates a Scheme buffer with an
arbitrary inferior REPL buffer, so that evaluation commands in
that Scheme buffer use the specified REPL buffer.
Info now supports the variable
info-directory-list, which works
like that in Emacs.
manual-entry now uses multiple buffers with Emacs 19
Frame-related commands are now bound to C-x 5 as in Emacs, e.g.
C-x 5 f finds a file in another frame. The command
split-window-horizontally has been moved to C-x 3, again as
All commands operating on frames now use the noun "frame" in their
names, for consistency with Emacs. Previously they used "screen".
Under X11, Edwin now distinguishes between its primary frame and all
other frames when finding resources. The new X resource name for these
secondary frames is
Sending mail is now supported through a direct SMTP interface.
This interface will work on any operating system that supports sockets
(all of the systems we current distribute for). See the variables
A.5 Windows Changes
Many substantial changes have been made to the Windows port, mostly to
bring it up to par with the other ports.
There is now a single input queue for events, which fixes various small
but annoying bugs having to do with events not being read at times when
they should have been.
The command-line parser has been improved so that it will accept
arguments with spaces in them. In order for this to work properly, the
argument must be surrounded by double quotes. This fix allows Scheme to
be installed in a directory whose name contains spaces.
Scheme now understands about Windows 98 version strings, and furthermore
provides more detailed information about specifics of the platform.
Scheme now more aggressively allocates low memory, and consequently is
able to allocate slightly larger heaps. Unfortunately there are
inherent limitations on the heap size that cannot easily be worked
around in this fashion. If you need more memory, you must use a
friendlier operating system, or wait for Windows 64-bit addressing
The Scheme microcode now compiles using Visual C++ 5.0 or later.
However it is probably not desirable to do this, because Visual C++
links in certain libraries at key places in the memory image, and
consequently limits the heap to fairly small sizes. The microcode we
distribute is compiled with Watcom C/C++ 11.0, which does not restrict
our heap allocation as much.
Various pop-up error dialogs are now suppressed, e.g. for inaccessible
International keyboards should now work properly. However, this hasn't
been tested properly; we'd appreciate information about how well it
Subprocesses and sockets are now supported. However, Edwin's shell mode
works only under Windows NT; there is something wrong with the Windows
9x subprocess support that we don't yet understand.
Scheme now uses more sophisticated heuristics to discover the user's
home directory on Windows systems. It is no longer necessary to bind
HOME environment variable under Windows NT.
Edwin has its own copy of `gzip.exe' to guarantee that there's
Edwin now recognizes the standard Windows shell prompt in shell buffers.
Edwin printing commands now work.
Edwin now supports cut and paste using the kill and yank commands.
All Dired commands are now supported. Dired formats directory listings
in native format rather than unix format. The M command changes
mode bits, which are specified much like arguments to the
command. The S command toggles whether or not hidden/system files
are shown; by default these files do not appear in Dired listings.
New undocumented primitives provide access to the registry.
This document was generated
by Chris Hanson on July, 18 2001