You are previewing Concepts in Programming Languages.
O'Reilly logo
Concepts in Programming Languages

Book Description

For undergraduate and beginning graduate students, this textbook explains and examines the central concepts used in modern programming languages, such as functions, types, memory management, and control. The book is unique in its comprehensive presentation and comparison of major object-oriented programming languages. Separate chapters examine the history of objects, Simula and Smalltalk, and the prominent languages C++ and Java. The author presents foundational topics, such as lambda calculus and denotational semantics, in an easy-to-read, informal style, focusing on the main insights provided by these theories. Advanced topics include concurrency, concurrent object-oriented programming, program components, and inter-language interoperability. A chapter on logic programming illustrates the importance of specialized programming methods for certain kinds of problems. This book will give the reader a better understanding of the issues and tradeoffs that arise in programming language design, and a better appreciation of the advantages and pitfalls of the programming languages they use.

Table of Contents

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