Languages as libraries

Sam Tobin-Hochstadt*, Vincent St-Amour, Ryan Culpepper, Matthew Flatt, Matthias Felleisen

*Corresponding author for this work

Research output: Chapter in Book/Report/Conference proceedingConference contribution

99 Scopus citations

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.

Original languageEnglish (US)
Title of host publicationPLDI'11 - Proceedings of the 2011 ACM Conference on Programming Language Design and Implementation
Pages132-141
Number of pages10
DOIs
StatePublished - Jul 7 2011
Event32nd ACM SIGPLAN Conference on Programming Language Design and Implementation, PLDI'11 - San Jose, CA, United States
Duration: Jun 4 2011Jun 8 2011

Publication series

NameProceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI)

Other

Other32nd ACM SIGPLAN Conference on Programming Language Design and Implementation, PLDI'11
CountryUnited States
CitySan Jose, CA
Period6/4/116/8/11

Keywords

  • extensible languages
  • macros
  • modules
  • typed racket

ASJC Scopus subject areas

  • Software

Fingerprint Dive into the research topics of 'Languages as libraries'. Together they form a unique fingerprint.

  • Cite this

    Tobin-Hochstadt, S., St-Amour, V., Culpepper, R., Flatt, M., & Felleisen, M. (2011). Languages as libraries. In PLDI'11 - Proceedings of the 2011 ACM Conference on Programming Language Design and Implementation (pp. 132-141). (Proceedings of the ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI)). https://doi.org/10.1145/1993498.1993514