[racket-dev] Release Announcement for v6.1, second draft
The release announcement draft that I have so far is below. Please
mail me new items and/or edits.
----------------------------------------------------------------------
Racket v6.1 raises an exception when a local variable is used before
its definition, instead of producing an #<undefined> value. (Thanks
to Claire Alvis.)
Since programs are rarely intended to produce #<undefined>, raising an
exception provides earlier and better feedback to programmer.
Module-level variables have always triggered an exception when used
too early, and this change makes local bindings --- including fields
within a class --- behave the same.
This is a backward-incompatible change to Racket. Aside from exposing
a few bugs, the change mainly affects programs that include
(define undefined (letrec ([x x]) x))
to obtain the #<undefined> value. There is now no #<undefined> value
in the old sense, but the `racket/undefined` library (which was
introduced in the previous release) provides `undefined` for use in
place of the pattern above when an "undefined" value is still needed.
----
* 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;
they semantics is now much clearer and now potentially even
useful. This change simplifies the patterns' semantics and
increases the usefulness of these patterns.
* 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.
* The Typed Racket standard library includes contracted exports from
the Racket standard library, such as racket/format's formatting
combinators.
* Typed Racket now supports asynchronous channels using the
`typed/racket/async-channel' library.
* The openssl library supports forward secrecy via DHE and ECDHE
cipher suites (thanks to Edward Lee) and Server Name Indication
(thanks to Jay Kominek).
----------------------------------------------------------------------