Generally Racket appears to be a very usable dialect of Lisp/Scheme.
Racket is particularly well suited for those who want to develop their own programming language (including those not based on S-expressions), given that the creators of Racket are programming language researchers. For example, a number of Racket subsets have been created to assist students who are learning Racket/Scheme via the How to Design Programs book.1 The Arc language by Paul Graham is also implemented in the Racket environment.
Racket’s developers wanted to make sure it was a practical language. To that end, there is a bundled IDE (DrRacket) with syntax highlighting, parentheses matching, and integrated debugging. There is also a package management system (PLaneT).2 And built-in libraries for working with several real-world systems, such as GUIs, networking, databases, JSON/XML, etc. A cross-platform executable can easily be built. And everything is well documented.
Graphics and GUI programs are supported better than the average language. For example pictures are rendered natively in the Racket REPL, including their use within expressions. And the built-in Racket GUI library is fairly decent.
The combination of a decent built-in GUI library along with the ability to compile cross-platform executables makes Racket useful for writing cross-platform GUI applications.
The original version of Racket’s GUI library was implemented on top of wxWidgets.3 Thus some of wxWidget’s poor design decisions leak through:
However, some fixes were made too:
Sadly, RacketGUI lacks some advanced controls I often want:
list-box%control supports cells that only contain text.
This is not surprising since these controls are hard to implement and are not well-supported by the original underlying wxWidgets library:
The HtDP book uses the dialects “Beginning Student”, “Intermediate Student”, and “Advanced Student”. These sublanguages restrict the use of certain language features (such as using functions as objects) and can provide better error messages (which avoid mentioning advanced features not supported by the sublanguage).↩
It is possible to import modules directly from the PLaneT repository, which will automatically download and install the module if it isn’t already present. Neat!↩
Racket’s GUI layer has apparently been redone a couple of times. Originally it was based on wxWidgets. Later it was rewritten to about 200,000 lines of C++ glue to Xt, Win32, and Carbon. Then in Racket 5.1 it was replaced with about 80,000 lines of Racket glue to Gtk, Win32, Cocoa, Cairo, and Pango. That’s a 60% reduction in code! More details on the Racket blog.↩