{"product_id":"trustworthy-compilers-isbn-9780470500958","title":"Trustworthy Compilers","description":"This unique guide book explains and teaches the concept of trustworthy compilers based on 50+ years of worldwide experience in the area of compilers, and on the author’s own 30+ years of expertise in development and teaching compilers. It covers the key topics related to compiler development as well as compiling methods not thoroughly covered in other books. The book also reveals many state-of-the-art compiler development tools and personal experience of their use in research projects by the author and his team. Software engineers of commercial companies and undergraduate\/graduate students will benefit from this guide.  Preface.  \u003cp\u003eAcknowledgments.\u003c\/p\u003e \u003cp\u003e\u003cb\u003e1. Introduction.\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e1.1. The Concept of a Trustworthy Compiler.\u003c\/p\u003e \u003cp\u003e1.2. Kinds of Compilers.\u003c\/p\u003e \u003cp\u003e1.3. Evolution of Java Compilers.\u003c\/p\u003e \u003cp\u003e1.4. Compilation for .NET.\u003c\/p\u003e \u003cp\u003e1.5. Phases of Compilation.\u003c\/p\u003e \u003cp\u003e1.6. Overview of Compiler Development Principles and Technologies.\u003c\/p\u003e \u003cp\u003e1.7. History of Compiler Development in the U.S.S.R. and in Russia.\u003c\/p\u003e \u003cp\u003eExercises to Chapter 1.\u003c\/p\u003e \u003cp\u003e\u003cb\u003e2. Theoretical Foundations and Principles of Trustworthy Compilers.\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e2.1. The Trustworthy Computing (TWC) Initiative.\u003c\/p\u003e \u003cp\u003e2.2. TWC and Trustworthy Compilers.\u003c\/p\u003e \u003cp\u003e2.3. Verified Compilers.\u003c\/p\u003e \u003cp\u003e2.4. Spec#: Microsoft’s Approach to Verifying Compilers.\u003c\/p\u003e \u003cp\u003e2.5. Perspectives of Verified and Verifying Compilation.\u003c\/p\u003e \u003cp\u003eExercises to Chapter 2.\u003c\/p\u003e \u003cp\u003e\u003cb\u003e3. Lexical Analysis and Its Trustworthiness Principles.\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e3.1. Token Classes.\u003c\/p\u003e \u003cp\u003e3.2. The Output of the Lexical Analyzer.\u003c\/p\u003e \u003cp\u003e3.3. Processing White Spaces, Comments, and New Lines.\u003c\/p\u003e \u003cp\u003e3.4. Theoretical Models of Lexical Analysis.\u003c\/p\u003e \u003cp\u003e3.5. Lexical Errors, Error Diagnostics, and Recovery.\u003c\/p\u003e \u003cp\u003e3.6. Processing Identifiers and Keywords.\u003c\/p\u003e \u003cp\u003e3.7. The Architecture of a Lexical Analyzer and the Principles of Its Implementation.\u003c\/p\u003e \u003cp\u003e3.8. The Lexical Analyzer Generator \u003ci\u003eLex\u003c\/i\u003e.\u003c\/p\u003e \u003cp\u003e3.9. Lexical Analyzer Generation in ANTLR.\u003c\/p\u003e \u003cp\u003eExercises to Chapter 3.\u003c\/p\u003e \u003cp\u003e\u003cb\u003e4. Parsing and Trustworthy Methods of Syntax Error Recovery.\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e4.1. Basic Concepts and Principles of Parsing.\u003c\/p\u003e \u003cp\u003e4.2. Recursive Descent and Simple Lookahead Mechanism.\u003c\/p\u003e \u003cp\u003e4.3. Overview of Error Recovery in Parsing: Error Recovery for Recursive Descent.\u003c\/p\u003e \u003cp\u003e4.4. LR(1) and LALR(1) Parsing.\u003c\/p\u003e \u003cp\u003e4.5. Error Recovery in LR Parsing.\u003c\/p\u003e \u003cp\u003e4.6. The \u003ci\u003eYacc\u003c\/i\u003e Parser Generator.\u003c\/p\u003e \u003cp\u003e4.7. The \u003ci\u003eBison\u003c\/i\u003e Parser Generator: Generalized LR Parsing.\u003c\/p\u003e \u003cp\u003e4.8. The \u003ci\u003eYacc\u003c\/i\u003e++, \u003ci\u003eJavaCC\u003c\/i\u003e, \u003ci\u003eSableCC\u003c\/i\u003e, \u003ci\u003eANTLR\u003c\/i\u003e, and \u003ci\u003eCoCo\/R\u003c\/i\u003e Object-Oriented Parser Generators.\u003c\/p\u003e \u003cp\u003eExercises to Chapter 4.\u003c\/p\u003e \u003cp\u003e\u003cb\u003e5. Semantic Analysis and Typing: Efficient and Trustworthy Techniques.\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e5.1. Basic Concepts and Principles of Semantic Analysis.\u003c\/p\u003e \u003cp\u003e5.2. Formal Model of Semantic Analysis: Attributed Grammars.\u003c\/p\u003e \u003cp\u003e5.3. Definition Systems with Forward References and the Algorithm of Their One-Pass Analysis.\u003c\/p\u003e \u003cp\u003e5.4. Commonly Used Semantic Attributes for Program Constructs.\u003c\/p\u003e \u003cp\u003e5.5. Design Flaws of the Semantic Attribute Evaluation and Our Efficient Methods to Speed It Up.\u003c\/p\u003e \u003cp\u003e5.6. Lookup—Traditional and Novel Techniques.\u003c\/p\u003e \u003cp\u003e5.7. Typing and Type-Checking: Basic Concepts.\u003c\/p\u003e \u003cp\u003e5.8. Representing Types at Compile Time.\u003c\/p\u003e \u003cp\u003e5.9. Efficient Method and Algorithm to Represent and Handle Types with Structural Identity.\u003c\/p\u003e \u003cp\u003e5.10. Type Identity and Type Compatibility.\u003c\/p\u003e \u003cp\u003e5.11. Type-Checking, Typing Error Diagnostics, and Recovery.\u003c\/p\u003e \u003cp\u003e5.12. Code Trustworthiness Checks During Semantic Analysis.\u003c\/p\u003e \u003cp\u003e5.13. Checks for Context Restrictions in Semantic Analysis.\u003c\/p\u003e \u003cp\u003e5.14. Intermediate Code Generation—Principles and Architectural Models.\u003c\/p\u003e \u003cp\u003e5.15. Postfix (Reverse Polish) Notation.\u003c\/p\u003e \u003cp\u003e5.16. PCC Trees.\u003c\/p\u003e \u003cp\u003e5.17. Triples.\u003c\/p\u003e \u003cp\u003e5.18. Summary of the Chapter.\u003c\/p\u003e \u003cp\u003eExercises to Chapter 5.\u003c\/p\u003e \u003cp\u003e\u003cb\u003e6. Trustworthy Optimizations.\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e6.1. Basic Concepts and Trustworthiness of Optimizations.\u003c\/p\u003e \u003cp\u003e6.2. Optimizations as Mixed Computations.\u003c\/p\u003e \u003cp\u003e6.3. Overview of the Most Common Kinds of Optimizations.\u003c\/p\u003e \u003cp\u003e6.4. Control Flow and Data Flow Dependencies.\u003c\/p\u003e \u003cp\u003e6.5. Static Single Assignment (SSA).\u003c\/p\u003e \u003cp\u003e6.6. Data Structures Constructed and Used by the Optimizer.\u003c\/p\u003e \u003cp\u003e6.7. Optimization in Sun Studio Compilers.\u003c\/p\u003e \u003cp\u003e6.8. Optimizations of the Java Bytecode.\u003c\/p\u003e \u003cp\u003e6.9. Optimizations of the .NET Common Intermediate Language (CIL) Code.\u003c\/p\u003e \u003cp\u003e6.10. Optimizations during JIT Compilation.\u003c\/p\u003e \u003cp\u003eExercises to Chapter 6.\u003c\/p\u003e \u003cp\u003e\u003cb\u003e7. Code Generation and Runtime Data Representation.\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e7.1. Target Platforms for Code Generation.\u003c\/p\u003e \u003cp\u003e7.2. Overview of Code Generation Tasks and Goals.\u003c\/p\u003e \u003cp\u003e7.3. Specifics of Code Generation for .NET.\u003c\/p\u003e \u003cp\u003e7.4. Specifics of Code Generation for SPARC Architecture.\u003c\/p\u003e \u003cp\u003e7.5. Representing Types and Addressing Variables.\u003c\/p\u003e \u003cp\u003e7.6. Representing Procedures, Functions, and Methods.\u003c\/p\u003e \u003cp\u003e7.7. Principles of SPARC Architecture.\u003c\/p\u003e \u003cp\u003e7.8. Example of Code Generation for SPARC Architecture.\u003c\/p\u003e \u003cp\u003e7.9. Generation of Debugging Information.\u003c\/p\u003e \u003cp\u003e7.10. Code Generation for Declarations (Definitions), Expressions, and Statements.\u003c\/p\u003e \u003cp\u003eExercises to Chapter 7.\u003c\/p\u003e \u003cp\u003e\u003cb\u003e8. Runtime, JIT, and AOT Compilation.\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e8.1. The Tasks of the Runtime.\u003c\/p\u003e \u003cp\u003e8.2. The Relationship of the Runtime and the Operating System (OS).\u003c\/p\u003e \u003cp\u003e8.3. JIT Compilation.\u003c\/p\u003e \u003cp\u003e8.4. The Architecture of FJIT––JIT Compiler for SSCLI\/Rotor.\u003c\/p\u003e \u003cp\u003e8.5. The Architecture of Optimizing JIT Compiler for SSCLI\/Rotor.\u003c\/p\u003e \u003cp\u003e8.6. AOT Compilation.\u003c\/p\u003e \u003cp\u003eExercises to Chapter 8.\u003c\/p\u003e \u003cp\u003e\u003cb\u003e9. Graph Grammars and Graph Compilers.\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e9.1. Basic Concepts of Graph Grammars and Graph Compilers.\u003c\/p\u003e \u003cp\u003e9.2. Categorical Approach to Graph Transformations.\u003c\/p\u003e \u003cp\u003e9.3. Reserved Graph Grammars (RGGs).\u003c\/p\u003e \u003cp\u003e9.4. Layered Graph Grammars.\u003c\/p\u003e \u003cp\u003e9.5. Meta-Modeling Approach to Graph Grammars and Diameta Editor.\u003c\/p\u003e \u003cp\u003e9.6. Hypergraph Approach to Graph Grammars in Diagen.\u003c\/p\u003e \u003cp\u003e9.7. Graph Compiler Generation Tools.\u003c\/p\u003e \u003cp\u003eExercises to Chapter 9.\u003c\/p\u003e \u003cp\u003e\u003cb\u003e10. Microsoft Phoenix, Phoenix-Targeted Tools, and Our Phoenix Projects.\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e10.1. History of Phoenix and of Our Phoenix Projects.\u003c\/p\u003e \u003cp\u003e10.2. Overview of Phoenix Architecture.\u003c\/p\u003e \u003cp\u003e10.3. Phoenix-Based Tools, Passes, Phases, and Plug-Ins.\u003c\/p\u003e \u003cp\u003e10.4. Phoenix Primitives: Strings and Names.\u003c\/p\u003e \u003cp\u003e10.5. Phoenix Intermediate Representation (IR).\u003c\/p\u003e \u003cp\u003e10.6. Phoenix Symbol System.\u003c\/p\u003e \u003cp\u003e10.7. Phoenix Type System.\u003c\/p\u003e \u003cp\u003e10.8. Data Flow Analysis, Control Flow Analysis, Graphs, and Static Single Assignment (SSA) in Phoenix.\u003c\/p\u003e \u003cp\u003e10.9. Overview of Other Phoenix Features.\u003c\/p\u003e \u003cp\u003e10.10. Example of a Phoenix-Based Plug-In.\u003c\/p\u003e \u003cp\u003e10.11. Phoenix-Fete—A Compiler Front-End Development Toolkit and Environment Targeted to Phoenix.\u003c\/p\u003e \u003cp\u003eExercises to Chapter 10.\u003c\/p\u003e \u003cp\u003e\u003cb\u003eConclusions.\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eReferences.\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e\u003cb\u003eIndex\u003c\/b\u003e.\u003c\/p\u003e \"Overall, however, it is an excellent addition to a computer scientist's bookshelf, and complements the classics in compiler design.\" (Computing Reviews, 22 November 2011)\u003cbr\u003e\u003cbr\u003e \u003cb\u003eVLADIMIR O. SAFONOV\u003c\/b\u003e is one of the leading specialists in computer science and software engineering in Russia. He is a Professor of Computer Science at St. Petersburg University and the head of the Java Technology Laboratory at the university. In 2000 and 2001, students of his department won the world championship for the ACM programming contest. Professor Safonov holds four U.S. software patents, four Russian software patents, and has published 120 papers and six books. He is the author of \u003ci\u003eUsing Aspect-Oriented Programming for Trustworthy Software Development\u003c\/i\u003e (Wiley). He is the chair of the IEEE Region 8 Russia North-West Computer Society\/Technology Management Council Joint Chapter. He was also a Microsoft Research¿2005\/2006 RFP winner for TWC and Secure Software Development. \u003cb\u003eThe Most Complete, Real-World Guide to Compiler Development—and the Principles of Trustworthy Compilers\u003c\/b\u003e \u003cp\u003eDrawing on the author's over thirty years of expertise in compiler development, research, and instruction, Trustworthy Compilers introduces and analyzes the concept of trustworthy compilers and the principles of trustworthy compiler development, and provides analytical overview of other promising research works in this area.\u003c\/p\u003e \u003cp\u003eVladimir Safonov shares the benefit of his long experience as a teacher and compiler development professional to explain that—even in such a well-studied area as compilers—there is still an opportunity for original results, efficient algorithms, and promising research and development. Beginning with a definition of the trustworthy compiler and a review of the history of compiler development, \u003ci\u003eTrustworthy Compilers\u003c\/i\u003e features:\u003c\/p\u003e \u003cul\u003e \u003cli\u003eA complete overview of all essential compiler topics, including lexical analysis, parsing, semantic analysis, compiler optimization, code generation, and traditional and modern approaches to runtime\u003c\/li\u003e \u003cli\u003eEfficient, ready-to-apply algorithms for various phases of compilation, especially for semantic analysis, developed by the author and used in his real compilers\u003c\/li\u003e \u003cli\u003eHigh-yield coverage of graph compilers—a novel compiler development area—plus related concepts such as graph grammars and graph compilers, and editor development tools such as DiaGen\u003c\/li\u003e \u003cli\u003eReal projects—using examples of real compilers—that cover the key topics related to compiler development and compiling methods\u003c\/li\u003e \u003cli\u003eA survey of novel kinds of compilation, including just-in-time (JIT) and ahead-of-time (AOT) compilation, which are characteristic of modern software development platforms Java and .NET\u003c\/li\u003e \u003cli\u003eSections on modern compiler tools—such as ANTLR, CoCo\/R, and SableCC\u003c\/li\u003e \u003c\/ul\u003e \u003cp\u003eCovering both classical techniques and innovative ones not covered by other books, \u003ci\u003eTrustworthy Compilers\u003c\/i\u003e helps both practicing professionals and students meet the challenge of making compilers more trustworthy. The book's companion Web page (www.vladimirsafonov.org\/trustworthycompilers) provides an overview of the book and related resources for compiler teachers and students.\u003c\/p\u003e","brand":"Wiley","offers":[{"title":"Default Title","offer_id":47990417162469,"sku":"NP9780470500958","price":173.95,"currency_code":"USD","in_stock":false}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/1842\/7735\/files\/9780470500958.jpg?v=1761787744","url":"https:\/\/k12savings.com\/products\/trustworthy-compilers-isbn-9780470500958","provider":"K12savings","version":"1.0","type":"link"}