skip to main content
Skip header Section
Programming language pragmaticsJanuary 2000
Publisher:
  • Morgan Kaufmann Publishers Inc.
  • 340 Pine Street, Sixth Floor
  • San Francisco
  • CA
  • United States
ISBN:978-1-55860-442-1
Published:01 January 2000
Pages:
856
Skip Bibliometrics Section
Bibliometrics
Abstract

No abstract available.

Cited By

  1. ACM
    Patton N, Rahmani K, Missula M, Biswas J and Dillig I (2024). Programming-by-Demonstration for Long-Horizon Robot Tasks, Proceedings of the ACM on Programming Languages, 8:POPL, (512-545), Online publication date: 5-Jan-2024.
  2. Roy S A Theorem Proving Approach to Programming Language Semantics Proceedings of the 45th International Conference on Software Engineering: Software Engineering Education and Training, (153-165)
  3. Czerniejewski A, Burns J, Ghanei F, Dantu K, Liu Y and Ziarek L JCopter: Reliable UAV Software Through Managed Languages 2021 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS), (4282-4289)
  4. ACM
    Morazán M How to make while loops iterative Proceedings of the 9th Computer Science Education Research Conference, (1-12)
  5. Mirzendehdel A, Behandish M and Nelaturi S (2019). Exploring feasible design spaces for heterogeneous constraints, Computer-Aided Design, 115:C, (323-347), Online publication date: 1-Oct-2019.
  6. Medeiros F, Lima G, Amaral G, Apel S, Kästner C, Ribeiro M and Gheyi R (2019). An investigation of misunderstanding code patterns in C open-source software projects, Empirical Software Engineering, 24:4, (1693-1726), Online publication date: 1-Aug-2019.
  7. ACM
    Garrido J Improving Software Development for Embedded Systems Proceedings of the SouthEast Conference, (231-234)
  8. Healy C (2015). The parse machine, Journal of Computing Sciences in Colleges, 31:2, (219-226), Online publication date: 1-Dec-2015.
  9. Carr S (2014). A programming languages course emphasizing interpreters and object-oriented design, Journal of Computing Sciences in Colleges, 30:1, (52-60), Online publication date: 1-Oct-2014.
  10. ACM
    Cook W On understanding data abstraction, revisited Proceedings of the 24th ACM SIGPLAN conference on Object oriented programming systems languages and applications, (557-572)
  11. ACM
    Cook W (2009). On understanding data abstraction, revisited, ACM SIGPLAN Notices, 44:10, (557-572), Online publication date: 25-Oct-2009.
  12. Criswell J, Geoffray N and Adve V Memory safety for low-level software/hardware interactions Proceedings of the 18th conference on USENIX security symposium, (83-100)
  13. ACM
    Tsui F, Wang A and Qian K (2009). A discussion on security typing and measurement for SOA, ACM SIGSOFT Software Engineering Notes, 34:3, (1-5), Online publication date: 30-May-2009.
  14. ACM
    Cook W (2008). High-level problems in teaching undergraduate programming languages, ACM SIGPLAN Notices, 43:11, (55-58), Online publication date: 30-Nov-2008.
  15. Jones C Understanding programming language concepts via operational semantics Domain modeling and the duration calculus, (177-235)
  16. ACM
    Ryder B, Soffa M and Burnett M (2005). The impact of software engineering research on modern programming languages, ACM Transactions on Software Engineering and Methodology, 14:4, (431-477), Online publication date: 1-Oct-2005.
  17. Fu C, Milanova A, Ryder B and Wonnacott D (2005). Robustness Testing of Java Server Applications, IEEE Transactions on Software Engineering, 31:4, (292-311), Online publication date: 1-Apr-2005.
  18. Hawkins W and Healy C (2004). Introducing practical applications into a computational theory class, Journal of Computing Sciences in Colleges, 20:2, (219-225), Online publication date: 1-Dec-2004.
  19. ACM
    Fu C, Ryder B, Milanova A and Wonnacott D Testing of java web services for robustness Proceedings of the 2004 ACM SIGSOFT international symposium on Software testing and analysis, (23-34)
  20. ACM
    Fu C, Ryder B, Milanova A and Wonnacott D (2004). Testing of java web services for robustness, ACM SIGSOFT Software Engineering Notes, 29:4, (23-34), Online publication date: 1-Jul-2004.
  21. Berger M, Bouzid M, Buckland M, Lee H, Lhuillier N, Olpp D, Picault J and Shepherdson J (2003). An Approach to Agent-Based Service Composition and Its Application to Mobile Business Processes, IEEE Transactions on Mobile Computing, 2:3, (197-206), Online publication date: 1-Jul-2003.
  22. ACM
    Pike S Encapsulating concurrency with Early-Reply Companion of the 17th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, (18-19)
  23. Haile J (2002). A flexible parsing engine for Lindenmayer systems, Journal of Computing Sciences in Colleges, 17:6, (263-265), Online publication date: 1-May-2002.
  24. Crole R Introduction Algebraic and coalgebraic methods in the mathematics of program construction, (1-19)
  25. ACM
    Hanson D and Proebsting T Dynamic variables Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation, (264-273)
  26. ACM
    Hanson D and Proebsting T (2001). Dynamic variables, ACM SIGPLAN Notices, 36:5, (264-273), Online publication date: 1-May-2001.
Contributors
  • University of Rochester

Recommendations

Reviews

Hans J. Schneider

Scott explains how programming languages work. He considers high-level constructs as well as implementation aspects, including some compiling techniques and assembly-level architecture, and does not avoid theoretical background. Chapter 1 is an introduction, mainly restricted to stating the problem and emphasizing the need for studying this field. Chapter 2 introduces the principal techniques used to formally define syntax and briefly reviews scanner and parser techniques. Chapters 3 (on names), 6 (on control flow), 7 (on types), 8 (on subroutines), and 10 (on objects) cover the fundamental issues of imperative languages. Chapter 3 is concerned with scope rules and binding. It discusses the difference between visibility and lifetime, the overloading of identifiers, and the referential environment, as well as storage management techniques and the structure of symbol tables. Chapter 6 surveys the principles of control flow: sequencing, selection, iteration, recursion (including applicative-order versus normal-order evaluation), and nondeterminacy. The author points out the evolution of control constructs, driven by semantic clarity and program safety. (Unfortunately, the instructive table comparing the precedence rules of different languages does not contain the comparisons in the Pascal column, and in the C++ column, the first line is wrong.) Chapter 7 considers data types. Before reviewing records, arrays, pointers, lists, and such, the author introduces the general concept of a type system and discusses type equivalence, coercion, and type inference. Therefore, the reader comes to know the principles of the sophisticated type system of ML before seeing the traditional arrays of Fortran. The implementation-oriented sections of this chapter are concerned with storing arrays and recursive data structures, and with garbage collection. Calling sequences, different modes of parameter passing, and the influence of subroutines on the runtime stack are extensively examined in the following chapter. Further topics included in chapter 8 are the design and implementation of generic subroutines, coroutines (including iterators), and exception handling, very nicely illustrated by the phrase-level recovery in a recursive-descent parser. Chapter 10 describes the step from data abstraction to object-oriented programming. First, the author identifies the characteristic concepts: encapsulation, inheritance, and dynamic method binding. Furthermore, special attention is given to the implementation of virtual methods and of single as well as multiple inheritance, including how to translate method binding in both cases. The fourth chapter discusses semantic analysis using attributed context-free grammars to decorate parse trees or syntax trees. Whereas this chapter affects intermediate-code level, the next proceeds to assembly-level architecture. Scott begins this discussion with an overview of a simple workstation, then considers the hierarchical organization of memory, the formats of data, and the instructions used to manipulate them. Particular emphasis is given to the hardware aspects influencing the compiler, such as the differences between CISC and RISC machines, pipelining, and register structure. Chapter 9 turns to the back end of the compiler and is concerned with intermediate code generation (DIANA, RTL), some aspects of machine-independent code improvement, target-code generation, register allocation, and instruction scheduling. Address space organization leads to a discussion of the task of a linker. Finally, chapter 13 takes a look at code improvement as a whole. It starts with a more detailed view of the compiler structure, illustrating at which stage different optimization techniques may be applied. The author addresses local and global redundancy elimination, loop improvement, and peephole optimization. Chapter 11 focuses on functional and logic programming languages. Discussion of Scheme as a representative of a functional language addresses first-class and higher-order functions, polymorphism, evaluation order, and support for list-based data. Prolog is considered in the logic programming section, along with a deeper discussion of unification and of the problems of control flow. Concurrency is treated in chapter 12, presenting communication and synchronization primitives such as semaphores, monitors, conditional critical regions, message parsing, and remote procedure call. Overall, this book fulfills its purpose of introducing both the design and implementation of programming languages in an undergraduate course. In a traditional course on programming languages, some chapters may be omitted. On the other hand, the book encourages students to take additional courses in such areas as formal semantics and compiler construction. Some of the chapters contain special sections on theoretical foundations. Each chapter is bracketed by an introduction and summary that link the material to the overall context. Bibliographic notes refer to historical material as well as to introductions to the state of the art. Many review questions and exercises are included.

Access critical reviews of Computing literature here

Become a reviewer for Computing Reviews.