Monday, November 20, 2006

PLT Scheme version 360

There is now a new release of PLT Scheme in town. Download it from your
local bit-pusher.

To me the most exciting feature is Ryan Culpepper's macro stepper, which will be prove to be an invaluable tool when it comes to understanding and debugging macros.

The release announcement:

PLT Scheme version 360 is now available from

  • DrScheme now has a macro stepper that traces through macro expansion step by step. The graphical display uses colors to illustrate bindings and a side-panel to display additional syntax information.

    For additional information and an illustrated introduction, see

  • PLT Scheme now includes a new "Lazy Scheme" language level, similar to MzScheme (with a few added libraries), but with call-by-need semantics. There is also a "lazy" collection that can be used to mix lazy code with eager code (put the former in a module that uses(lib "" "lazy") as its language module).

  • New support for prompts and composable continuations, closely resembling Dorai Sitaram's tagged `%' and `fcontrol' operators. The new "" library provides implementations of many other delimited-continuation operators, including `prompt', `control', `shift', `reset', `spawn', `splitter', and `cupto'. Moreover, these operators all work in a reasonable and useful way with each other, with dynamic-wind', and with continuation marks (which can be used for dynamic variables).

    For more information, see Sitaram's papers at

  • Regexp support now includes the usual collection of "Perl-compatible" features: numeric quantifiers, backreferences, character classes, Unicode predicates, case-insensitive mode, multi-line mode, lookahead, lookbehind, non-backtracking, and conditionals --- all with improved performance.

  • Compiler improvements include a lambda-lifting pass and better handling of `call-with-values'.

  • The "readline" collection is now included. MzScheme cannot load this library by default, since linking to GNU readline would require licensing PLT Scheme under GPL instead of LGPL. However, you can link readline yourself by adding

    (when (regexp-match? #rx"xterm" (getenv "TERM"))
    (dynamic-require '(lib "" "readline") #f))

    in your "~/.mzschemerc" to use readline for MzScheme's REPL.