Programming Language Pragmatics
Programming Language Pragmatics is the most comprehensive programming language textbook available today, with nearly 1000 pages of content in the book, plus hundreds more pages of reference materials and ancillaries online. Michael Scott takes theperspective that language design and language implementation are tightly interconnected, and that neither can be fully understood in isolation. In an approachable, readable style, he discusses more than 50 languages in the context of understanding how code isinterpreted or compiled, providing an organizational framework for learning new languages, regardless of platform. This edition has been thoroughly updated to cover the most recent developments in programming language design and provides both a solid understanding of the most important issues driving software development today - Provides a complete re-write of the chapter on semantic analysis, using formal inference rules - Includes a heavy revision of the chapter on type systems - Presents significant updates to the chapters on composite types, object orientation, and code generation - Covers new material on ownership types, safe concurrency, asynchronous programming, traits, move constructors, template "concepts," the LLVM compiler infrastructure, and many other topics
1120285516
Programming Language Pragmatics
Programming Language Pragmatics is the most comprehensive programming language textbook available today, with nearly 1000 pages of content in the book, plus hundreds more pages of reference materials and ancillaries online. Michael Scott takes theperspective that language design and language implementation are tightly interconnected, and that neither can be fully understood in isolation. In an approachable, readable style, he discusses more than 50 languages in the context of understanding how code isinterpreted or compiled, providing an organizational framework for learning new languages, regardless of platform. This edition has been thoroughly updated to cover the most recent developments in programming language design and provides both a solid understanding of the most important issues driving software development today - Provides a complete re-write of the chapter on semantic analysis, using formal inference rules - Includes a heavy revision of the chapter on type systems - Presents significant updates to the chapters on composite types, object orientation, and code generation - Covers new material on ownership types, safe concurrency, asynchronous programming, traits, move constructors, template "concepts," the LLVM compiler infrastructure, and many other topics
99.95 In Stock
Programming Language Pragmatics

Programming Language Pragmatics

Programming Language Pragmatics

Programming Language Pragmatics

eBook

$99.95 

Available on Compatible NOOK devices, the free NOOK App and in My Digital Library.
WANT A NOOK?  Explore Now

Related collections and offers


Overview

Programming Language Pragmatics is the most comprehensive programming language textbook available today, with nearly 1000 pages of content in the book, plus hundreds more pages of reference materials and ancillaries online. Michael Scott takes theperspective that language design and language implementation are tightly interconnected, and that neither can be fully understood in isolation. In an approachable, readable style, he discusses more than 50 languages in the context of understanding how code isinterpreted or compiled, providing an organizational framework for learning new languages, regardless of platform. This edition has been thoroughly updated to cover the most recent developments in programming language design and provides both a solid understanding of the most important issues driving software development today - Provides a complete re-write of the chapter on semantic analysis, using formal inference rules - Includes a heavy revision of the chapter on type systems - Presents significant updates to the chapters on composite types, object orientation, and code generation - Covers new material on ownership types, safe concurrency, asynchronous programming, traits, move constructors, template "concepts," the LLVM compiler infrastructure, and many other topics

Product Details

ISBN-13: 9780323984232
Publisher: Morgan Kaufmann Publishers
Publication date: 01/09/2025
Sold by: Barnes & Noble
Format: eBook
Pages: 992
File size: 38 MB
Note: This product may take a few minutes to download.

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.Jonathan Aldrich works at the intersection of programming languages and software engineering. His research explores how the way we express software affects our ability to engineer software at scale. A particular theme of much of his work is improving software quality and programmer productivity through better ways to express structural and behavioral aspects of software design within source code.Professor Aldrich has contributed to object-oriented typestate verification, modular reasoning techniques for aspects and stateful programs, and new object-oriented language models. For his work specifying and verifying architecture, he received a 2006 NSF CAREER award and the 2007 Dahl-Nygaard Junior Prize (press release, article). Right now he's excited to be working on the design of Wyvern, a new modularly extensible programming language.

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