Go to the first, previous, next, last section, table of contents.
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.
These are the changes since release 7.5.0:
-
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
.
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.
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.
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
.
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.
Go to the first, previous, next, last section, table of contents.