Racket v6.4

Racket version 6.4 is now available from http://racket-lang.org/

  • We fixed a security vulnerability in the web server. The existing web server is vulnerable to a navigation attack if it is also enabled to serve files statically; that is, any file readable by the web server is accessible remotely. For more information, see this post.
  • DrRacket's scrolling is faster.
  • Incremental garbage-collection mode can eliminate long pauses in a program. For example, incremental mode is useful for avoiding pauses in games and animations.
    Programs must specifically request incremental mode with (collect-garbage 'incremental), but libraries such as 2htdp/universe include the request as part of the library's implementation.
  • The default package catalog is an HTTPS address instead of HTTP, and package operations properly validate server certificates when using HTTPS.
  • Documentation may define their own categories for the manual top-level page by using strings, rather than only symbols that name pre-defined categories.
  • The Racket cheat sheet is included in the main distribution.
  • DrRacket is available in Bulgarian, thanks to Alexander Shopov.
  • The contract Typed Racket generates for the Any type is more permissive, allowing more typed/untyped programs to work without contract errors.
  • Redex supports binding specifications; describe which variables bind in which expressions and your metafunctions and reduction relations automatically become scope-sensitive. Thanks to Paul Stansifer for this improvement.
  • All pict functions accept pict-convertibles. This allows for transparent interoperability between pict and libraries like 2htdp/image.
  • The raco profile and raco contract-profile commands provide easy access to profiling tools, without requiring program modifications.
Feedback Welcome


Harikrishnan said...

Great work! and thank you.

I was wondering why isn't incremental garbage collection the default option?

Matthew Flatt said...

Incremental mode has shorter GC pauses, but it tends to use more memory and use more time overall. Those trade-offs are usually worthwhile for interactive programs, but not for batch programs.

Given the trade-offs, non-incremental mode is a more transparent default. It's easy to tell when an interactive program suffers from pauses and needs to turn on incremental mode. It would be more difficult to notice that a batch program runs too slowly because incremental mode hasn't been disabled.

(Incremental mode uses more memory because it moves objects to the old generation sooner, and because the old generation is not compacted. Incremental mode uses more time because extra steps are needed to pause and resume traversal of the old generation – and also because it uses more memory.)