PLT Design has released version 6.1 of Racket, its general purpose, multi-paradigm programming language belonging to the Lisp/Scheme family. Racket 6.1 introduces a new way of handling local recursive variable definitions and several other language features.
The major innovation added to Racket v6.1, says Ryan Culpepper on racket-lang.org, is the way local recursive variable definitions are handled. Previously to 6.1, variables were initialized with an #undefined
value. Now, variables are not initialized anymore and Racket raises an exception when trying to access a variable before its definition. This change aims at providing early and improved feedback to developers about improper use of variables and should not alter a program's semantics, since programs are rarely intended to produce #undefined
, says Ryan. In addition to that, the new behavior is consistent with the existing convention about module-level variables, which already used to raise an exception when used before definition.
The new local variable definition behavior is not backward-compatible and will break any program incorrectly accessing undefined variables as well as programs that include
(define undefined (letrec ([x x]) x))
as a pattern to obtain the #undefined
value. The correct way to obtain an #undefined
value is now through racket/undefined
.
Other changes introduced with the new Racket version are the following:
- Plumbers provide programmers with more control over the timing of flushes and enable arbitrary flushing actions through a new set of functions, such as
current-plumber, plumber-add-flush!
, andplumber-flush-all
. - Contracts can now easily find simple mistakes in contracted data structure implementations (e.g. an accidental reverse of a conditional in a heap invariant check).
- Graphics libraries and their dependencies (Pango, Cairo, GLib, etc.) have been upgraded on Windows and Mac OS X.
- The openssl library supports forward secrecy via DHE and ECDHE cipher suites and Server Name Indication.
- The
mzlib/class100
library has been replaced byracket/class
.
Racket (formerly named PLT Scheme) is a free general purpose, multi-paradigm programming language in the Lisp/Scheme family released under the LGPL license. One of its design goals is to serve as a platform for language creation, design, and implementation. The language is used in a variety of contexts such as scripting, general-purpose programming, computer science education, and research.