TY - GEN
T1 - The racket manifesto
AU - Felleisen, Matthias
AU - Findler, Robert Bruce
AU - Flatt, Matthew
AU - Krishnamurthi, Shriram
AU - Barzilay, Eli
AU - Mccarthy, Jay
AU - Tobin-Hochstadt, Sam
N1 - Funding Information:
Over 20 years, this work was partially supported by our host institutions: Rice University, University of Utah, Brown University, University of Chicago, Northeastern University, Northwestern University, Brigham Young University, and Indiana University as well as several funding agencies and foundations: AFOSR, CORD, Darpa, the Department of Education?s FIPSE program, the ExxonMobile Foundation, Microsoft, the Mozilla Foundation, NSF, the Texas Advanced Technology Program. We wish to thank Claire Alvis, Ryan Culpepper, John Clements, Stephen Chang, Richard Cobbe, Greg Cooper, Christos Dimoulas, Bruce Duba, Carl Eastlund, Burke Fetscher, Cormac Flanagan, Kathi Fisler, Tony Garnock-Jones, Paul Graunke, Dan Grossman, Kathy Gray, Casey Klein, Jacob Matthews, Scott Owens, Greg Pettyjohn, Jon Rafkind, Vincent St-Amour, Paul Steckler, Stevie Strickland, James Swaine, Asumu Takikawa, Kevin Tew, Neil Toronto and Adam Wick for helping us hone the guidelines. In addition to the reviewers, Ben Greenman, Vincent St-Amour, Asumu Takikawa made several suggestions on improving the presentation.
PY - 2015/5/1
Y1 - 2015/5/1
N2 - 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.
AB - 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.
KW - Design guidelines
KW - Full-spectrum language
KW - Language generation
UR - http://www.scopus.com/inward/record.url?scp=84959046505&partnerID=8YFLogxK
UR - http://www.scopus.com/inward/citedby.url?scp=84959046505&partnerID=8YFLogxK
U2 - 10.4230/LIPIcs.SNAPL.2015.113
DO - 10.4230/LIPIcs.SNAPL.2015.113
M3 - Conference contribution
AN - SCOPUS:84959046505
T3 - Leibniz International Proceedings in Informatics, LIPIcs
SP - 113
EP - 128
BT - 1st Summit on Advances in Programming Languages, SNAPL 2015
A2 - Ball, Thomas
A2 - Bodik, Rastislav
A2 - Lerner, Benjamin S.
A2 - Morrisett, Greg
A2 - Krishnamurthi, Shriram
PB - Schloss Dagstuhl- Leibniz-Zentrum fur Informatik GmbH, Dagstuhl Publishing
T2 - 1st Summit on Advances in Programming Languages, SNAPL 2015
Y2 - 3 May 2015 through 6 May 2015
ER -