[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

# A. Release Notes

The previous full release of MIT Scheme was version 7.5.17. This section describes changes that have occurred since that time. For more detailed information, see the ``ChangeLog`' 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 |  |
> A.2 Older Changes |  |

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## A.1 Recent Changes

These are the changes since release 7.6.0:

- Release 7.7.1 fixes several bugs in IMAIL; fixes a bug that prevented the use of server sockets on Windows systems; and fixes a bug that caused the debugger to generate errors in common circumstances.

- Release 7.7.0 provides "hygienic" macro support, as defined in R^4RS and R^5RS. This is a complete rewrite of the syntax engine, so any program that uses macros should be rewritten to use the new engine. A subset of the old macro-definition syntax is still supported, but this will eventually be removed. Note that the new syntax engine has no effect on the compiled-code format; most binaries compiled by release 7.6.x should continue to work.

  There are several user-visible consequences to this change:

  - These syntactic keywords have been eliminated: `define-macro`, `in-package`, `macro`, `make-environment`, `scode-quote`, `unassigned?`, and `using-syntax`.

  - The syntactic keyword `the-environment` has been restricted to use in top-level environments. It is no longer allowed in the body of any binding form (e.g. `lambda`, `let`).

  - Syntactic keywords are now stored in environments, rather than in a separate syntax-table structure. The environment abstraction has been enhanced to support this, as well as to make it more general. The changes are documented in the reference manual.

  - The syntax-table abstraction has been eliminated, and most procedures and arguments involving syntax tables have been removed. One exception is the `load` procedure, which still accepts a syntax-table argument, but ignores it.

  Although the 7.6.1 release had a workaround for problems with certain AMD Athlon processors, the workaround was ineffective on machines running Windows operating systems (and possibly OS/2 systems as well). This version fixes that problem.

  The hash-table abstraction is now always loaded. It's not necessary to call `load-option` prior to use of hash tables. For upwards compatibility, calling ``(load-option 'hash-table)`' is still permitted but does nothing.

- Release 7.6.1 provides a workaround for a bug on some AMD Athlon processors (specifically, models 1, 3, and 4). This bug causes those processors to incorrectly execute certain kinds of self-modifying code, including that used by MIT Scheme.

  Release 7.6.1 also fixes a problem that caused the *PARSER and XML subsystems not to load correctly on Windows and OS/2 systems.

[ < ] | [ > ] |  | [ << ] | [ Up ] | [ >> ] |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

## A.2 Older Changes

These are the changes that occurred between releases 7.6.0 and 7.5.17:

- The variable-reference machinery has been completely redesigned. The new design provides two new features: (1) a procedure `link-variables` that can link two variable bindings with different names (previously `environment-link-name` could only link bindings with the same name); (2) a new procedure `unbind-variable` that can remove a variable binding. Both of these operations work only on "top-level" environments; they don't work on environments created by invoking compiled procedures.

  This is an incompatible change to the compiled-code representation. All programs must be recompiled.

- The "packaging" subsystem has been redesigned to make it more flexible. The new design takes advantage of the improved variable-linking mechanism to allow packages to export bindings using names different from their internal names. Also, each package now maintains an in-memory data structure that should (in principal) allow it to be uninstalled or reinstalled. This subsystem is still evolving; expect further changes in the future.

  This subsystem is now included in the released binaries; it can be loaded by ``(load-option 'cref)`'.

- Compiled-code debugging information is now keyed to prevent using the wrong debugging info when examining compiled code. This means that in-memory data structures have an identifying key that is matched against a corresponding key in the debugging-info file. The debugging info is used only when the keys match.

- MIT Scheme now has a non-validating XML parser that is mostly conformant (except that it doesn't support UTF-16).

- There is very limited support for UTF-8. At present this is only used by the XML parser.

- All string and character procedures now operate on ISO-8859-1 rather than US-ASCII as the base character set. This isn't real internationalization support, but at least it broadens the character support slightly. This involved changing a number of procedures that were formerly written in C and are now written in Scheme, which may have a performance impact on some uses.

- The procedure `length` now detects circularities in its argument and signals an error.

- A new `rexp` facility provides a more readable syntax for specifying regular expressions. This syntax can be compiled into the usual syntax.

- There is a new parser buffer abstraction that supports the building of parsers with backtracking. An associated high-level parser description language allows parsers to be described in a BNF-like language that is compiled into efficient Scheme code.

- A new procedure `flo:finite?` returns ``#f`' for infinite or ``NaN`' flonums and ``#t`' for all others.

- The signal-handling code for GNU/Linux systems has been changed to take advantage of additional information identifying the types of arithmetic exceptions. This allows more accurate error messages to be generated.

- The following procedure names were changed:

  Old name | New name
  `list-transform-positive` | `keep-matching-items`
  `list-transform-negative` | `delete-matching-items`
  `list-search-positive` | `find-matching-item`

  and the following new procedures were implemented: `keep-matching-items!` and `delete-matching-items!`.

- IMAIL now supports commands to sort folders according to various criteria. The design is similar to that of Rmail.

- IMAIL has been re-engineered to improve performance on very large folders. There is now a disk cache for each IMAP folder, to eliminate unnecessary network delays. Also, the summary buffer previously used a quadratic algorithm to associate lines in the summary with messages in the folder; it now uses a linear algorithm.

- A new IMAIL command `imail-file-message` appends the text of a message to a file more or less as it appears in the buffer. This is intended to allow collecting messages into a file in a human-readable format.

- IMAIL used to determine the type of file folders by their file names; now it examines the file contents instead. When creating a new file folder, it prompts for the type.

[ << ] | [ >> ] |  |  |  |  |  | [Top] | [Contents] | [Index] | [ ? ]

This document was generated by Chris Hanson on June, 17 2002 using texi2html