[Racket announcement] Racket v6.0.1

From: Ryan Culpepper (ryanc at ccs.neu.edu)
Date: Thu May 8 16:50:24 EDT 2014

Racket version 6.0.1 is now available from


* A new `racket/undefined` library exports `undefined` as the
   value currently produced by

     (letrec ([x x]) x)

   This library anticipates a future where that expression will
   raise an exception. The `racket/undefined` library will continue
   to offer the `undefined` value as a bridge between versions and
   as a last resort.

* The drawing and GUI libraries provide improved support for
   high-resolution bitmaps and their use on Retina displays. For
   example, `read-bitmap` includes a `#:try- at 2x?` option to trigger
   substitutions through the usual "@2x" naming convention.

* Check Syntax cooperates with Typed Racket to show arrows and other
   Check Syntax highlighting even when there is a type error.

* Functions provided via contract-out that have first-order
   contracts perform better.

* The contract boundary between typed/untyped modules is much less
   expensive. Typed Racket now avoids generating contracts for
   places where contracts failures cannot happen.

* Occurrence typing now works better with when/unless. Example:

     (let ((x (read)))
       (unless (number? x) (error 'bad-input))
       (add1 x))

* Types in Typed Racket are now pretty-printed.

* Function types can now be written in prefix style, which is now
   preferred and is used for printing. Infix function types are still
   accepted for backwards compatibility.

* A new `->*' type constructor is used for writing types for
   functions with optional and keyword arguments. The notation is
   similar to the matching contract combinator.

* Typed Racket forms do not have a `:' suffix by default now. For
   example, the `struct' form replaces `struct:'. The suffixed
   versions are all provided for backwards compatibility.

* Typed Racket now has preliminary support for classes and
   objects. However, it is still experimental and the APIs are
   subject to change.

* Type aliases in Typed Racket now support recursion and mutual
   recursion. For example, `(define-type (MyList X) (U Null (Pair X
   (MyList X))))' is now a valid type alias.

* Plot correctly renders intersecting 3D graphs and
   non-grid-aligned 3D rectangles.

* Elements in plots output in PDF/PS format have the same relative
   scale as in other formats. In particular, it is not necessary to
   adjust `plot-font-size` to make PDF plots look the same as PNG.

Feedback Welcome

Posted on the announce mailing list.