Skip to main content

Programming Language Pragmatics

The innovative approach of the first edition of Programming Language Pragmatics provided students with an integrated view of programming language design and implement… Read more

World Book Day celebration

Where learning shapes lives

Up to 25% off trusted resources that support research, study, and discovery.

Description

The innovative approach of the first edition of Programming Language Pragmatics provided students with an integrated view of programming language design and implementation, while offering a solid teaching text on timely language topics in a rigorous yet accessible style.

The new edition carries on these distinctive features as well as the signature tradition of illustrating the most recent developments in programming language design with a variety of modern programming languages.

Key features

  • Addresses the most recent developments in programming language design, including C99, C#, and Java 5
  • Introduces and discusses scripting languages throughout the book as well as in an entire new chapter
  • Includes a comprehensive chapter on concurrency, with coverage of the new Java concurrency package (JSR 166) and the comparable mechanisms in C#
  • Updates many sections and topics, including iterators, exceptions, polymorphism, templates/generics, scope rules and declaration ordering, separate compilation, garbage collection, and threads and synchronization
  • Highlights the interaction and tradeoffs inherent in language design and language implementation decisions with over 100 "Design and Implementation" call-out boxes
  • Adds end-of-chapter "Exploration" exercises—open-ended, research-type activities
  • Provides review questions after sections for quick self-assessment
  • Includes over 800 numbered examples to help the reader quickly cross-reference and access content

Readership

undergraduate computer science students; computing professionals

Table of contents

Part I Foundations1. 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 2. Programming Language Syntax2.1 Specifying Syntax2.2 Scanning2.3 Parsing 2.4 Theoretical Foundations3. Names, Scopes, and Bindings3.1 The Notion of Binding Time 3.2 Object Lifetime and Storage Management 3.3 Scope Rules 3.4 Implementing Scope 3.5 The Binding of Referencing Environments 3.6 Binding Within a Scope3.7 Separate Compilation 4. Semantic Analysis4.1 The Role of the Semantic Analyzer 4.2 Attribute Grammars4.3 Evaluating Attributes4.4 Action Routines 4.5 Space Management for Attributes 4.6 Decorating a Syntax Tree5. Target Machine Architecture5.1 The Memory Hierarchy 5.2 Data Representation5.3 Instruction Set Architecture 5.4 Architecture and Implementation 5.5 Compiling for Modern ProcessorsPart II Core Issues in Language Design6. Control Flow 6.1 Expression Evaluation6.2 Structured and Unstructured Flow6.3 Sequencing6.4 Selection6.5 Iteration6.6 Recursion6.7 Nondeterminacy7. Data Types 7.1 Type Systems7.2 Type Checking7.3 Records (Structures) and Variants (Unions)7.4 Arrays7.5 Strings7.6 Sets7.7 Pointers and Recursive Types7.8 Lists7.9 Files and Input/Output7.10 Equality Testing and Assignment8. Subroutines and Control Abstraction 8.1 Review of Stack Layout 8.2 Calling Sequences8.3 Parameter Passing 8.4 Generic Subroutines and Modules8.5 Exception Handling8.6 Coroutines 9. Data Abstraction and Object Orientation 9.1 Object-Oriented Programming 9.2 Encapsulation and Inheritance 9.3 Initialization and Finalization 9.4 Dynamic Method Binding 9.5 Multiple Inheritance9.6 Object-Oriented Programming RevisitedPart III Alternative Programming Models 10. Functional Languages 10.1 Historical Origins10.2 Functional Programming Concepts10.3 A Review/Overview of Scheme10.4 Evaluation Order Revisited10.5 Higher-Order Functions10.6 Theoretical Foundations10.7 Functional Programming in Perspective11. Logic Languages 11.1 Logic Programming Concepts11.2 Prolog11.3 Theoretical Foundations 11.4 Logic Programming in Perspective 12. Concurrency12.1 Background and Motivation 12.2 Concurrent Programming Fundamentals 12.3 Shared Memory 12.4 Message Passing 13. Scripting13.1 What Is a Scripting Language?13.2 Problem Domains13.3 Scripting the World Wide Web13.4 Innovative FeaturesPart IV A Closer Look at Implementation 14. Building a Runnable Program 14.1 Back-End Compiler Structure 14.2 Intermediate Forms14.3 Code Generation 14.4 Address Space Organization 14.5 Assembly 14.6 Linking 14.7 Dynamic Linking15. Code Improvement15.1 Phases of Code Improvement15.2 Peephole Optimization15.3 Redundancy Elimination in Basic Blocks15.4 Global Redundancy and Data Flow Analysis15.5 Loop Improvement I15.6 Instruction Scheduling15.7 Loop Improvement II15.8 Register AllocationA. Programming Languages MentionedB. Language Design and Language ImplementationC. Numbered ExamplesBibliographyIndex

Product details

About the author

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.

Affiliations and expertise
Professor and past Chair, Computer Science Department, University of Rochester, USA