Racket (programming language)

[13] Racket is used by the ProgramByDesign outreach program, which aims to turn computer science into "an indispensable part of the liberal arts curriculum".

Matthias Felleisen founded PLT Inc. in the mid 1990s, first as a research group, soon after as a project dedicated to producing pedagogic materials for novice programmers (lectures, exercises/projects, software).

Matthew Flatt cobbled together MrEd, the original virtual machine for Racket, from libscheme,[21] wxWidgets, and a few other free systems.

Over the following years, PLT added teaching languages, an algebraic stepper,[23] a transparent read–eval–print loop, a constructor-based printer, and many other innovations to DrScheme, producing an application-quality pedagogic program development environment.

By 2001, the core team (Felleisen, Findler, Flatt, Krishnamurthi) had also written and published their first textbook, How to Design Programs, based on their teaching philosophy.

The first generation of PLT Scheme revisions introduced features for programming in the large with both modules and classes.

Version 42 introduced units – a first-class module system – to complement classes for large scale development.

The next major revision was named Version 200, which introduced a new default module system that cooperates with macros.

[24] In particular, the module system ensures that run-time and compile-time computation are separated to support a "tower of languages".

[24] Later on, the 300 series improved the performance of the language runtime with an addition of a JIT compiler and a switch to a default generational garbage collection.

Further, the revision introduced immutable pairs and lists, support for fine-grained parallelism, and a statically-typed dialect.

Subsequently, the graphical user interface (GUI) backend was rewritten in Racket from C++ in Version 5.1 using native UI toolkits on all platforms.

[30] Version 5.3.1 introduced major improvements to DrRacket: the background syntax checker was turned on by default and a new documentation preview tool was added.

Since 2004, the language has also shipped with PLaneT, a package manager that is integrated into the module system so that third-party libraries can be transparently imported and used.

Racket's extensibility features are built into the module system to allow context-sensitive and module-level control over syntax.

Indeed, it is fair to say that the macro system is a carefully tuned application programming interface (API) for compiler extensions.

The language platform provides a self-hosted IDE[13] named DrRacket, a continuation-based web server,[59] a graphical user interface,[22] and other tools.

DrRacket (formerly DrScheme) is widely used among introductory computer science courses that teach Scheme or Racket and is lauded for its simplicity and appeal to beginner programmers.

The editor provides highlighting for syntax and run-time errors, parenthesis matching, a debugger and an algebraic stepper.

Thus, the Racket distribution features an extensive library that covers systems and network programming, web development,[59] a uniform interface to the underlying operating system, a dynamic foreign function interface,[63] several flavours of regular expressions, lexer/parser generators,[58] logic programming, and a complete GUI framework.

Racket has several features useful for a commercial language, among them an ability to compile standalone executables under Windows, macOS, and Unix, a profiler and debugger included in the integrated development environment (IDE), and a unit testing framework.

The result of this program, as shown in DrRacket