The Racket Manifesto

The creation of a programming language calls for guiding principles that point
the developers to goals. This article spells out the three basic
principles behind the 20-year development of Racket. First, programming is about
stating and solving problems, and this activity normally takes place in a
context with its own language of discourse; good programmers ought to formulate this
language as a programming language. Hence, Racket is a
programming language for creating new programming languages. Second, by
following this language-oriented approach to programming, systems become
multi-lingual collections of interconnected components. Each language and
component must be able to protect its specific invariants. In support,
Racket offers protection mechanisms to implement a full language
spectrum, from C-level bit manipulation to soundly typed extensions. Third,
because Racket considers programming as problem solving in the correct language,
Racket also turns extra-linguistic mechanisms into linguistic
constructs, especially mechanisms for managing resources and projects. The
paper explains these principles and how Racket lives up to them,
presents the evaluation framework behind the design process, and concludes with
a sketch of Racket's imperfections and opportunities for future improvements.