Types and Programming LanguagesMIT Press, 4. 1. 2002 - Počet stran: 648 A comprehensive introduction to type systems and programming languages. A type system is a syntactic method for automatically checking the absence of certain erroneous behaviors by classifying program phrases according to the kinds of values they compute. The study of type systems—and of programming languages from a type-theoretic perspective—has important applications in software engineering, language design, high-performance compilers, and security. This text provides a comprehensive introduction both to type systems in computer science and to the basic theory of programming languages. The approach is pragmatic and operational; each new concept is motivated by programming examples and the more theoretical sections are driven by the needs of implementations. Each chapter is accompanied by numerous exercises and solutions, as well as a running implementation, available via the Web. Dependencies between chapters are explicitly identified, allowing readers to choose a variety of paths through the material. The core topics include the untyped lambda-calculus, simple type systems, type reconstruction, universal and existential polymorphism, subtyping, bounded quantification, recursive types, kinds, and type operators. Extended case studies develop a variety of approaches to modeling the features of object-oriented languages. |
Obsah
Introduction | 1 |
Simple Extensions | 11 |
Mathematical Preliminaries | 15 |
Untyped Arithmetic Expressions | 23 |
An ML Implementation of Arithmetic Expressions | 45 |
The Untyped LambdaCalculus | 51 |
Nameless Representation of Terms | 75 |
An ML Implementation of the LambdaCalculus | 83 |
Recursive Types | 267 |
Metatheory of Recursive Types | 281 |
Type Reconstruction | 317 |
Universal Types | 339 |
Existential Types | 363 |
An ML Implementation of System F | 381 |
Bounded Quantification | 389 |
Imperative Objects Redux | 411 |
Typed Arithmetic Expressions | 91 |
Simply Typed LambdaCalculus | 99 |
An ML Implementation of Simple Types | 113 |
8 | 129 |
Normalization | 149 |
Exceptions | 171 |
Subtyping | 181 |
Metatheory of Subtyping | 209 |
1 | 221 |
Featherweight Java | 247 |
Metatheory of Bounded Quantification | 417 |
Type Operators and Kinding | 439 |
HigherOrder Polymorphism | 449 |
HigherOrder Subtyping | 467 |
Purely Functional Objects | 475 |
A Solutions to Selected Exercises | 493 |
B Notational Conventions | 565 |
605 | |