# Theories of Programming Languages

**A book by John C. Reynolds, published by Cambridge University Press**
(U.S.,
Britain).

** hardback, Fall 1998** 500+xii pages
ISBN: 9780521594141 (old ISBN: 0-521-59414-6)
(U.S.,
Britain).

** paperback, Spring 2009** 500+xii pages
ISBN: 9780521106979
(U.S.,
Britain).
(There is only one edition of the book; the hardback and paperback versions
are textually identical.)

This textbook is a broad but rigorous survey of the theoretical
basis for the design, definition, and implementation of programming
languages, and of systems for specifying and proving program
behavior. Both imperative and functional programming are covered,
as well as the ways of integrating these aspects into more general
anguages. Recognizing a unity of technique beneath the diversity
of research in programming languages, the author presents an
integrated treatment of the basic principles of the subject.
He identifies the relatively small number of concepts, such as
compositional semantics, binding structure, domains, transition
systems, and inference rules, that serve as the foundation of
the field.

The basic concepts and their properties are described with
mathematical rigor, but the mathematical development is balanced
by numerous examples of applications, particularly of program
specification and proof, concurrent programming, functional
programming (including the use of continuations and lazy
evaluation), and type systems (including subtyping, polymorphism,
and modularization).

Assuming only knowledge of elementary programming and mathematics,
this text is perfect for advanced undergraduate and beginning
graduate courses in programming language theory, and also will
appeal to researchers and professionals in desinging or implementing
computer languages.

## Contents

- Predicate Logic
- The Simple Imperative Language
- Program Specifications and Their Proofs
- Arrays
- Failure, Input-Output, and Continuations
- Transition Semantics
- Nondeterminism and Guarded Commands
- Shared-Variable Concurrency
- Communicating Sequential Processes
- The Lambda Calculus
- An Eager Functional Language
- Continuations in a Functional Language
- Iswim-like Languages
- A Normal-Order Language
- The Simple Type System
- Subtypes and Intersection Types
- Polymorphism
- Module Specification
- Algol-like Languages
- Appendix: Mathematical Background

## Additional Information

*John.Reynolds@cs.cmu.edu*
(home page)

last updated October 6, 2009