The Racket Manifesto

Authors Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi, Eli Barzilay, Jay McCarthy, Sam Tobin-Hochstadt



PDF
Thumbnail PDF

File

LIPIcs.SNAPL.2015.113.pdf
  • Filesize: 9.66 MB
  • 16 pages

Document Identifiers

Author Details

Matthias Felleisen
Robert Bruce Findler
Matthew Flatt
Shriram Krishnamurthi
Eli Barzilay
Jay McCarthy
Sam Tobin-Hochstadt

Cite As Get BibTex

Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi, Eli Barzilay, Jay McCarthy, and Sam Tobin-Hochstadt. The Racket Manifesto. In 1st Summit on Advances in Programming Languages (SNAPL 2015). Leibniz International Proceedings in Informatics (LIPIcs), Volume 32, pp. 113-128, Schloss Dagstuhl – Leibniz-Zentrum für Informatik (2015) https://doi.org/10.4230/LIPIcs.SNAPL.2015.113

Abstract

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.

Subject Classification

Keywords
  • design guidelines
  • language generation
  • full-spectrum language

Metrics

  • Access Statistics
  • Total Accesses (updated on a weekly basis)
    0
    PDF Downloads

References

  1. Harold Abelson, Gerald Jay Sussman, and Julie Sussman. Structure and Interpretation of Computer Programs. MIT Press, 1985. Google Scholar
  2. Gregory H. Cooper and Shriram Krishnamurthi. Embedding dynamic dataflow in a call-by-value language. In European Symposium on Programming, pages 294-308, 2006. Google Scholar
  3. Ryan Culpepper. Fortifying macros. J. Functional Programming, 22(4-5):439-476, 2012. Google Scholar
  4. R. Kent Dybvig, Robert Hieb, and Carl Bruggeman. Syntactic abstraction in Scheme. Lisp and Symbolic Computation, 5(4):295-326, December 1993. Google Scholar
  5. Matthias Felleisen, Robert Bruce Findler, and Matthew Flatt. Semantics Engineering with PLT Redex. The MIT Press, 2009. Google Scholar
  6. Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram Krishnamurthi. How to Design Programs. MIT Press, 2001. Google Scholar
  7. Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram Krishnamurthi. The structure and interpretation of the computer science curriculum. J. Functional Programming, 14(4):365-378, 2004. Google Scholar
  8. Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, and Shriram Krishnamurthi. A Functional I/O System. In International Conference on Functional Programming, pages 47-58, 2009. Google Scholar
  9. Robert Bruce Findler, John Clements, Cormac Flanagan, Matthew Flatt, Shriram Krishnamurthi, Paul Steckler, and Matthias Felleisen. DrScheme: A programming environment for Scheme. J. Functional Programming, 12(2):159-182, 2002. Google Scholar
  10. Robert Bruce Findler and Matthias Felleisen. Contracts for higher-order functions. In International Conference on Functional Programming, pages 48-59, 2002. Google Scholar
  11. Robert Bruce Findler and Matthew Flatt. Slideshow: Functional presentations. J. Functional Programming, 16(4-5):583-619, 2006. Google Scholar
  12. Matthew Flatt. Composable and compilable macros: You want it when? In International Conference on Functional Programming, pages 72-83, 2002. Google Scholar
  13. Matthew Flatt, Eli Barzilay, and Robert Bruce Findler. Scribble: Closing the book on ad hoc documentation tools. In International Conference on Functional Programming, pages 109-120, 2009. Google Scholar
  14. Matthew Flatt and Matthias Felleisen. Units: Cool modules for HOT languages. In Programming Language Design and Implementation, pages 236-248, 1998. Google Scholar
  15. Matthew Flatt and Robert Bruce Findler. Kill-safe synchronization abstractions. In Programming Language Design and Implementation, pages 47-58, 2005. Google Scholar
  16. Matthew Flatt, Robert Bruce Findler, and Matthias Felleisen. Scheme with classes, mixins, and traits. In Asian Symposium on Programming Languages and Systems, pages 270-289. Springer, 2006. Google Scholar
  17. Matthew Flatt, Robert Bruce Findler, Shriram Krishnamurthi, and Matthias Felleisen. Programming languages as operating systems (or revenge of the son of the Lisp machine). In International Conference on Functional Programming, pages 138-147, 1999. Google Scholar
  18. Matthew Flatt, Shriram Krishnamurthi, and Matthias Felleisen. Classes and mixins. In Principles of Programming Languages, pages 171-183, 1998. Google Scholar
  19. Matthew Flatt and PLT. Reference: Racket. Technical Report PLT-TR-2010-1, PLT Design Inc., 2010. URL: http://racket-lang.org/tr1/.
  20. Martin Fowler. Domain-specific Languages. Addison-Wesley, 2010. Google Scholar
  21. Paul Hudak. Domain specific languages. In Peter H. Salas, editor, Handbook of Programming Languages, volume 3, pages 39-60. MacMillan, Indianapolis, 1998. Google Scholar
  22. Andrew W. Keep and R. Kent Dybvig. A nanopass framework for commercial compiler development. In International Conference on Functional Programming, pages 343-350, 2013. Google Scholar
  23. Eugene E. Kohlbecker, Daniel P. Friedman, Matthias Felleisen, and Bruce F. Duba. Hygienic macro expansion. In Lisp and Functional Programming, pages 151-161, 1986. Google Scholar
  24. Eugene E. Kohlbecker and Mitchell Wand. Macros-by-example: Deriving syntactic transformations from their specifications. In Principles of Programming Languages, pages 77-84, 1987. Google Scholar
  25. Shriram Krishnamurthi. Linguistic Reuse. PhD thesis, Rice University, 2001. Google Scholar
  26. Shriram Krishnamurthi, Matthias Felleisen, and Bruce F. Duba. From macros to reusable generative programming. In International Symposium on Generative and Component-Based Software Engineering, pages 105-120, September 1999. Google Scholar
  27. Kats C.L. Lennart and Eelco Visser. The Spoofax language workbench. Rules for declarative specification of languages and IDEs. In Object-Oriented Programming Systems, Languages & Applications, pages 444-463, 2010. Google Scholar
  28. Guillaume Marceau, Kathi Fisler, and Shriram Krishnamurthi. Measuring the effectiveness of error messages designed for novice programmers. In Technical Symposium on Computer Science Education, pages 499-504, 2011. Google Scholar
  29. Jacob Matthews and Robert Bruce Findler. Operational semantics for multi-language programs. ACM Transactions on Programming Languages and Systems, 31(3):1-44, 2009. Google Scholar
  30. Jacob Matthews, Robert Bruce Findler, Matthew Flatt, and Matthias Felleisen. A visual environment for developing context-sensitive term rewriting systems. In Rewriting Techniques and Applications, pages 2-16, 2004. Google Scholar
  31. Bertrand Meyer. Applying design by contract. IEEE Computer, 25(10):40-51, October 1992. Google Scholar
  32. Mark Samuel Miller. Robust Composition: Towards a Unified Approach to Access Control and Concurrency Control. PhD thesis, Johns Hopkins University, Baltimore, Maryland, USA, May 2006. Google Scholar
  33. Scott Moore, Christos Dimoulas, Dan King, and Stephen Chong. Shill: A secure shell scripting language. In Operating Systems Design and Implementation, pages 183-199, 2014. Google Scholar
  34. Scott Owens, Matthew Flatt, Olin Shivers, and Benjamin Mcmullan. Lexer and parser generators in Scheme. In Scheme and Functional Programming, pages 41-52, 2004. Google Scholar
  35. Dipanwita Sarkar, Oscar Waddell, and R. Kent Dybvig. A nanopass framework for compiler education. J. Functional Programming, 15(5):653-667, 2005. Google Scholar
  36. T. Stephen Strickland, Christos Dimoulas, Asumu Takikawa, and Matthias Felleisen. Contracts for first-class classes. ACM Trans. Program. Lang. Syst., 35(3):11:1-11:58, 2013. Google Scholar
  37. T. Stephen Strickland and Matthias Felleisen. Contracts for first-class modules. In Dynamic Language Symposium, pages 27-38, 2009. Google Scholar
  38. T. Stephen Strickland, Sam Tobin-Hochstadt, Robert Bruce Findler, and Matthew Flatt. Chaperones and impersonators: Run-time support for reasonable interposition. In Object-Oriented Programming Systems, Languages & Applications, pages 943-962, 2012. Google Scholar
  39. Asumu Takikawa, Daniel Feltey, Sam Tobin-Hochstadt, Robert Bruce Findler, Matthew Flatt, and Matthias Felleisen. Towards practical gradual typing. In European Conference on Object-Oriented Programming, 2015. To appear. Google Scholar
  40. Asumu Takikawa, Stevie Strickland, Christos Dimoulas, Sam Tobin-Hochstadt, and Matthias Felleisen. Gradual typing for first-class classes. In Object-Oriented Programming Systems, Languages & Applications, pages 793-810, 2012. Google Scholar
  41. Sam Tobin-Hochstadt and Matthias Felleisen. The design and implementation of Typed Scheme. In Principles of Programming Languages, pages 395-406, 2008. Google Scholar
  42. Sam Tobin-Hochstadt, Vincent St-Amour, Ryan Culpepper, Matthew Flatt, and Matthias Felleisen. Languages as libraries. In Programming Language Design and Implementation, pages 132-141, 2011. Google Scholar
  43. Tobias Wrigstad, Patrick Eugster, John Field, Nate Nystrom, and Jan Vitek. Software hardening: A research agenda. In Script to Program Evolution, pages 58-70, 2009. Google Scholar
  44. Hongwei Xi and Frank Pfenning. Eliminating array bound checking through dependent types. In Programming Language Design and Implementation, pages 249-257, 1998. Google Scholar
Questions / Remarks / Feedback
X

Feedback for Dagstuhl Publishing


Thanks for your feedback!

Feedback submitted

Could not send message

Please try again later or send an E-mail