001451456 000__ 06347cam\a2200577\i\4500 001451456 001__ 1451456 001451456 003__ OCoLC 001451456 005__ 20230310004700.0 001451456 006__ m\\\\\o\\d\\\\\\\\ 001451456 007__ cr\cn\nnnunnun 001451456 008__ 221125s2022\\\\sz\a\\\\ob\\\\001\0\eng\d 001451456 019__ $$a1351751193 001451456 020__ $$a9783031118067$$q(electronic bk.) 001451456 020__ $$a3031118065$$q(electronic bk.) 001451456 020__ $$z9783031118050 001451456 020__ $$z3031118057 001451456 0247_ $$a10.1007/978-3-031-11806-7$$2doi 001451456 035__ $$aSP(OCoLC)1351660525 001451456 040__ $$aYDX$$beng$$erda$$epn$$cYDX$$dGW5XE$$dEBLCP$$dUKAHL$$dOCLCQ 001451456 049__ $$aISEA 001451456 050_4 $$aQA76.7 001451456 08204 $$a005.13$$223/eng/20221209 001451456 1001_ $$aMogensen, Torben Æ.,$$d1960-$$eauthor.$$1https://isni.org/isni/0000000110072241 001451456 24510 $$aProgramming language design and implementation /$$cTorben Ægidius Mogensen. 001451456 264_1 $$aCham :$$bSpringer,$$c[2022] 001451456 264_4 $$c©2022 001451456 300__ $$a1 online resource (xviii, 323 pages) :$$billustrations (some color). 001451456 336__ $$atext$$btxt$$2rdacontent 001451456 337__ $$acomputer$$bc$$2rdamedia 001451456 338__ $$aonline resource$$bcr$$2rdacarrier 001451456 4901_ $$aTexts in computer science 001451456 504__ $$aIncludes bibliographical references and index. 001451456 5050_ $$aIntro -- Preface -- Do We Need New Programming Languages? -- Weak Languages -- General Design Principles -- To the Reader -- Contents -- List of Figures -- 1 A Brief History of Programming Languages -- 1.1 Before Computers: Turing Machines and Lambda Calculus -- 1.2 Programmable Electronic Computers -- 1.3 Early and Influential Programming Languages -- 1.3.1 Plankalkül -- 1.3.2 FORTRAN -- 1.3.3 LISP -- 1.3.4 COBOL -- 1.3.5 ALGOL 60 -- 1.3.6 APL -- 1.3.7 PL/I -- 1.3.8 BASIC -- 1.3.9 Simula -- 1.3.10 Pascal -- 1.3.11 C -- 1.3.12 Prolog -- 1.3.13 ISWIM and ML -- 1.4 Further Reading 001451456 5058_ $$a1.5 Exercises -- 2 Implementation Strategies -- 2.1 Compilation and Interpretation -- 2.2 REPLs and IDEs -- 2.3 Intermediate Code and Virtual Machines -- 2.4 Hybrid Methods -- 2.5 Cross Compilers, Reverse Compilers, and Obfuscation -- 2.6 Bootstrapping -- 2.6.1 Notation -- 2.6.2 Compiling Compilers -- 2.6.3 Full Bootstrap -- 2.6.4 Choosing the Language in Which to Write a Compiler -- 2.7 How Implementation Techniques can Influence Language Design -- 2.8 Further Reading -- 2.9 Exercises -- 3 Syntax -- 3.1 Lexical Elements -- 3.1.1 Character Sets -- 3.1.2 Case Sensitivity -- 3.1.3 Identifiers 001451456 5058_ $$a3.1.4 Whitespace -- 3.1.5 Comments -- 3.1.6 Reserved Symbols -- 3.1.7 Separation of Tokens -- 3.1.8 Summary -- 3.2 Grammatical Elements -- 3.2.1 Line-Based Syntax -- 3.2.2 Multi-line Syntax -- 3.2.3 Syntax that Looks Like a Natural Language -- 3.2.4 Bracketed Syntax -- 3.2.5 Prefix, Post Fix and Operator-Precedence Syntax -- 3.2.6 Context-Free Syntax -- 3.2.7 Stronger Grammar Formalisms -- 3.2.8 Other Syntactic Considerations -- 3.2.9 Bracketing Symbols -- 3.3 Concerns that Span Both Lexing and Grammar -- 3.3.1 Macros -- 3.3.2 Visual Languages -- 3.4 Considerations When Designing Syntax 001451456 5058_ $$a3.5 Further Reading -- 3.6 Exercises -- 4 Memory Management -- 4.1 Introduction -- 4.2 Static Allocation -- 4.2.1 Limitations -- 4.3 Stack Allocation -- 4.4 Heap Allocation -- 4.5 Manual Memory Management -- 4.5.1 A Simple Implementation of malloc() and free() -- 4.5.2 Joining Freed Blocks -- 4.5.3 Sorting by Block Size -- 4.5.4 Large Objects -- 4.5.5 Summary of Manual Memory Management -- 4.6 Automatic Memory Management -- 4.7 Reference Counting -- 4.8 Tracing Garbage Collectors -- 4.8.1 Mark-Sweep Collection -- 4.8.2 Two-Space Collection -- 4.8.3 Generational and Concurrent Collectors 001451456 5058_ $$a4.9 Summary of Automatic Memory Management -- 4.10 Memory Management and Language Design -- 4.11 Further Reading -- 4.12 Exercises -- 5 Scopes, Functions, and Parameter Passing -- 5.1 Scope Rules -- 5.1.1 Global Scoping -- 5.1.2 Local Variables Only -- 5.1.3 Block Structure -- 5.1.4 Nested Function Declarations -- 5.1.5 Recursion -- 5.1.6 Macros -- 5.1.7 Parameter-Passing Methods -- 5.2 Implementing Functions and Function Calls -- 5.2.1 Summary of Implementing Function Calls -- 5.2.2 C-Style Functions -- 5.2.3 Nested Function Declarations -- 5.3 Functions as Parameters 001451456 506__ $$aAccess limited to authorized users. 001451456 520__ $$aThis concise textbook is intended as a guide for programming-language designers and users to better help them understand consequences of design decisions. The text aims to provide readers with an overview of the design space for programming languages and how design choices affect implementation. It is not a classical compilers book, as it assumes the reader is familiar with basic compiler implementation techniques; nor is it a traditional comparative programming languages book, because it does not go into depth about any particular language, instead taking examples from a wide variety of programming languages to illustrate design concepts. Readers are assumed to already have done at least a bit of programming in functional, imperative, and object-oriented languages. Topics and features: Provides topic-by-topic coverage of syntax, types, scopes, memory management and more Includes many technical exercises and discussion exercises Inspires readers to think about language design choices, how these interact, and how they can be implemented Covers advanced topics such as formal semantics and limits of computation Suitable for advanced undergraduates and beginning graduates, this highly practical and useful textbook/guide will also offer programming language professionals a superb reference and learning toolkit. Torben gidius Mogensen is Associate Professor at the Dept. of Computer Science at the University of Copenhagen, Denmark. . 001451456 588__ $$aOnline resource; title from PDF title page (SpringerLink, viewed December 9, 2022). 001451456 650_0 $$aProgramming languages (Electronic computers) 001451456 650_0 $$aComputer programming. 001451456 655_0 $$aElectronic books. 001451456 77608 $$iPrint version: $$z3031118057$$z9783031118050$$w(OCoLC)1331704550 001451456 830_0 $$aTexts in computer science. 001451456 852__ $$bebk 001451456 85640 $$3Springer Nature$$uhttps://univsouthin.idm.oclc.org/login?url=https://link.springer.com/10.1007/978-3-031-11806-7$$zOnline Access$$91397441.1 001451456 909CO $$ooai:library.usi.edu:1451456$$pGLOBAL_SET 001451456 980__ $$aBIB 001451456 980__ $$aEBOOK 001451456 982__ $$aEbook 001451456 983__ $$aOnline 001451456 994__ $$a92$$bISE