The SVN trunk now contains version 3.99.0.2.
Below is a summary of the significant changes. For more information,
see "plt/doc/release-notes/mzscheme.MzScheme_4.txt".
- The documentation is being re-organized and re-written. For now,
start with "plt/doc/start/index.html" (which is created by
`setup-plt').
- Pairs created with `cons', `list', `map', etc. are immutable. A
separate datatype, "mpair", implements mutable pairs, with the
operations `mcons', `mcar', `mcdr', `set-mcar!', and `set-mcdr!'.
The identifiers `set-car!' and `set-cdr!' are not bound.
See "Immutable and Mutable Pairs" in "MzScheme_4.txt" for more
information.
- The `mzscheme' command-line syntax has changed. Most notably, if no
flags are provided:
* The first argument, if any, is prefixed with the `-u' flag.
* If there are no arguments, `-i' is added to start the
interactive REPL.
See "MzScheme Command Line and Initialization" in "MzScheme_4.txt"
for more information.
- A plain identifier as a module reference now refers to a library
collection, instead of an interactively declared module. For
example,
(require net/url)
is equivalent to the old form
(require (lib "url.ss" "net"))
To refer to an interactively declared module, quote the name:
`(require 'my-mod)'.
See "Module Paths" in "MzScheme_4.txt" for more information.
- The `mzscheme' module is no longer the preferred base language for
PLT Scheme code. The following are the most common languages:
* `scheme/base' is the most like `mzscheme' in scale and scope,
but with some improved syntax and a more consistent set of
precedures. See "scheme/base" below for more information.
* `scheme' builds on `scheme/base', and it is analogous to the
old "Pretty Big" language. The `scheme' language is the default
language for using the `mzscheme' REPL.
* `scheme/gui' builds on `scheme', adding the MrEd GUI classes
and functions.
Library code should generally start with `scheme/base', which is a
`mzscheme'-like compromise in terms of size (i.e., code size and
likelihood of name collisions) and convenience (i.e., the most
commonly used bindings are available). The `scheme' choice is
appropriate for programs where the additional functionality of
`scheme' is likely to be needed or loaded, anyway.
- The `#lang' shorthand for `module' is now preferred for a module
declaration in a file. In "my-library.ss", instead of
(scheme my-library scheme/base
(define my-stuff ....)
....)
write
#lang scheme/base
(define my-stuff ....)
....
Note the absence of the parenthesis wrapping the module content
(it is terminated by the end-of-file) and the absence of the
redundant identifier `my-library'.
- Under Unix, "~" is no longer automatically expanded to a user's
home directory. The `expand-path' function takes an optional
argument to explicitly expand the abbreviation.
- Hash table printing is enabled by default.
- Graph input syntax, such as `#0=(1 . #0#)' is no longer allowed in
program syntax parsed by `read-syntax', though it is still allowed
for `read'.
- In fully expanded code, `#%datum' expands to `quote'. When using
the `mzscheme' language, beware that `if' in expansions is the `if'
of `scheme/base'. When using the `scheme/base' language, beware
that `lambda' and `#%app' expand to `#%plain-lambda' and
`#%plain-app' (which are also the `lambda' and `#%app' of the
`mzscheme' language). The `require' and `provide' forms expand to
`#%require' and `#%provide'.
- The naming convention for compiled files has changed to preserve
the original file suffix. For example, the bytecode version of
"x.ss" is now named "x_ss.zo". The "_loader" protocol for
native-code extensions is no longer supported.
- Windows console binary names are converted like Unix binary names:
downcased with " " replaced by "-".
Matthew