Programming Language Pragmatics
- 4th Edition - November 30, 2015
- Author: Michael Scott
- Language: English
- Paperback ISBN:9 7 8 - 0 - 1 2 - 4 1 0 4 0 9 - 9
- eBook ISBN:9 7 8 - 0 - 1 2 - 4 1 0 4 7 7 - 8
Programming Language Pragmatics, Fourth Edition, is the most comprehensive programming language textbook available today. It is distinguished and acclaimed for its integr… Read more
Purchase options
Institutional subscription on ScienceDirect
Request a sales quoteThe 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.
- 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
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
- No. of pages: 992
- Language: English
- Edition: 4
- Published: November 30, 2015
- Imprint: Morgan Kaufmann
- Paperback ISBN: 9780124104099
- eBook ISBN: 9780124104778
MS
Michael Scott
Michael L. Scott is a professor and past Chair of the Computer Science Department at the University of Rochester. He is best known for work on synchronization and concurrent data structures: algorithms from his group appear in a wide variety of commercial and open-source systems. A Fellow of the ACM and the IEEE, he shared the 2006 Dijkstra Prize in Distributed Computing. In 2001 he received the University's Robert and Pamela Goergen Award for Distinguished Achievement and Artistry in Undergraduate Teaching.