Part 1 Functions and Foundations
1 Introduction
1.1 Programming Languages
1.2 Goals
1.3 Programming Language History
1.4 Organization: Concepts and Languages
2 Computability
2.1 Partial Functions and Computability
2.2 Chapter Summary
Exercises
3 Lisp: Functions, Recursion, and Lists
3.1 Lisp History
3.2 Good Language Design
3.3 Brief Language Overview
3.4 Innovations in the Design of Lisp
3.5 Chapter Summary: Contributions of Lisp
Exercises
4 Fundamentals
4.1 Compilers and Syntax
4.2 Lambda Calculus
4.3 Denotational Semantics
4.4 Functional and Imperative Languages
4.5 Chapter Summary
Exercises
Part 2 Procedures, Types, Memory Management, and Control
5 The Algol Family and ML
5.1 The Algol Family of Programming Languages
5.2 The Development of C
5.3 The LCF System and ML
5.4 The ML Programming Language
5.5 Chapter Summary
Exercises
6 Type Systems and Type Inference
6.1 Types in Programming
6.2 Type Safety and Type Checking
6.3 Type Inference
6.4 Polymorphism and Overloading
6.5 Type Declarations and Type Equality
6.6 Chapter Summary
Exercises
7 Scope, Functions, and Storage Management
7.1 Block-Structured Languages
7.2 In-Line Blocks
7.3 Functions and Procedures
7.4 Higher-Order Functions
7.5 Chapter Summary
Exercises
8 Control in Sequential Languages
8.1 Structured Control
8.2 Exceptions
8.3 Continuations
8.4 Functions and Evaluation Order
8.5 Chapter Summary
Exercises
Part 3 Modularity, Abstraction, and Object-Oriented Programming
9 Data Abstraction and Modularity
9.1 Structured Programming
9.2 Language Support for Abstraction
9.3 Modules
9.4 Generic Abstractions
9.5 Chapter Summary
Exercises
10 Concepts in Object-Oriented Languages
10.1 Object-Oriented Design
10.2 Four Basic Concepts in Object-Oriented Languages
10.3 Program Structure
10.4 Design Patterns
10.5 Chapter Summary
10.6 Looking Forward: Simula, Smalltalk, C++, Java
Exercises
11 History of Objects: Simula and Smalltalk
11.1 Origin of Objects in Simula
11.2 Objects in Simula
11.3 Subclasses and Subtypes in Simula
11.4 Development of Smalltalk
11.5 Smalltalk Language Features
11.6 Smalltalk Flexibility
11.7 Relationship between Subtyping and Inheritance
11.8 Chapter Summary
Exercises
12 Objects and Run-Time Efficiency: C++
12.1 Design Goals and Constraints
12.2 Overview of C++
12.3 Classes, Inheritance, and Virtual Functions
12.4 Subtyping
12.5 Multiple Inheritance
12.6 Chapter Summary
Exercises
13 Portability and Safety: Java
13.1 Java Language Overview
13.2 Java Classes and Inheritance
13.3 Java Types and Subtyping
13.4 Java System Architecture
13.5 Security Features
13.6 Java Summary
Exercises
Part 4 Concurrency and Logic Programming
14 Concurrent and Distributed Programming
14.1 Basic Concepts in Concurrency
14.2 The Actor Model
14.3 Concurrent ML
14.4 Java Concurrency
14.5 Chapter Summary
Exercises
15 The Logic Programming Paradigm and Prolog
15.1 History of Logic Programming
15.2 Brief Overview of the Logic Programming Paradigm
15.3 Equations Solved by Unification as Atomic Actions
15.4 Clauses as Parts of Procedure Declarations
15.5 Prolog's Approach to Programming
15.6 Arithmetic in Prolog
15.7 Control, Ambivalent Syntax, and Meta-Variables
15.8 Assessment of Prolog
15 9 Bibliographic Remarks
15.10 Chapter Summary
Appendix A Additional Program Examples
A.1 Procedural and Object-Oriented Organization
Glossary
Index