Languages as libraries
Authors:
Open Access
- 4 June 2011
- conference paper
- Published by Association for Computing Machinery (ACM)
- p. 132-141
Abstract
Programming language design benefits from constructs for extending the syntax and semantics of a host language. While C's string-based macros empower programmers to introduce notational shorthands, the parser-level macros of Lisp encourage experimentation with domain-specific languages. The Scheme programming language improves on Lisp with macros that respect lexical scope. The design of Racket---a descendant of Scheme---goes even further with the introduction of a full-fledged interface to the static semantics of the language. A Racket extension programmer can thus add constructs that are indistinguishable from "native" notation, large and complex embedded domain-specific languages, and even optimizing transformations for the compiler backend. This power to experiment with language design has been used to create a series of sub-languages for programming with first-class classes and modules, numerous languages for implementing the Racket system, and the creation of a complete and fully integrated typed sister language to Racket's untyped base language. This paper explains Racket's language extension API via an implementation of a small typed sister language. The new language provides a rich type system that accommodates the idioms of untyped Racket. Furthermore, modules in this typed language can safely exchange values with untyped modules. Last but not least, the implementation includes a type-based optimizer that achieves promising speedups. Although these extensions are complex, their Racket implementation is just a library, like any other library, requiring no changes to the Racket implementation.Keywords
This publication has 26 references indexed in Scilit:
- Debugging hygienic macrosScience of Computer Programming, 2010
- Revised 6 Report on the Algorithmic Language SchemeJournal of Functional Programming, 2009
- Practical Variable-Arity Polymorphism2009
- Building language towers with ZigguratJournal of Functional Programming, 2008
- An Overview of the Ciao Multiparadigm Language and Program Development Environment and Its Design PhilosophyLecture Notes in Computer Science, 2008
- Implementation and use of the PLT scheme Web serverHigher-Order and Symbolic Computation, 2007
- Scheme with Classes, Mixins, and Traits2006
- Syntactic Abstraction in Component InterfacesLecture Notes in Computer Science, 2005
- Syntactic abstraction in schemeHigher-Order and Symbolic Computation, 1993
- The evolution of Lisp1993