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. It encompasses imperative and functional programming, as well as the ways of integrating these aspects into more general languages. 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, this text is perfect for advanced undergraduate and beginning graduate courses in programming language theory, and will also appeal to researchers and professionals in designing or implementing computer languages.

### Contents

Preface; 1. Predicate Logic; 2. The Simple Imperative Language; 3. Programme Specifications and their Proofs; 4. Arrays; 5. Failure, Input-Output and Continuations; 6. Transition Semantics; 7. Nondeterminism and Guarded Commands; 8. Shared-variable Concurrency; 9. Communicating Sequential Processes; 10. The Lambda Calculus; 11. An Eager Functional Language; 12. Continuations in a Functional Language; 13. Iswim-like Languages; 14. A Normal-order Language; 15. The Simple Type System; 16. Subtypes and Intersection Types; 17. Polymorphism; 18. Module Specification; 19. Algol-like Languages; Appendices; Bibliography; Index.

### Reviews

"I found the whole book a distinct pleasure to read and certainly recommend this text for consideration by instructors." Mathematical Reviews

"clearly structured...the presentation is clear, and the typesetting often helps the reader to understand the structure of the formulas. Each chapter contains valuable exercises and profound bibliographic notes that can serve as a starting point for further reading. I shall use this excellent textbook in my lectures." Computing Reviews

"...an important book...It is thorough and well organized, and the explanations are very clear. I found the technical content to be in almost every respect flawless. Although written to be a student text, I believe that most researchers (and many practitioners) in programming lanauges (and related fields) would find it worth reading." Journal of Functional Programming