| |
| |
| |
Preliminaries | |
| |
| |
| |
Reasons for Studying Concepts of Programming Languages | |
| |
| |
| |
Programming Domains | |
| |
| |
| |
Language Evaluation Criteria | |
| |
| |
| |
Influences on Language Design | |
| |
| |
| |
Language Categories | |
| |
| |
| |
Language Design Trade-Offs | |
| |
| |
| |
Implementation Methods | |
| |
| |
| |
Programming Environments | |
| |
| |
Summary | |
| |
| |
Review Questions | |
| |
| |
Problem Set | |
| |
| |
| |
Evolution of the Major Programming Languages | |
| |
| |
| |
Zuse's Plankalk�l | |
| |
| |
| |
Pseudocodes | |
| |
| |
| |
The IBM 704 and Fortran | |
| |
| |
| |
Functional Programming: LISP | |
| |
| |
| |
The First Step Toward Sophistication: ALGOL 60 | |
| |
| |
| |
Computerizing Business Records: COBOL | |
| |
| |
| |
The Beginnings of Timesharing: BASIC | |
| |
| |
interview: Alan Cooper-User Design and Language Design | |
| |
| |
| |
Everything for Everybody: PL/I | |
| |
| |
| |
Two Early Dynamic Languages: APL and SNOBOL | |
| |
| |
| |
The Beginnings of Data Abstraction: SIMULA 67 | |
| |
| |
| |
Orthogonal Design: ALGOL 68 | |
| |
| |
| |
Some Early Descendants of the ALGOLs | |
| |
| |
| |
Programming Based on Logic: Prolog | |
| |
| |
| |
History's Largest Design Effort: Ada | |
| |
| |
| |
Object-Oriented Programming: Smalltalk | |
| |
| |
| |
Combining Imperative and Object-Oriented Features: C++ | |
| |
| |
| |
An Imperative-Based Object-Oriented Language: Java | |
| |
| |
| |
Scripting Languages | |
| |
| |
| |
The Flagship .NET Language: C# | |
| |
| |
| |
Markup/Programming Hybrid Languages | |
| |
| |
Summary | |
| |
| |
Bibliographic Notes | |
| |
| |
Review Questions | |
| |
| |
Problem Set | |
| |
| |
Programming Exercises | |
| |
| |
| |
Describing Syntax and Semantics | |
| |
| |
| |
Introduction | |
| |
| |
| |
The General Problem of Describing Syntax | |
| |
| |
| |
Formal Methods of Describing Syntax | |
| |
| |
| |
Attribute Grammars | |
| |
| |
History Note | |
| |
| |
| |
Describing the Meanings of Programs: Dynamic Semantics | |
| |
| |
History Note | |
| |
| |
Summary | |
| |
| |
Bibliographic Notes | |
| |
| |
Review Questions | |
| |
| |
Problem Set | |
| |
| |
| |
Lexical and Syntax Analysis | |
| |
| |
| |
Introduction | |
| |
| |
| |
Lexical Analysis | |
| |
| |
| |
The Parsing Problem | |
| |
| |
| |
Recursive-Descent Parsing | |
| |
| |
| |
Bottom-Up Parsing | |
| |
| |
Summary | |
| |
| |
Review Questions | |
| |
| |
Problem Set | |
| |
| |
Programming Exercises | |
| |
| |
| |
Names, Bindings, and Scopes | |
| |
| |
| |
Introduction | |
| |
| |
| |
Names | |
| |
| |
History Note | |
| |
| |
| |
Variables | |
| |
| |
| |
The Concept of Binding | |
| |
| |
| |
Scope | |
| |
| |
| |
Scope and Lifetime | |
| |
| |
| |
Referencing Environments | |
| |
| |
| |
Named Constants | |
| |
| |
Summary | |
| |
| |
Review Questions | |
| |
| |
Problem Set | |
| |
| |
Programming Exercises | |
| |
| |
| |
Data Types | |
| |
| |
| |
Introduction | |
| |
| |
| |
Primitive Data Types | |
| |
| |
| |
Character String Types | |
| |
| |
History Note | |
| |
| |
| |
User-Defined Ordinal Types | |
| |
| |
| |
Array Types | |
| |
| |
History Note | |
| |
| |
History Note | |
| |
| |
| |
Associative Arrays | |
| |
| |
interview: Roberto Ierusalimschy-Lua | |
| |
| |
| |
Record Types | |
| |
| |
| |
Tuple Types | |
| |
| |
| |
List Types | |
| |
| |
| |
Union Types | |
| |
| |
| |
Pointer and Reference Types | |
| |
| |
History Note | |
| |
| |
| |
Type Checking | |
| |
| |
| |
Strong Typing | |
| |
| |
| |
Type Equivalence | |
| |
| |
| |
Theory and Data Types | |
| |
| |
Summary | |
| |
| |
Bibliographic Notes | |
| |
| |
Review Questions | |
| |
| |
Problem Set | |
| |
| |
Programming Exercises | |
| |
| |
| |
Expressions and Assignment Statements | |
| |
| |
| |
Introduction | |
| |
| |
| |
Arithmetic Expressions | |
| |
| |
| |
Overloaded Operators | |
| |
| |
| |
Type Conversions | |
| |
| |
History Note | |
| |
| |
| |
Relational and Boolean Expressions | |
| |
| |
History Note | |
| |
| |
| |
Short-Circuit Evaluation | |
| |
| |
| |
Assignment Statements | |
| |
| |
History Note | |
| |
| |
| |
Mixed-Mode Assignment | |
| |
| |
Summary | |
| |
| |
Review Questions | |
| |
| |
Problem Set | |
| |
| |
Programming Exercises | |
| |
| |
| |
Statement-Level Control Structures | |
| |
| |
| |
Introduction | |
| |
| |
| |
Selection Statements | |
| |
| |
| |
Iterative Statements | |
| |
| |
| |
Unconditional Branching | |
| |
| |
History Note | |
| |
| |
| |
Guarded Commands | |
| |
| |
| |
Conclusions | |
| |
| |
Summary | |
| |
| |
Review Questions | |
| |
| |
Problem Set | |
| |
| |
Programming Exercises | |
| |
| |
| |
Subprograms | |
| |
| |
| |
Introduction | |
| |
| |
| |
Fundamentals of Subprograms | |
| |
| |
| |
Design Issues for Subprograms | |
| |
| |
| |
Local Referencing Environments | |
| |
| |
| |
Parameter-Passing Methods | |
| |
| |
History Note | |
| |
| |
History Note | |
| |
| |
| |
Parameters That Are Subprograms | |
| |
| |
| |
Calling Subprograms Indirectly | |
| |
| |
History Note | |
| |
| |
| |
Overloaded Subprograms | |
| |
| |
| |
Generic Subprograms | |
| |
| |
| |
Design Issues for Functions | |
| |
| |
| |
User-Defined Overloaded Operators | |
| |
| |
| |
Closures | |
| |
| |
| |
Coroutines | |
| |
| |
Summary | |
| |
| |
Review Questions | |
| |
| |
Problem Set | |
| |
| |
Programming Exercises | |
| |
| |
| |
Implementing Subprograms | |
| |
| |
| |
The General Semantics of Calls and Returns | |
| |
| |
| |
Implementing "Simple" Subprograms | |
| |
| |
| |
Implementing Subprograms with Stack-Dynamic Local Variables | |
| |
| |
| |
Nested Subprograms | |
| |
| |
| |
Blocks | |
| |
| |
| |
Implementing Dynamic Scoping | |
| |
| |
Summary | |
| |
| |
Review Questions | |
| |
| |
Problem Set | |
| |
| |
Programming Exercises | |
| |
| |
| |
Abstract Data Types and Encapsulation Constructs | |
| |
| |
| |
The Concept of Abstraction | |
| |
| |
| |
Introduction to Data Abstraction | |
| |
| |
| |
Design Issues for Abstract Data Types | |
| |
| |
| |
Language Examples | |
| |
| |
interview: Bjarne Stroustrup-C++: Its Birth, Its Ubiquitousness, and Common Criticisms | |
| |
| |
| |
Parameterized Abstract Data Types | |
| |
| |
| |
Encapsulation Constructs | |
| |
| |
| |
Naming Encapsulations | |
| |
| |
Summary | |
| |
| |
Review Questions | |
| |
| |
Problem Set | |
| |
| |
Programming Exercises | |
| |
| |
| |
Support for Object-Oriented Programming | |
| |
| |
| |
Introduction | |
| |
| |
| |
Object-Oriented Programming | |
| |
| |
| |
Design Issues for Object-Oriented Languages | |
| |
| |
| |
Support for Object-Oriented Programming in Smalltalk | |
| |
| |
interview: Bjarne Stroustrup-On Paradigms and Better Programming | |
| |
| |
| |
Support for Object-Oriented Programming in C++ | |
| |
| |
| |
Support for Object-Oriented Programming in Objective-C | |
| |
| |
| |
Support for Object-Oriented Programming in Java | |
| |
| |
| |
Support for Object-Oriented Programming in C# | |
| |
| |
| |
Support for Object-Oriented Programming in Ada 95 | |
| |
| |
| |
Support for Object-Oriented Programming in Ruby | |
| |
| |
| |
Implementation of Object-Oriented Constructs | |
| |
| |
Summary | |
| |
| |
Review Questions | |
| |
| |
Problem Set | |
| |
| |
Programming Exercises | |
| |
| |
| |
Concurrency | |
| |
| |
| |
Introduction | |
| |
| |
| |
Introduction to Subprogram-Level Concurrency | |
| |
| |
| |
Semaphores | |
| |
| |
| |
Monitors | |
| |
| |
| |
Message Passing | |
| |
| |
| |
Ada Support for Concurrency | |
| |
| |
| |
Java Threads | |
| |
| |
| |
C# Threads | |
| |
| |
| |
Concurrency in Functional Languages | |
| |
| |
| |
Statement-Level Concurrency | |
| |
| |
Summary | |
| |
| |
Bibliographic Notes | |
| |
| |
Review Questions | |
| |
| |
Problem Set | |
| |
| |
Programming Exercises | |
| |
| |
| |
Exception Handling and Event Handling | |
| |
| |
| |
Introduction to Exception Handling | |
| |
| |
History Note | |
| |
| |
| |
Exception Handling in Ada | |
| |
| |
| |
Exception Handling in C++ | |
| |
| |
| |
Exception Handling in Java | |
| |
| |
| |
Introduction to Event Handling | |
| |
| |
| |
Event Handling with Java | |
| |
| |
| |
Event Handling in C# | |
| |
| |
Summary | |
| |
| |
Bibliographic Notes | |
| |
| |
Review Questions | |
| |
| |
Problem Set | |
| |
| |
Programming Exercises | |
| |
| |
| |
Functional Programming Languages | |
| |
| |
| |
Introduction | |
| |
| |
| |
Mathematical Functions | |
| |
| |
| |
Fundamentals of Functional Programming Languages | |
| |
| |
| |
The First Functional Programming Language: LISP | |
| |
| |
| |
An Introduction to Scheme | |
| |
| |
| |
Common LISP | |
| |
| |
| |
ML | |
| |
| |
| |
Haskell | |
| |
| |
| |
F# | |
| |
| |
| |
Support for Functional Programming in Primarily Imperative Languages | |
| |
| |
| |
A Comparison of Functional and Imperative Languages | |
| |
| |
Summary | |
| |
| |
Bibliographic Notes | |
| |
| |
Review Questions | |
| |
| |
Problem Set | |
| |
| |
Programming Exercises | |
| |
| |
| |
Logic Programming Languages | |
| |
| |
| |
Introduction | |
| |
| |
| |
A Brief Introduction to Predicate Calculus | |
| |
| |
| |
Predicate Calculus and Proving Theorems | |
| |
| |
| |
An Overview of Logic Programming | |
| |
| |
| |
The Origins of Prolog | |
| |
| |
| |
The Basic Elements of Prolog | |
| |
| |
| |
Deficiencies of Prolog | |
| |
| |
| |
Applications of Logic Programming | |
| |
| |
Summary | |
| |
| |
Bibliographic Notes | |
| |
| |
Review Questions | |
| |
| |
Problem Set | |
| |
| |
Programming Exercises | |