[racket-dev] Release Announcement for v6.1, second draft

From: Ryan Culpepper (ryanc at ccs.neu.edu)
Date: Fri Aug 1 14:24:42 EDT 2014

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

----------------------------------------------------------------------

Posted on the dev mailing list.