Ulteriori informazioni
Informationen zum Autor David Watt is a Professor of Computing Science at Glasgow University. His research interests include the design, specification, and implementation of programming languages, and he has published several books on the topic. He has many years of teaching experience on this and other programming subjects. Klappentext Explains the concepts underlying programming languages, and demonstrates how these concepts are synthesized in the major paradigms: imperative, OO, concurrent, functional, logic and with recent scripting languages. It gives greatest prominence to the OO paradigm.* Includes numerous examples using C, Java and C++ as exmplar languages* Additional case-study languages: Python, Haskell, Prolog and Ada* Extensive end-of-chapter exercises with sample solutions on the companion Web site* Deepens study by examining the motivation of programming languages not just their features Zusammenfassung Explains the concepts underlying programming languages, and demonstrates how these concepts are synthesized in the major paradigms: imperative, OO, concurrent, functional, logic and with recent scripting languages. It gives greatest prominence to the OO paradigm.* Includes numerous examples using C, Java and C++ as exmplar languages* Additional case-study languages: Python, Haskell, Prolog and Ada* Extensive end-of-chapter exercises with sample solutions on the companion Web site* Deepens study by examining the motivation of programming languages not just their features Inhaltsverzeichnis Preface. PART I: INTRODUCTION. 1. Programming Languages. 1.1 Programming linguistics. 1.1.1 Concepts and paradigms. 1.1.2 Syntax, semantics, and pragmatics. 1.1.3 Language processors. 1.2 Historical development. Summary. Further reading. Exercises. PART II: BASIC CONCEPTS 2. Values and Types. 2.1 Types. 2.2 Primitive types. 2.2.1 Built-in primitive types. 2.2.2 Defined primitive types. 2.2.3 Discrete primitive types. 2.3 Composite types. 2.3.1 Cartesian products, structures, and records. 2.3.2 Mappings, arrays, and functions. 2.3.3 Disjoint unions, discriminated records, and objects. 2.4 Recursive types. 2.4.1 Lists. 2.4.2 Strings. 2.4.3 Recursive types in general. 2.5 Type systems. 2.5.1 Static vs dynamic typing. 2.5.2 Type equivalence. 2.5.3 The Type Completeness Principle. 2.6 Expressions. 2.6.1 Literals. 2. 6.2 Constructions. 2.6.3 Function calls. 2.6.4 Conditional expressions. 2.6.5 Iterative expressions. 2.6.6 Constant and variable accesses. 2.7 Implementation notes. 2.7.1 Representation of primitive types. 2.7.2 Representation of Cartesian products. 2.7.3 Representation of arrays. 2.7.4 Representation of disjoint unions. 2.7.5 Representation of recursive types. Summary. Further reading. Exercises. 3. Variables and Storage. 3.1 Variables and storage. 3.2 Simple variables. 3.3 Composite variables. 3.3.1 Total vs selective update. 3.3.2 Static vs dynamic vs flexible arrays. 3.4 Copy semantics vs reference semantics. 3.5 Lifetime. 3.5.1 Global and local variables. 3.5.2 Heap variables. 3.5.3 Persistent variables. 3.6 Pointers. 3.6.1 Pointers and recursive types. 3.6.2 Dangling pointers. 3.7 Commands. 3.7.1 Skips. 3.7.2 Assignments. 3.7.3 Procedure calls. 3.7.4 Sequential commands. 3.7.5 Collateral commands. 3.7.6 Conditional commands. 3.7.7 Iterative commands. 3.8 Expressions with side effects. 3.8.1 Command expressions. 3.8.2 Expression-oriented languages. 3.9 Implementation notes...