An Experiential Introduction to Principles of Programming Languages
- Length: 304 pages
- Edition: 1
- Language: English
- Publisher: The MIT Press
- Publication Date: 2022-05-03
- ISBN-10: 0262045451
- ISBN-13: 9780262045452
- Sales Rank: #2458659 (See Top 100 Books)
A textbook that uses a hands-on approach to teach principles of programming languages, with Java as the implementation language.
This introductory textbook uses a hands-on approach to teach the principles of programming languages. Using Java as the implementation language, Rajan covers a range of emerging topics, including concurrency, Big Data, and event-driven programming. Students will learn to design, implement, analyze, and understand both domain-specific and general-purpose programming languages.
- Develops basic concepts in languages, including means of computation, means of combination, and means of abstraction.
- Examines imperative features such as references, concurrency features such as fork, and reactive features such as event handling.
- Covers language features that express differing perspectives of thinking about computation, including those of logic programming and flow-based programming.
- Presumes Java programming experience and understanding of object-oriented classes, inheritance, polymorphism, and static classes.
- Each chapter corresponds with a working implementation of a small programming language allowing students to follow along.
Cover Title Page Copyright Dedication Epigraphs Table of Contents List of Figures List of Tables Preface Road Map I. Preliminaries 1. Introduction 1.1. Kinds of Programming Languages 1.2. Our Goals 1.3. Parts of a Programming Language 1.4. Mathematical Concepts and Notations 1.5. Java: A Brief Review 2. Inductive Sets and Functions 2.1. Definitions of Inductive Sets 2.2. Examples: Inductive Sets 2.3. Functions over Inductive Sets 2.4. Functions over Inductively Specified Lists 2.5. Recipe for Recursion II. Building a Programming Language 3. Getting Started 3.1. Arithlang: An Arithmetic Language 3.2. Legal Programs 3.3. Syntax Derivation 3.4. Two Possibilities for Implementation 3.5. Reading Programs 3.6. Storing Programs 3.7. Analyzing Programs 3.8. Legal Values 3.9. Evaluating Programs to Values 3.10. Read-Eval-Print Loop 4. Varlang: A Language with Variables 4.1. Variables as Means of Abstraction 4.2. Variable Definition and Usage 4.3. Variable Scoping 4.4. Reading Let and Var Expressions 4.5. AST Nodes for Let and Var 4.6. Lexically Scoped Variable Definitions 4.7. Environment Abstraction 4.8. Environment-Passing Interpreters 4.9. Value of a Var Expression 4.10. Value of a Let Expression 5. Definelang: A Language with Global Variables 5.1. Local versus Global Definitions 5.2. Define, Define 5.3. Semantics and Interpretation of Programs with Define Declarations 6. Funclang: A Language with Functions 6.1. Function as Abstraction 6.2. Function Definitions and Calls 6.3. Functions for Pairs and Lists 6.4. Higher-Order Functions 6.5. Functional Data Structures 6.6. Currying 6.7. Syntax of Lambda and Call Expressions 6.8. Value of a Lambda Expression 6.9. Value of a Call Expression 6.10. Call-by-Name Evaluation 6.11. Semantics of Conditional Expressions 6.12. Semantics of Pairs and Lists III. References and Concurrency 7. Reflang: A Language with References 7.1. Heap and References 7.2. Memory-Related Operations in Reflang 7.3. Parsing Reference-Related Expressions 7.4. RefVal: A New Kind of Value 7.5. Heap Abstraction 7.6. Semantics of Reflang Expressions 7.7. Realizing Heap 7.8. Evaluator with References 7.9. Problems with Manual Memory Management 8. Forklang: A Language with Concurrency and Parallelism 8.1. Explicit versus Implicit Concurrency 8.2. Explicit Concurrency Features 8.3. Semantic Variations of Fork 8.4. Semantic Variations of Lock Expressions 8.5. New Expressions for Concurrency 8.6. Semantics of a Fork Expression 8.7. Semantics of a Lock-Related Expression 8.8. Data Races in Forklang Programs 8.9. Deadlocks in Forklang Programs IV. Types and Specifications 9. Typelang: A Language with Types 9.1. Why Types? 9.2. Kinds of Specifications 9.3. Types 9.4. Adding Type Annotations 9.5. Checking Types 9.6. Typechecking Rules for Constants 9.7. Typechecking Rules for Atomic Expressions 9.8. Typechecking Rules for Compound Expressions 9.9. Types for Variables 9.10. Types for Functions and Calls 9.11. Types for Reference Expressions 10. Speclang: A Language with Specifications 10.1. Motivation 10.2. Language Features for Specifications 10.3. Example Specifications for List Functions 10.4. Syntax of New Features for Writing Specifications 10.5. Checking Specifications: Static versus Dynamic 10.6. Typechecking Specifications 10.7. Side-Effect Freedom 10.8. Runtime Specification Checking V. Advanced Features 11. Msglang: A Language with Message-Passing Concurrency 11.1. Examples 11.2. New Expressions 11.3. ProcessVal: A New Kind of Value 11.4. Receiving a Message 11.5. Semantics of Msglang Expressions 12. Eventlang: A Language with Events 12.1. Event-Driven Programming 12.2. Syntax of New Features for Event-Driven Programming 12.3. Semantics of Events and Event Creation 12.4. Semantics of Subjects and Event Announcements 12.5. Semantics of Handlers and the When Expression Appendix: ANTLR: A Brief Review Bibliography Index
Donate to keep this site alive
To access the Link, solve the captcha.
1. Disable the AdBlock plugin. Otherwise, you may not get any links.
2. Solve the CAPTCHA.
3. Click download link.
4. Lead to download server to download.