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
code.
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.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.
Additional 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
unspecified.
-
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.
-
New procedure
set-string-maximum-length!
.
-
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 support CVS; VC program logic cleaned up;
several bugs fixed in abbrev support; new procedures convert times
to/from ISO C ctime() format.
-
Release 7.5.5 changes the implementation of
sort
(and
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 flo:<=
, flo:>=
,
flo:max
and flo:min
.
-
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
under GNU/Linux.
-
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
unchanged.
-
Release 7.5.1 fixes some bugs in Edwin RMAIL and in how Edwin displays
characters with codes between
#x80
and #xA0
.
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
throughout.
A.3 Base System Changes
These are the major changes to the base system:
-
Command-line options:
-
The
-compiler
and -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
-constant
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 -constant
.
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.
-
Numeric input/output:
-
Several changes to the number reader and printer have resulted in
greatly improved performance, particularly for floating-point numbers.
-
The variable
flonum-unparser-cutoff
can now specify the format in
which the numbers are to be printed, e.g. scientific
or
engineering
.
-
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
when appropriate.
-
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
8-bit characters.
-
Ports:
-
The
fresh-line
operation is now supported by all common port
types.
-
close-input-port
and close-output-port
now close
only one side of a bidirectional port; previously they closed both
sides.
-
The following port operations have been eliminated:
write-string
, read-chars
, and write-chars
.
-
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.
-
Operating-system interface:
-
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
quality.
-
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.
-
open-tcp-stream-socket
and open-unix-stream-socket
now
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
msdos
, vfat
, ntfs
, and hpfs
, and sets the
default line translation for files on those systems to "\r\n"
.
-
Red-black trees now support operations to read or delete the minimum or
maximum element of a tree.
-
Both
merge-sort
and quick-sort
are now available. As
before, sort
defaults to merge-sort
.
-
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.
-
Transcripts (i.e.
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.
-
OS/2:
-
Under OS/2, the default font for the Scheme console window has been
changed to
"8.Courier"
.
-
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
correctly.
-
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
object-oriented code.
-
Undocumented interfaces now provide support for
gdbm
,
MD5 checksums, and blowfish encryption. The blowfish
encryption is disabled by default, but we may later distribute a key to
enable it.
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
bzip2
,
gzip
, or compress
. It can also read and write files
encrypted with blowfish (but this is currently disabled due to export
restrictions).
-
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.
-
The command
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
format.
-
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.
-
The command
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.
-
The command
manual-entry
now uses multiple buffers with Emacs 19
naming conventions.
-
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
in Emacs.
-
All commands operating on frames now use the noun "frame" in their
names, for consistency with Emacs. Previously they used "screen".
-
New commands
show-frame-size
, show-frame-position
,
set-frame-size
, and set-frame-position
.
-
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
edwinSecondary
.
-
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
mail-relay-host
and smtp-require-valid-recipients
.
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
support.
-
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
floppy devices.
-
International keyboards should now work properly. However, this hasn't
been tested properly; we'd appreciate information about how well it
works.
-
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
the
HOME
environment variable under Windows NT.
-
Edwin has its own copy of `gzip.exe' to guarantee that there's
support for
gzip
-compressed files.
-
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
attrib
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, 25 2000
using texi2html