Programming language design and implementation / Torben Ægidius Mogensen.

This 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...

Full description

Saved in:
Bibliographic Details
Main Author: Mogensen, Torben Æ., 1960- (Author)
Format: eBook
Language:English
Published: Cham : Springer, [2022]
Series:Texts in computer science.
Subjects:
Online Access:Click for online access

MARC

LEADER 00000cam a2200000 i 4500
001 on1351660525
003 OCoLC
005 20241006213017.0
006 m o d
007 cr cnu|||unuuu
008 221125s2022 sz a ob 001 0 eng d
040 |a YDX  |b eng  |e rda  |e pn  |c YDX  |d GW5XE  |d EBLCP  |d UKAHL  |d OCLCQ  |d OCLCO  |d OCLCL 
019 |a 1351751193 
020 |a 9783031118067  |q (electronic bk.) 
020 |a 3031118065  |q (electronic bk.) 
020 |z 9783031118050 
020 |z 3031118057 
024 7 |a 10.1007/978-3-031-11806-7  |2 doi 
035 |a (OCoLC)1351660525  |z (OCoLC)1351751193 
050 4 |a QA76.7 
072 7 |a UMX  |2 bicssc 
072 7 |a COM000000  |2 bisacsh 
072 7 |a UMX  |2 thema 
049 |a HCDD 
100 1 |a Mogensen, Torben Æ.,  |d 1960-  |e author.  |1 https://id.oclc.org/worldcat/entity/E39PBJbMd7XDkQgRGQvf6mpdcP  |1 https://isni.org/isni/0000000110072241 
245 1 0 |a Programming language design and implementation /  |c Torben Ægidius Mogensen. 
264 1 |a Cham :  |b Springer,  |c [2022] 
264 4 |c ©2022 
300 |a 1 online resource (xviii, 323 pages) :  |b illustrations (some color). 
336 |a text  |b txt  |2 rdacontent 
337 |a computer  |b c  |2 rdamedia 
338 |a online resource  |b cr  |2 rdacarrier 
490 1 |a Texts in computer science 
504 |a Includes bibliographical references and index. 
520 |a This 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. . 
588 0 |a Online resource; title from PDF title page (SpringerLink, viewed December 9, 2022). 
505 0 |a Intro -- 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 
505 8 |a 1.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 
505 8 |a 3.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 
505 8 |a 3.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 
505 8 |a 4.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 
650 0 |a Programming languages (Electronic computers) 
650 0 |a Computer programming. 
650 7 |a computer programming.  |2 aat 
650 7 |a Computer programming  |2 fast 
650 7 |a Programming languages (Electronic computers)  |2 fast 
776 0 8 |c Original  |z 3031118057  |z 9783031118050  |w (OCoLC)1331704550 
830 0 |a Texts in computer science. 
856 4 0 |u https://holycross.idm.oclc.org/login?auth=cas&url=https://link.springer.com/10.1007/978-3-031-11806-7  |y Click for online access 
903 |a SPRING-COMP2022 
994 |a 92  |b HCD