Release Announcement for Version 6.1

Racket 6.1

The MAJOR INNOVATION concerns local recursive variable definitions.
Instead of initializing variables with an `undefined' value, Racket
raises an exception when such a variable is used before its definition.
(Thanks to Claire Alvis for adapting Dybvig's "Fixing Letrec" work.)

Since programs are rarely intended to produce #<undefined>, raising an
exception provides early and improved feedback. Module-level variables
have always triggered such an exception when used too early, and this
change finally gives local bindings --- including class fields --- the
same meaning.

This change is backwards-incompatible with prior releases of Racket.
Aside from exposing a few bugs, the change will mainly affect programs
that include

(define undefined (letrec ([x x]) x))

to obtain the #<undefined> value. In its stead, Racket provides the same
value via the `racket/undefined' library (which was introduced in the
previous release). Programmers are encouraged to use it in place of the
pattern above to obtain the "undefined" value.

The release also includes the following SMALL CHANGES:

* PLUMBERS generalize the flush-on-exit capability of primitive output
  ports to enable arbitrary flushing actions and to give programmers
  control over the timing of flushes (i.e., a composable `atexit').  New
  functions include `current-plumber', `plumber-add-flush!', and
  `plumber-flush-all'.

* CONTRACTS: the contract system's random testing facility has been
  strengthened so that it can easily find simple mistakes in contracted
  data structure implementations (e.g. an accidental reverse of a
  conditional in a heap invariant check).

* REDEX: the semantics of mis-match patterns (variables followed by _!_)
  inside ellipses has changed in a backwards-incompatible way. This
  change simplifies the patterns' semantics and increases the usefulness
  of these patterns.

* TEACHING LANGUAGES: `check-random' is an addition to the preferred
  unit testing framework in the teaching languages. It enables the
  testing of students' functions that use random-number
  generation. (Thanks to David Van Horn (UMaryland) for proposing this
  idea.)

* Upgraded and normalized versions of GRAPHICS LIBRARIES and
  dependencies (Pango, Cairo, GLib, etc.) that are bundled with Racket
  on Windows and Mac OS X. For example, FreeType support is consistently
  enabled.

* TYPED RACKET: its standard library includes contracted exports from
  the Racket standard library, such as the formatting combinators of
  `racket/format'. It also supports Racket's asynchronous channels; see
  the `typed/racket/async-channel' library.

* SSL: The openssl library supports forward secrecy via DHE and ECDHE
  cipher suites (thanks to Edward Lee) and Server Name Indication
  (thanks to Jay Kominek).

* The `mzlib/class100' library has been REMOVED. Use `racket/class'
  instead.