[plt-scheme] v3.99.0.2

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Tue Nov 13 08:33:23 EST 2007

The SVN trunk now contains version

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

 - 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

 - 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

      (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 ....)


      #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 "-".


Posted on the users mailing list.