Racket, a multi-paradigm programming language belonging to the Lisp/Scheme family, has reached version 6.4, PLT announced. The new version adds several new features, including an incremental garbage collector (GC), and fixes a vulnerability in the web server.
Racket’s new incremental garbage collector is specifically aimed at interactive programs, which, PLT say, will benefit in responsiveness thanks to the elimination of long GC pauses. The new GC behaviour must be specifically requested executing (collect-garbage 'incremental)
. The reason for not having the new GC as a default lies with the fact that it tends to use more memory, due to its collecting objects more aggressively and not using compaction, and with its overall time performance, which could be slower than the older GC. So, the old behaviour is still to be preferred for batch programs, where GC pauses are not easily noticed.
As mentioned, Racket 6.4 also fixes a serious security vulnerability in the web server, triggered by serving static files. The vulnerability make it possible to access files located on a machine running Racket’s web server and affects also Racket versions previous to 6.0. Besides fixing the vulnerability in 6.4, PLT also provides a package to patch web-server-lib
for Racket 6.0+. PLT also mentions that it is possible to patch previous versions of Racket.
Other improvements to the language are in the area of Typed Racket, which generates now more permissive contracts for Any
type, thus reducing the number of contract errors in typed/untyped programs. Furthermore, the Redex DSL, aimed to specify and debug the operational semantics of formal languages, now supports scoped binding of specifications. You can read the full list of changes in PLT announcement.
Racket is 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.