The creation of a programming language calls for guiding principles that point the developers to goals. I spell 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, we offer 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 must also turn extra-linguistic mechanisms into linguistic constructs, especially mechanisms for managing resources and projects. I explains these principles and how Racket lives up to them, presents the evaluation framework behind the design process, and concludes with a sketch of imperfections and opportunities for improvements.
Matthias Felleisen, a Trustee Professor at Northeastern University’s College of Computer Science, has spent 30 years exploring programming languages and the pedagogy of software development. After receiving his PhD at Indiana University in 1987, he launched his academic career at Rice University; in 2001, he moved to Northeastern.
For the first decade of his career, Felleisen developed a new theoretical framework for modeling programming languages. Over time, this framework has provided the most widely used technique for proving type soundness theorems, the fundamental correctness claims for programming languages.
In 1995, Felleisen launched two related projects: (1) a K-12 outreach project with the goal of synthesizing mathematics and programming education and (2) the Racket language design project in support of the outreach project. Felleisen and his team taught dozens of intensive 5-day teacher training workshops over 20 years, focusing on program design as systematic problem solving. Working with Northeastern undergraduates, they also created the Bootstrap curriculum for middle schools; the curriculum has been adopted by code.org. The team’s Racket programming language has become a test bed for language design ideas from mixins to frameworks for domain-specific languages, from software contracts to gradual typing systems, and from web programming disciplines to distributed interactions. It is used in many applications, from DoD software to Naughty Dog’s games.
For his research on programming languages, Felleisen was inducted as an ACM Fellow in 2006 and received ACM SIGPLAN’s Achievement Award in 2012. Also in 2012, his paper on contracts for higher-order languages was picked asthe most influential ICFP 2002 publication. Felleisen has delivered keynote addresses at many programming language conferences, including POPL, ECOOP, and ICFP. For his educational outreach, ACM honored Felleisen with the Karl V. Karlstrom Award in 2010. ACM SIGCSE named Felleisen Outstanding Educator of the Year in 2011. In conjunction with the latter, he delivered the keynote at the annual Symposium on Computer Science Education.