[plt-scheme] 204.7
The exp-tagged code in CVS for MzScheme and MrEd is now version 204.7.
Changes:
* Added a "package.ss" library to MzLib. It exports `package' and
`open', which correspond to Chez's `module' and `import', plus a few
other forms.
The `package' and `open' forms are especially useful to macro
implementors:
"Extending the Scope of Syntactic Abstraction"
Waddell and Dybvig
POPL'99
http://www.cs.indiana.edu/~dyb/papers/popl99.ps.gz
Beware that `import' doesn't act like `define' or `require' when
introduced by a macro. Roughly, `import' exposes bindings that were
hidden, rather than introducing new bindings. See the manual (and
the paper above) for examples.
The "package.ss" library is based on Scott Owens's "structure.ss"
library, and "package.ss" replaces "structure.ss". To support the
let*-like behavior of Standard ML structures, "package.ss" provides
`define*', `open*', etc.
* Added `module->namespace', which takes a module name and returns a
namespace that corresponds to the body of the module.
Evaluating with this namespace is like evaluation in DrScheme's
interactions window in the `(module ...)' language, except that
changing a namespace binding changes the corresponding module's
internal and exported defintions. (This is like Tung's environment
circa 1992.)
* Added `namespace-module-registry'.
Previously, a namespace was defined to contain the table of loaded
and instantiated modules. That definition doesn't work with
`module->namespace', where different namespaces share the module
table. The result of `namespace-module-registry' represents this
sharing. It's useful mainly to module name resolvers.
* Added #; reader comment syntax (again, like Chez).
* Added `namespace-undefine-variable!', which is like MzScheme's old
`undefine'.
* Changed `syntax-local-context' so that it returns a list for
internal-define expansion, instead of 'internal-define, and changed
`local-expand' so that it accepts a list to mean internal-define
expansion.
For built-in expansion, each list item identifies an active
internal-define expansion context. Transformers that call
`local-expand' for internal-define-like expansion should generate a
key that represents the context; use the same key for each expansion
in a set of definitions, and cons it onto `(syntax-local-context)'
if the result is a list (or cons it onto null if the result is not a
list).
See also `(lib "context.ss" "syntax")'.
This change supports the `package' and `open' forms, so that they
work right with macros such as `unit', `class', `local', or anything
else that needs `local-expand'.
* Added `syntax-local-get-shadower'. See the docs for details.
* Changed top-level `define-syntaxes' to treat zero results
from the right-hand side as a kind of abort, so that
(define-syntax (id ...) (values))
declares the ids without binding them. This is useful for macros
that expand to mutuaully recursive definitions of private variables
(like, of course, `package').
Matthew