{"product_id":"concepts-and-semantics-of-programming-languages-1-a-semantical-approach-with-ocaml-and-python-hardback-9781786305305","title":"Concepts and Semantics of Programming Languages 1; A Semantical Approach with OCaml and Python (Hardback) 9781786305305","description":"\u003cfont face=\"Georgia\"\u003e\r\n\u003cp\u003e\u003cfont size=\"6\"\u003eConcepts and Semantics of Programming Languages 1\u003c\/font\u003e\u003cbr\u003e\r\n\u003cfont size=\"5\"\u003eA Semantical Approach with OCaml and Python\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\r\n\r\n\u003cp\u003e\u003cfont size=\"4\"\u003eTherese Hardin (Author), Mathieu Jaume (Author), Francois Pessaux (Author), Veronique Viguie Donzeau-Gouge (Author)\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e9781786305305, Wiley\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003eHardback, published 18 June 2021\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e336 pages\u003cbr\u003e1 x 1 x 1 cm, 0.454 kg\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\r\n\r\n\r\n\u003cp align=\"justify\"\u003e\u003cstrong\u003e\u003cfont size=\"3\"\u003eThis book  the first of two volumes  explores the syntactical constructs of the most common programming languages, and sheds a mathematical light on their semantics, while also providing an accurate presentation of the material aspects that interfere with coding. \u003cp\u003e\u003ci\u003eConcepts and Semantics of Programming Languages 1\u003c\/i\u003e is dedicated to functional and imperative features. Included is the formal study of the semantics of typing and execution; their acquisition is facilitated by implementation into OCaml and Python, as well as by worked examples. Data representation is considered in detail: endianness, pointers, memory management, union types and pattern-matching, etc., with examples in OCaml, C and C++. The second volume introduces a specific model for studying modular and object features and uses this model to present Ada and OCaml modules, and subsequently Java, C++, OCaml and Python classes and objects. \u003c\/p\u003e\n\u003cp\u003eThis book is intended not only for computer science students and teachers but also seasoned programmers, who will find a guide to reading reference manuals and the foundations of program verification.\u003c\/p\u003e\u003c\/font\u003e\u003c\/strong\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003e\u003cp\u003eForeword xi\u003c\/p\u003e \u003cp\u003ePreface xiii\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 1. From Hardware to Software \u003c\/b\u003e\u003cb\u003e1\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e1.1. Computers: a low-level view 1\u003c\/p\u003e \u003cp\u003e1.1.1. Information processing 1\u003c\/p\u003e \u003cp\u003e1.1.2. Memories 2\u003c\/p\u003e \u003cp\u003e1.1.3. CPUs 3\u003c\/p\u003e \u003cp\u003e1.1.4. Peripheral devices 7\u003c\/p\u003e \u003cp\u003e1.2. Computers: a high-level view 8\u003c\/p\u003e \u003cp\u003e1.2.1. Modeling computations 9\u003c\/p\u003e \u003cp\u003e1.2.2. High-level languages 9\u003c\/p\u003e \u003cp\u003e1.2.3. From source code to executable programs 10\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 2. Introduction to Semantics of Programming Languages \u003c\/b\u003e\u003cb\u003e15\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e2.1. Environment, memory and state 16\u003c\/p\u003e \u003cp\u003e2.1.1. Evaluation environment 16\u003c\/p\u003e \u003cp\u003e2.1.2. Memory 18\u003c\/p\u003e \u003cp\u003e2.1.3. State 20\u003c\/p\u003e \u003cp\u003e2.2. Evaluation of expressions 21\u003c\/p\u003e \u003cp\u003e2.2.1. Syntax 21\u003c\/p\u003e \u003cp\u003e2.2.2. Values 22\u003c\/p\u003e \u003cp\u003e2.2.3. Evaluation semantics 24\u003c\/p\u003e \u003cp\u003e2.3. Definition and assignment 26\u003c\/p\u003e \u003cp\u003e2.3.1. Defining an identifier 26\u003c\/p\u003e \u003cp\u003e2.3.2. Assignment 29\u003c\/p\u003e \u003cp\u003e2.4. Exercises 31\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 3. Semantics of Functional Features \u003c\/b\u003e\u003cb\u003e35\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e3.1. Syntactic aspects 35\u003c\/p\u003e \u003cp\u003e3.1.1. Syntax of a functional kernel 35\u003c\/p\u003e \u003cp\u003e3.1.2. Abstract syntax tree 36\u003c\/p\u003e \u003cp\u003e3.1.3. Reasoning by induction over expressions 39\u003c\/p\u003e \u003cp\u003e3.1.4. Declaration of variables, bound and free variables 39\u003c\/p\u003e \u003cp\u003e3.2. Execution semantics: evaluation functions 42\u003c\/p\u003e \u003cp\u003e3.2.1. Evaluation errors 42\u003c\/p\u003e \u003cp\u003e3.2.2. Values 43\u003c\/p\u003e \u003cp\u003e3.2.3. Interpretation of operators 45\u003c\/p\u003e \u003cp\u003e3.2.4. Closures 46\u003c\/p\u003e \u003cp\u003e3.2.5. Evaluation of expressions 47\u003c\/p\u003e \u003cp\u003e3.3. Execution semantics: operational semantics 54\u003c\/p\u003e \u003cp\u003e3.3.1. Simple expressions 55\u003c\/p\u003e \u003cp\u003e3.3.2. Call-by-value 56\u003c\/p\u003e \u003cp\u003e3.3.3. Recursive and mutually recursive functions 60\u003c\/p\u003e \u003cp\u003e3.3.4. Call-by-name 61\u003c\/p\u003e \u003cp\u003e3.3.5. Call-by-value versus call-by-name 62\u003c\/p\u003e \u003cp\u003e3.4. Evaluation functions versus evaluation relations 64\u003c\/p\u003e \u003cp\u003e3.4.1. Status of the evaluation function 64\u003c\/p\u003e \u003cp\u003e3.4.2. Induction over evaluation trees 65\u003c\/p\u003e \u003cp\u003e3.5. Semantic properties 69\u003c\/p\u003e \u003cp\u003e3.5.1. Equivalent expressions 69\u003c\/p\u003e \u003cp\u003e3.5.2. Equivalent environments 71\u003c\/p\u003e \u003cp\u003e3.6. Exercises 71\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 4. Semantics of Imperative Features \u003c\/b\u003e\u003cb\u003e77\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e4.1. Syntax of a kernel of an imperative language 77\u003c\/p\u003e \u003cp\u003e4.2. Evaluation of expressions 81\u003c\/p\u003e \u003cp\u003e4.3. Evaluation of definitions 86\u003c\/p\u003e \u003cp\u003e4.4. Operational semantics 89\u003c\/p\u003e \u003cp\u003e4.4.1. Big-step semantics 89\u003c\/p\u003e \u003cp\u003e4.4.2. Small-step semantics 93\u003c\/p\u003e \u003cp\u003e4.4.3. Expressiveness of operational semantics 95\u003c\/p\u003e \u003cp\u003e4.5. Semantic properties 96\u003c\/p\u003e \u003cp\u003e4.5.1. Equivalent programs 96\u003c\/p\u003e \u003cp\u003e4.5.2. Program termination 98\u003c\/p\u003e \u003cp\u003e4.5.3. Determinism of program execution 100\u003c\/p\u003e \u003cp\u003e4.5.4. Big steps versus small steps 103\u003c\/p\u003e \u003cp\u003e4.6. Procedures 109\u003c\/p\u003e \u003cp\u003e4.6.1. Blocks 109\u003c\/p\u003e \u003cp\u003e4.6.2. Procedures 112\u003c\/p\u003e \u003cp\u003e4.7. Other approaches 118\u003c\/p\u003e \u003cp\u003e4.7.1. Denotational semantics 118\u003c\/p\u003e \u003cp\u003e4.7.2. Axiomatic semantics, Hoare logic 129\u003c\/p\u003e \u003cp\u003e4.8. Exercises 134\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 5. Types \u003c\/b\u003e\u003cb\u003e137\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e5.1. Type checking: when and how? 139\u003c\/p\u003e \u003cp\u003e5.1.1. When to verify types? 139\u003c\/p\u003e \u003cp\u003e5.1.2. How to verify types? 140\u003c\/p\u003e \u003cp\u003e5.2. Informal typing of a program \u003cb\u003eExp\u003c\/b\u003e\u003csub\u003e2\u003c\/sub\u003e 141\u003c\/p\u003e \u003cp\u003e5.2.1. A first example 141\u003c\/p\u003e \u003cp\u003e5.2.2. Typing a conditional expression 142\u003c\/p\u003e \u003cp\u003e5.2.3. Typing without type constraints 142\u003c\/p\u003e \u003cp\u003e5.2.4. Polymorphism 143\u003c\/p\u003e \u003cp\u003e5.3. Typing rules in \u003cb\u003eExp\u003c\/b\u003e\u003csub\u003e2\u003c\/sub\u003e 143\u003c\/p\u003e \u003cp\u003e5.3.1. Types, type schemes and typing environments 143\u003c\/p\u003e \u003cp\u003e5.3.2. Generalization, substitution and instantiation 146\u003c\/p\u003e \u003cp\u003e5.3.3. Typing rules and typing trees 151\u003c\/p\u003e \u003cp\u003e5.4. Type inference algorithm in \u003cb\u003eExp\u003c\/b\u003e\u003csub\u003e2\u003c\/sub\u003e 154\u003c\/p\u003e \u003cp\u003e5.4.1. Principal type 154\u003c\/p\u003e \u003cp\u003e5.4.2. Sets of constraints and unification 155\u003c\/p\u003e \u003cp\u003e5.4.3. Type inference algorithm 159\u003c\/p\u003e \u003cp\u003e5.5. Properties 167\u003c\/p\u003e \u003cp\u003e5.5.1. Properties of typechecking 167\u003c\/p\u003e \u003cp\u003e5.5.2. Properties of the inference algorithm 167\u003c\/p\u003e \u003cp\u003e5.6. Typechecking of imperative constructs 168\u003c\/p\u003e \u003cp\u003e5.6.1. Type algebra 168\u003c\/p\u003e \u003cp\u003e5.6.2. Typing rules 169\u003c\/p\u003e \u003cp\u003e5.6.3. Typing polymorphic definitions 171\u003c\/p\u003e \u003cp\u003e5.7. Subtyping and overloading 172\u003c\/p\u003e \u003cp\u003e5.7.1. Subtyping 173\u003c\/p\u003e \u003cp\u003e5.7.2. Overloading 175\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 6. Data Types \u003c\/b\u003e\u003cb\u003e179\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e6.1. Basic types 179\u003c\/p\u003e \u003cp\u003e6.1.1. Booleans 179\u003c\/p\u003e \u003cp\u003e6.1.2. Integers 181\u003c\/p\u003e \u003cp\u003e6.1.3. Characters 186\u003c\/p\u003e \u003cp\u003e6.1.4. Floating point numbers 187\u003c\/p\u003e \u003cp\u003e6.2. Arrays 191\u003c\/p\u003e \u003cp\u003e6.3. Strings 194\u003c\/p\u003e \u003cp\u003e6.4. Type definitions 194\u003c\/p\u003e \u003cp\u003e6.4.1. Type abbreviations 195\u003c\/p\u003e \u003cp\u003e6.4.2. Records 196\u003c\/p\u003e \u003cp\u003e6.4.3. Enumerated types 200\u003c\/p\u003e \u003cp\u003e6.4.4. Sum types 202\u003c\/p\u003e \u003cp\u003e6.5. Generalized conditional 205\u003c\/p\u003e \u003cp\u003e6.5.1. C style switch\/case 205\u003c\/p\u003e \u003cp\u003e6.5.2. Pattern matching 208\u003c\/p\u003e \u003cp\u003e6.6. Equality 216\u003c\/p\u003e \u003cp\u003e6.6.1. Physical equality 217\u003c\/p\u003e \u003cp\u003e6.6.2. Structural equality 218\u003c\/p\u003e \u003cp\u003e6.6.3. Equality between functions 220\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 7. Pointers and Memory Management \u003c\/b\u003e\u003cb\u003e223\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e7.1. Addresses and pointers 223\u003c\/p\u003e \u003cp\u003e7.2. Endianness 225\u003c\/p\u003e \u003cp\u003e7.3. Pointers and arrays 225\u003c\/p\u003e \u003cp\u003e7.4. Passing parameters by address 226\u003c\/p\u003e \u003cp\u003e7.5. References 229\u003c\/p\u003e \u003cp\u003e7.5.1. References in C++ 229\u003c\/p\u003e \u003cp\u003e7.5.2. References in Java 233\u003c\/p\u003e \u003cp\u003e7.6. Memory management 234\u003c\/p\u003e \u003cp\u003e7.6.1. Memory allocation 234\u003c\/p\u003e \u003cp\u003e7.6.2. Freeing memory 237\u003c\/p\u003e \u003cp\u003e7.6.3. Automatic memory management 239\u003c\/p\u003e \u003cp\u003e\u003cb\u003eChapter 8. Exceptions \u003c\/b\u003e\u003cb\u003e243\u003c\/b\u003e\u003c\/p\u003e \u003cp\u003e8.1. Errors: notification and propagation 243\u003c\/p\u003e \u003cp\u003e8.1.1. Global variable 245\u003c\/p\u003e \u003cp\u003e8.1.2. Record definition 245\u003c\/p\u003e \u003cp\u003e8.1.3. Passing by address 245\u003c\/p\u003e \u003cp\u003e8.1.4. Introducing exceptions 246\u003c\/p\u003e \u003cp\u003e8.2. A simple formalization: ML-style exceptions 247\u003c\/p\u003e \u003cp\u003e8.2.1. Abstract syntax 247\u003c\/p\u003e \u003cp\u003e8.2.2. Values 248\u003c\/p\u003e \u003cp\u003e8.2.3. Type algebra 248\u003c\/p\u003e \u003cp\u003e8.2.4. Operational semantics 248\u003c\/p\u003e \u003cp\u003e8.2.5. Typing 250\u003c\/p\u003e \u003cp\u003e8.3. Exceptions in other languages 250\u003c\/p\u003e \u003cp\u003e8.3.1. Exceptions in OCaml 251\u003c\/p\u003e \u003cp\u003e8.3.2. Exceptions in Python 251\u003c\/p\u003e \u003cp\u003e8.3.3. Exceptions in Java 253\u003c\/p\u003e \u003cp\u003e8.3.4. Exceptions in C++ 254\u003c\/p\u003e \u003cp\u003eConclusion 257\u003c\/p\u003e \u003cp\u003eAppendix: Solutions to the Exercises 259\u003c\/p\u003e \u003cp\u003eList of Notations 287\u003c\/p\u003e \u003cp\u003eIndex of Programs 289\u003c\/p\u003e \u003cp\u003eReferences 293\u003c\/p\u003e \u003cp\u003eIndex 295\u003c\/p\u003e\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\u003cp\u003e\u003cfont size=\"3\"\u003eSubject Areas: Electronics \u0026amp; communications engineering [\u003ca title=\"See our other books on Electronics \u0026amp; communications engineering\" href=\"https:\/\/freshlyprintedbooks.co.uk\/search?q=%22Electronics%20\u0026amp;%20communications%20engineering%20%5BTJ%5D%22\"\u003eTJ\u003c\/a\u003e]\u003c\/font\u003e\u003c\/p\u003e\r\n\r\n\r\n\u003c\/font\u003e","brand":"Wiley-ISTE","offers":[{"title":"Brand New","offer_id":52446748508440,"sku":"9781786305305","price":114.99,"currency_code":"GBP","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0730\/2037\/5320\/files\/9781786305305.jpg?v=1785112750","url":"https:\/\/freshlyprintedbooks.co.uk\/products\/concepts-and-semantics-of-programming-languages-1-a-semantical-approach-with-ocaml-and-python-hardback-9781786305305","provider":"Freshly Printed Books","version":"1.0","type":"link"}