The Racket Manifesto
Matthias Felleisen
The creation of a programming language calls for guiding
principles that point the developers to goals. This talk spells out the
three basic principles behind the 20-year development of Racket. Expressed
as slogans, we say that
- Racket is a programming-language programming language
- Racket is a full-stack programming language
- Racket is a linguist's programming language
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 stack, 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.