Programming Languages: Application and Interpretation
📜 Abstract
No abstract is included in the paper. The document is a book-length instructional text rather than a conventional research paper.
✨ Summary
Overview
Programming Languages: Application and Interpretation is a practical and conceptual introduction to programming-language implementation. It develops a language incrementally, using Racket and Typed PLAI to demonstrate how syntax, semantics, interpreters, desugaring, runtime representations, and static and dynamic program analyses relate to one another.
The book begins with parsing and abstract syntax trees, then constructs interpreters for arithmetic and function languages. It explains substitution, environments, lexical scope, closures, eager and lazy application, and the distinction between implementation strategy and language semantics. Mutation is introduced through boxes and variables, motivating the separation between environments, which preserve lexical bindings, and stores, which model mutable locations and persistent state.
Subsequent material develops recursion and cyclic data, object systems, inheritance, prototypes, multiple inheritance, mixins, traits, and dynamic dispatch. The treatment of memory management compares manual reclamation, reference counting, conservative garbage collection, and precise garbage collection, emphasizing soundness, completeness, reachability, and representation constraints.
The book also examines desugaring and macros as syntax-to-syntax transformations, including hygienic macro expansion, identifier capture, continuation-passing style, generators, threads, and first-class continuations. Its chapters on types cover type soundness, progress and preservation, parametric polymorphism, type inference through constraint generation and unification, union and intersection types, recursive types, subtyping, and object types. Contracts provide the corresponding dynamic perspective, including higher-order contracts, deferred checking, mutation, contract composition, and blame assignment.
The final discussion compares eager, lazy, call-by-name, call-by-need, and reactive application semantics. It explains how laziness requires suspended computations and strictness points, while reactive programming constructs dataflow graphs and must address evaluation order and glitches.
Main contributions and takeaways
- Interpreters provide an executable account of language semantics and expose design choices that are often hidden by host-language implementations.
- Environments and stores separate lexical scope from mutable state, providing a useful implementation model for closures and mutation.
- Desugaring can reduce a language core, add expressive surface constructs, and serve as a general program-transformation mechanism.
- Continuations expose the relationship between control flow, stacks, generators, coroutines, threads, and web-program structure.
- Static types and dynamic contracts enforce different classes of invariants, with distinct trade-offs in precision, timing, expressiveness, and error reporting.
- Application semantics—including eager, lazy, and reactive evaluation—substantially affect observable behavior, resource use, mutation, and program structure.
Documented influence
The author’s official PLAI site reports that the text has been used by more than fifty academic institutions and describes Programming and Programming Languages as a later pedagogical branch whose second half revises material from PLAI’s second edition. (plai.org) A later programming-languages education text, Centering Humans in the Programming Languages, explicitly identifies PLAI as an influence on its emphasis on implementation-based coursework and frequent understanding checks. (users.wpi.edu) The book is also cited as a teaching resource in subsequent programming-languages and computing-education materials. (doi.org)
The available evidence supports a documented influence primarily on programming-language education and the design of subsequent instructional texts. I did not find reliable evidence in the searched sources establishing a specific industrial system whose implementation directly derives from this edition.