Programming Language Pragmatics / Edition 3

Programming Language Pragmatics / Edition 3

by Michael Scott
ISBN-10:
0123745144
ISBN-13:
9780123745149
Pub. Date:
03/23/2009
Publisher:
Elsevier Science
ISBN-10:
0123745144
ISBN-13:
9780123745149
Pub. Date:
03/23/2009
Publisher:
Elsevier Science
Programming Language Pragmatics / Edition 3

Programming Language Pragmatics / Edition 3

by Michael Scott
$77.95
Current price is , Original price is $77.95. You
$77.95 
  • SHIP THIS ITEM
    This item is available online through Marketplace sellers.
  • PICK UP IN STORE

    Your local store may have stock of this item.

$14.97 
  • SHIP THIS ITEM

    Temporarily Out of Stock Online

    Please check back later for updated availability.

    • Condition: Good
    Note: Access code and/or supplemental material are not guaranteed to be included with used textbook.

Overview

Programming Language Pragmatics is the most comprehensive programming language book available today. Taking the perspective that language design and language implementation are tightly interconnected and that neither can be fully understood in isolation, this critically acclaimed and bestselling book has been thoroughly updated to cover the most recent developments in programming language design. With a new chapter on run-time program management and expanded coverage of concurrency, this new edition provides both students and professionals alike with a solid understanding of the most important issues driving software development today.

THIRD EDITION FEATURES

  • Covers the most recent developments in programming language design, including Java 6 and 7, C++0X, C# 3.0, F#, Fortran 2003 and 2008, Ada 2005, and Scheme R6RS.
  • Includes a new chapter on run-time program management, covering virtual machines, managed code, just-in-time and dynamic compilation, reflection, binary translation and rewriting, mobile code, sandboxing, and debugging and program analysis tools.
  • Updates the concurrency chapter to address the latest developments in computer architecture and parallel language design, with major new sections on multicore and supercomputer machines, nonblocking synchronization, event-driven programming, memory consistency models, and transactional memory, plus new or updated coverage of OpenMP, Erlang, the pthreads library, and the concurrency features of Java and C#.
  • Improves pedagogy throughout the book, with extensive changes to the introductory chapter and the coverage of scanning and parsing, modules and scoping, macros and in-lining, polymorphism, monads, iteration and enumeration, array management, and object and subroutine closures.
  • Provides additional resources on a companion CD, with advanced/optional content, hundreds of working examples, an active search facility, and live links to manuals, tutorials, compilers, and interpreters on the World Wide Web. CD content is also available on a "companion" site at elsevierdirect dot com / 9780123745149

Product Details

ISBN-13: 9780123745149
Publisher: Elsevier Science
Publication date: 03/23/2009
Edition description: Older Edition
Pages: 944
Product dimensions: 7.50(w) x 9.20(h) x 1.50(d)

About the Author

About The Author
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.

Table of Contents

What People are Saying About This

From the Publisher

The classic comprehensive programming language text that combines language design and language implementation, thoroughly updated to cover the most recent developments in programming language design

From the B&N Reads Blog

Customer Reviews

About the Authorii
Prefacexvii
Chapter 1Introduction1
1.1The Art of Language Design3
1.2The Programming Language Spectrum5
1.3Why Study Programming Languages?7
1.4Compilation and Interpretation9
1.5Programming Environments14
1.6An Overview of Compilation15
1.6.1Lexical and Syntax Analysis16
1.6.2Semantic Analysis and Intermediate Code Generation18
1.6.3Target Code Generation22
1.6.4Code Improvement24
1.7Summary and Concluding Remarks24
1.8Review Questions25
1.9Exercises26
1.10Bibliographic Notes28
Chapter 2Programming Language Syntax31
2.1Specifying Syntax: Regular Expressions and Context-Free Grammars32
2.1.1Tokens and Regular Expressions33
2.1.2Context-Free Grammars34
2.1.3Derivations and Parse Trees36
2.2Recognizing Syntax: Scanners and Parsers39
2.2.1Scanning40
2.2.2Top-Down and Bottom-Up Parsing48
2.2.3Recursive Descent51
2.2.4Syntax Errors57
2.2.5Table-Driven Top-Down Parsing62
2.2.6Bottom-Up Parsing75
2.3Theoretical Foundations87
2.3.1Finite Automata88
2.3.2Push-Down Automata92
2.3.3Grammar and Language Classes93
2.4Summary and Concluding Remarks94
2.5Review Questions97
2.6Exercises98
2.7Bibliographic Notes102
Chapter 3Names, Scopes, and Bindings105
3.1The Notion of Binding Time106
3.2Object Lifetime and Storage Management108
3.2.1Stack-Based Allocation111
3.2.2Heap-Based Allocation113
3.2.3Garbage Collection114
3.3Scope Rules115
3.3.1Static Scope116
3.3.2Dynamic Scope129
3.3.3Symbol Tables132
3.3.4Association Lists and Central Reference Tables137
3.4The Binding of Referencing Environments139
3.4.1Subroutine Closures141
3.4.2First- and Second-Class Subroutines143
3.5Overloading and Related Concepts144
3.6Naming-Related Pitfalls in Language Design149
3.6.1Scope Rules149
3.6.2Separate Compilation151
3.7Summary and Concluding Remarks155
3.8Review Questions157
3.9Exercises158
3.10Bibliographic Notes162
Chapter 4Semantic Analysis165
4.1The Role of the Semantic Analyzer166
4.2Attribute Grammars168
4.3Attribute Flow170
4.4Action Routines179
4.5Space Management for Attributes180
4.5.1Bottom-Up Evaluation181
4.5.2Top-Down Evaluation186
4.6Annotating a Syntax Tree191
4.7Summary and Concluding Remarks197
4.8Review Questions198
4.9Exercises199
4.10Bibliographic Notes202
Chapter 5Assembly-Level Computer Architecture203
5.1Workstation Macro-Architecture204
5.2The Memory Hierarchy207
5.3Data Representation209
5.3.1Integer Arithmetic211
5.3.2Floating-Point Arithmetic212
5.4Instruction Set Architecture214
5.4.1Addressing Modes215
5.4.2Conditional Branches217
5.5The Evolution of Processor Architecture218
5.5.1Two Example Architectures: The 680x0 and MIPS220
5.5.2Pseudoassembler Notation225
5.6Compiling for Modern Processors227
5.6.1Keeping the Pipeline Full227
5.6.2Register Allocation234
5.7Summary and Concluding Remarks242
5.8Review Questions243
5.9Exercises244
5.10Bibliographic Notes247
Chapter 6Control Flow249
6.1Expression Evaluation250
6.1.1Precedence and Associativity251
6.1.2Assignments254
6.1.3Ordering Within Expressions262
6.1.4Short-Circuit Evaluation265
6.2Structured and Unstructured Flow267
6.3Sequencing270
6.4Selection271
6.4.1Short-Circuited Conditions272
6.4.2Case/Switch Statements275
6.5Iteration280
6.5.1Enumeration-Controlled Loops280
6.5.2Combination Loops286
6.5.3Iterators287
6.5.4Logically Controlled Loops294
6.6Recursion297
6.6.1Iteration and Recursion297
6.6.2Applicative- and Normal-Order Evaluation301
6.7Nondeterminacy303
6.8Summary and Concluding Remarks308
6.9Review Questions310
6.10Exercises311
6.11Bibliographic Notes316
Chapter 7Data Types319
7.1Type Systems320
7.1.1The Definition of Types322
7.1.2The Classification of Types323
7.2Type Checking330
7.2.1Type Equivalence330
7.2.2Type Conversion and Casts334
7.2.3Type Compatibility and Coercion337
7.2.4Type Inference341
7.2.5The ML Type System344
7.3Records (Structures) and Variants (Unions)351
7.3.1Syntax and Operations351
7.3.2Memory Layout and Its Impact353
7.3.3With Statements355
7.3.4Variant Records358
7.4Arrays365
7.4.1Syntax and Operations365
7.4.2Dimensions, Bounds, and Allocation369
7.4.3Memory Layout373
7.5Strings379
7.6Sets381
7.7Pointers and Recursive Types382
7.7.1Syntax and Operations383
7.7.2Dangling References391
7.7.3Garbage Collection395
7.8Lists401
7.9Files and Input/Output403
7.9.1Interactive I/O404
7.9.2File-Based I/O405
7.9.3Text I/O407
7.10Equality Testing and Assignment414
7.11Summary and Concluding Remarks416
7.12Review Questions418
7.13Exercises420
7.14Bibliographic Notes425
Chapter 8Subroutines and Control Abstraction427
8.1Review of Stack Layout428
8.2Calling Sequences431
8.2.1Case Study: C on the MIPS434
8.2.2Case Study: Pascal on the 680x0437
8.2.3In-Line Expansion441
8.3Parameter Passing442
8.3.1Parameter Modes443
8.3.2Special-Purpose Parameters453
8.3.3Function Returns457
8.4Generic Subroutines and Modules459
8.5Exception Handling464
8.5.1Definition of Exceptions466
8.5.2Exception Propagation468
8.5.3Example: Phrase-Level Recovery in a Recursive Descent Parser470
8.5.4Implementation of Exceptions471
8.6Coroutines474
8.6.1Stack Allocation476
8.6.2Transfer478
8.6.3Iterators479
8.6.4Example: Discrete Event Simulation480
8.7Summary and Concluding Remarks484
8.8Review Questions485
8.9Exercises486
8.10Bibliographic Notes489
Chapter 9Building a Runnable Program491
9.1Back-End Compiler Structure491
9.1.1An Example492
9.1.2Phases and Passes496
9.2Intermediate Forms496
9.2.1Diana498
9.2.2GNU RTL499
9.3Code Generation503
9.3.1An Attribute Grammar Example504
9.3.2Register Allocation504
9.4Address Space Organization507
9.5Assembly510
9.5.1Emitting Instructions511
9.5.2Assigning Addresses to Names514
9.6Linking515
9.6.1Relocation and Name Resolution515
9.6.2Type Checking516
9.7Dynamic Linking518
9.7.1Position-Independent Code519
9.7.2Fully Dynamic (Lazy) Linking521
9.8Summary and Concluding Remarks522
9.9Review Questions523
9.10Exercises524
9.11Bibliographic Notes527
Chapter 10Data Abstraction and Object Orientation529
10.1Object-Oriented Programming530
10.2Encapsulation and Inheritance539
10.2.1Modules539
10.2.2Classes542
10.2.3Type Extensions544
10.3Intitialization and Finalization546
10.3.1Choosing a Constructor547
10.3.2References and Values550
10.3.3Execution Order551
10.3.4Garbage Collection553
10.4Dynamic Method Binding554
10.4.1Virtual and Nonvirtual Methods555
10.4.2Abstract Classes557
10.4.3Member Lookup557
10.4.4Related Concepts561
10.5Multiple Inheritance564
10.5.1Semantic Ambiguities568
10.5.2Replicated Inheritance570
10.5.3Shared Inheritance572
10.5.4Mix-In Inheritance573
10.6Object-Oriented Programming Revisited574
10.6.1The Object Model of Smalltalk577
10.7Summary and Concluding Remarks580
10.8Review Questions582
10.9Exercises583
10.10Bibliographic Notes586
Chapter 11Nonimperative Programming Models: Functional and Logic Languages589
11.1Historical Origins590
11.2Functional Programming592
11.2.1A Review/Overview of Scheme594
11.2.2Evaluation Order Revisited604
11.2.3Higher-Order Functions609
11.2.4Theoretical Foundations612
11.2.5Functional Programming in Perspective622
11.3Logic Programming624
11.3.1Prolog625
11.3.2Theoretical Foundations641
11.3.3Logic Programming in Perspective646
11.4Summary and Concluding Remarks648
11.5Review Questions650
11.6Exercises651
11.7Bibliographic Notes657
Chapter 12Concurrency659
12.1Background and Motivation660
12.1.1A Little History660
12.1.2The Case for Multithreaded Programs663
12.1.3Multiprocessor Architecture667
12.2Concurrent Programming Fundamentals670
12.2.1Communication and Synchronization671
12.2.2Languages and Libraries672
12.2.3Thread Creation Syntax673
12.2.4Implementation of Threads682
12.3Shared Memory687
12.3.1Busy-Wait Synchronization688
12.3.2Scheduler Implementation692
12.3.3Scheduler-Based Synchronization694
12.3.4Implicit Synchronization703
12.4Message Passing706
12.4.1Naming Communication Partners706
12.4.2Sending710
12.4.3Receiving714
12.4.4Remote Procedure Call719
12.5Summary and Concluding Remarks722
12.6Review Questions724
12.7Exercises725
12.8Bibliographic Notes730
Chapter 13Code Improvement733
13.1Phases of Code Improvement735
13.2Peephole Optimization737
13.3Redundancy Elimination in Basic Blocks740
13.4Global Redundancy and Data Flow Analysis745
13.4.1Static Single Assignment Form and Global Value Numbering746