Programming Language Pragmatics,
Edition 4
By Michael Scott

Publication Date: 11 Dec 2015
Description
Programming Language Pragmatics, Fourth Edition, is the most comprehensive programming language textbook available today. It is distinguished and acclaimed for its integrated treatment of language design and implementation, with an emphasis on the fundamental tradeoffs that continue to drive software development.

The book provides readers with a solid foundation in the syntax, semantics, and pragmatics of the full range of programming languages, from traditional languages like C to the latest in functional, scripting, and object-oriented programming.  This fourth edition has been heavily revised throughout, with expanded coverage of type systems and functional programming, a unified treatment of polymorphism, highlights of the newest language standards, and examples featuring the ARM and x86 64-bit architectures.

Key Features

  • Updated coverage of the latest developments in programming language design, including C & C++11, Java 8, C# 5, Scala, Go, Swift, Python 3, and HTML 5
  • Updated treatment of functional programming, with extensive coverage of OCaml
  • New chapters devoted to type systems and composite types
  • Unified and updated treatment of polymorphism in all its forms
  • New examples featuring the ARM and x86 64-bit architectures
About the author
By Michael Scott, Professor and past Chair of the Computer Science Department at the University of Rochester
Table of Contents

Preface

  • Changes in the Fourth Edition
  • The Companion Site
  • Design & Implementation Sidebars
  • Numbered and Titled Examples
  • Exercise Plan
  • How to Use the Book
  • Supplemental Materials
  • Acknowledgments for the Fourth Edition

I: Foundations

1: Introduction

  • 1.1 The Art of Language Design
  • 1.2 The Programming Language Spectrum
  • 1.3 Why Study Programming Languages?
  • 1.4 Compilation and Interpretation
  • 1.5 Programming Environments
  • 1.6 An Overview of Compilation
  • 1.7 Summary and Concluding Remarks
  • 1.8 Exercises
  • 1.9 Explorations
  • 1.10 Bibliographic Notes

2: Programming Language Syntax

  • 2.1 Specifying Syntax: Regular Expressions and Context-Free Grammars
  • 2.2 Scanning
  • 2.3 Parsing
  • 2.4 Theoretical Foundations
  • 2.5 Summary and Concluding Remarks
  • 2.6 Exercises
  • 2.7 Explorations
  • 2.8 Bibliographic Notes

3: Names, Scopes, and Bindings

  • 3.1 The Notion of Binding Time
  • 3.2 Object Lifetime and Storage Management
  • 3.3 Scope Rules
  • 3.4 Implementing Scope
  • 3.5 The Meaning of Names within a Scope
  • 3.6 The Binding of Referencing Environments
  • 3.7 Macro Expansion
  • 3.8 Separate Compilation
  • 3.9 Summary and Concluding Remarks
  • 3.10 Exercises
  • 3.11 Explorations
  • 3.12 Bibliographic Notes

4: Semantic Analysis

  • 4.1 The Role of the Semantic Analyzer
  • 4.2 Attribute Grammars
  • 4.3 Evaluating Attributes
  • 4.4 Action Routines
  • 4.5 Space Management for Attributes
  • 4.6 Tree Grammars and Syntax Tree Decoration
  • 4.7 Summary and Concluding Remarks
  • 4.8 Exercises
  • 4.9 Explorations
  • 4.10 Bibliographic Notes

5: Target Machine Architecture

II: Core Issues in Language Design

6: Control Flow

  • 6.1 Expression Evaluation
  • 6.2 Structured and Unstructured Flow
  • 6.3 Sequencing
  • 6.4 Selection
  • 6.5 Iteration
  • 6.6 Recursion
  • 6.7 Nondeterminacy
  • 6.8 Summary and Concluding Remarks
  • 6.9 Exercises
  • 6.10 Explorations
  • 6.11 Bibliographic Notes

7: Type Systems

  • 7.1 Overview
  • 7.2 Type Checking
  • 7.3 Parametric Polymorphism
  • 7.4 Equality Testing and Assignment
  • 7.5 Summary and Concluding Remarks
  • 7.6 Exercises
  • 7.7 Explorations
  • 7.8 Bibliographic Notes

8: Composite Types

  • 8.1 Records (Structures)
  • 8.2 Arrays
  • 8.3 Strings
  • 8.4 Sets
  • 8.5 Pointers and Recursive Types
  • 8.6 Lists
  • 8.7 Files and Input/Output
  • 8.8 Summary and Concluding Remarks
  • 8.9 Exercises
  • 8.10 Explorations
  • 8.11 Bibliographic Notes

9: Subroutines and Control Abstraction

  • 9.1 Review of Stack Layout
  • 9.2 Calling Sequences
  • 9.3 Parameter Passing
  • 9.4 Exception Handling
  • 9.5 Coroutines
  • 9.6 Events
  • 9.7 Summary and Concluding Remarks
  • 9.8 Exercises
  • 9.9 Explorations
  • 9.10 Bibliographic Notes

10: Data Abstraction and Object Orientation

  • 10.1 Object-Oriented Programming
  • 10.2 Encapsulation and Inheritance
  • 10.3 Initialization and Finalization
  • 10.4 Dynamic Method Binding
  • 10.5 Mix-In Inheritance
  • 10.6 True Multiple Inheritance
  • 10.7 Object-Oriented Programming Revisited
  • 10.8 Summary and Concluding Remarks
  • 10.9 Exercises
  • 10.10 Explorations
  • 10.11 Bibliographic Notes

III: Alternative Programming Models

11: Functional Languages

  • 11.1 Historical Origins
  • 11.2 Functional Programming Concepts
  • 11.3 A Bit of Scheme
  • 11.4 A Bit of OCaml
  • 11.5 Evaluation Order Revisited
  • 11.6 Higher-Order Functions
  • 11.7 Theoretical Foundations
  • 11.8 Functional Programming in Perspective
  • 11.9 Summary and Concluding Remarks
  • 11.10 Exercises
  • 11.11 Explorations
  • 11.12 Bibliographic Notes

12: Logic Languages

  • 12.1 Logic Programming Concepts
  • 12.2 Prolog
  • 12.3 Theoretical Foundations
  • 12.4 Logic Programming in Perspective
  • 12.5 Summary and Concluding Remarks
  • 12.6 Exercises
  • 12.7 Explorations
  • 12.8 Bibliographic Notes

13: Concurrency

  • 13.1 Background and Motivation
  • 13.2 Concurrent Programming Fundamentals
  • 13.3 Implementing Synchronization
  • 13.4 Language-Level Constructs
  • 13.5 Message Passing
  • 13.6 Summary and Concluding Remarks
  • 13.7 Exercises
  • 13.8 Explorations
  • 13.9 Bibliographic Notes

14: Scripting Languages

  • 14.1 What Is a Scripting Language?
  • 14.2 Problem Domains
  • 14.3 Scripting the World Wide Web
  • 14.4 Innovative Features
  • 14.5 Summary and Concluding Remarks
  • 14.6 Exercises
  • 14.7 Explorations
  • 14.8 Bibliographic Notes

IV: A Closer Look at Implementation

15: Building a Runnable Program

  • 15.1 Back-End Compiler Structure
  • 15.2 Intermediate Forms
  • 15.3 Code Generation
  • 15.4 Address Space Organization
  • 15.5 Assembly
  • 15.6 Linking
  • 15.7 Dynamic Linking
  • 15.8 Summary and Concluding Remarks
  • 15.9 Exercises
  • 15.10 Explorations
  • 15.11 Bibliographic Notes

16: Run-Time Program Management

  • 16.1 Virtual Machines
  • 16.2 Late Binding of Machine Code
  • 16.3 Inspection/Introspection
  • 16.4 Summary and Concluding Remarks
  • 16.5 Exercises
  • 16.6 Explorations
  • 16.7 Bibliographic Notes

17: Code Improvement

A: Programming Languages Mentioned

B: Language Design and Language Implementation

C: Numbered Examples

Book details
ISBN: 9780124104099
Page Count: 992
Retail Price : £70.99
9780120884780; 9780124045781; 9781558602861; 9781558608719
Audience
Upper-level undergraduate and graduate-level computer science students, programmers, systems and software engineers