skip to main content
Skip header Section
Theories of programming languagesJune 1999
Publisher:
  • Cambridge University Press
  • 40 W. 20 St. New York, NY
  • United States
ISBN:978-0-521-59414-1
Published:01 June 1999
Pages:
500
Skip Bibliometrics Section
Reflects downloads up to 01 Jan 2025Bibliometrics
Abstract

No abstract available.

Cited By

  1. ACM
    Economou D, Krishnaswami N and Dunfield J (2023). Focusing on Refinement Typing, ACM Transactions on Programming Languages and Systems, 45:4, (1-62), Online publication date: 31-Dec-2024.
  2. ACM
    Colaço J, Mendler M, Pauget B and Pouzet M (2023). A Constructive State-based Semantics and Interpreter for a Synchronous Data-flow Language with State Machines, ACM Transactions on Embedded Computing Systems, 22:5s, (1-26), Online publication date: 31-Oct-2023.
  3. ACM
    Bohrer R Centering Humans in the Programming Languages Classroom: Building a Text for the Next Generation Proceedings of the 2023 ACM SIGPLAN International Symposium on SPLASH-E, (26-37)
  4. ACM
    Sieczkowski F, Pyzik M and Biernacki D (2023). A General Fine-Grained Reduction Theory for Effect Handlers, Proceedings of the ACM on Programming Languages, 7:ICFP, (511-540), Online publication date: 30-Aug-2023.
  5. 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)
  6. Li X, Zhang Q, Wang G, Shi Z and Guan Y (2023). A unified proof technique for verifying program correctness with big-step semantics, Journal of Systems Architecture: the EUROMICRO Journal, 136:C, Online publication date: 1-Mar-2023.
  7. Kavanagh R (2022). Fairness and communication-based semantics for session-typed languages, Information and Computation, 285:PB, Online publication date: 1-May-2022.
  8. ACM
    Lara J, Guerra E and Kienzle J (2021). Facet-oriented Modelling, ACM Transactions on Software Engineering and Methodology, 30:3, (1-59), Online publication date: 31-Jul-2021.
  9. ACM
    Llopard I, Fabre C and Cohen A (2017). From a Formalized Parallel Action Language to Its Efficient Code Generation, ACM Transactions on Embedded Computing Systems, 16:2, (1-28), Online publication date: 31-May-2017.
  10. Rodríguez L An Intrinsic Denotational Semantics for a Lazy Functional Language Proceedings of the 19th Brazilian Symposium on Programming Languages - Volume 9325, (75-80)
  11. ACM
    Gu R, Koenig J, Ramananandro T, Shao Z, Wu X, Weng S, Zhang H and Guo Y (2015). Deep Specifications and Certified Abstraction Layers, ACM SIGPLAN Notices, 50:1, (595-608), Online publication date: 11-May-2015.
  12. ACM
    Melliès P and Zeilberger N (2015). Functors are Type Refinement Systems, ACM SIGPLAN Notices, 50:1, (3-16), Online publication date: 11-May-2015.
  13. ACM
    Gu R, Koenig J, Ramananandro T, Shao Z, Wu X, Weng S, Zhang H and Guo Y Deep Specifications and Certified Abstraction Layers Proceedings of the 42nd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, (595-608)
  14. ACM
    Melliès P and Zeilberger N Functors are Type Refinement Systems Proceedings of the 42nd Annual ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, (3-16)
  15. Angelis E, Fioravanti F, Pettorossi A and Proietti M Verifying Array Programs by Transforming Verification Conditions Proceedings of the 15th International Conference on Verification, Model Checking, and Abstract Interpretation - Volume 8318, (182-202)
  16. Goncharov S and Schroder L A Relatively Complete Generic Hoare Logic for Order-Enriched Effects Proceedings of the 2013 28th Annual ACM/IEEE Symposium on Logic in Computer Science, (273-282)
  17. ACM
    Banerjee A and Naumann D (2013). Local Reasoning for Global Invariants, Part II, Journal of the ACM (JACM), 60:3, (1-73), Online publication date: 1-Jun-2013.
  18. ACM
    Danner N, Paykin J and Royer J A static cost analysis for a higher-order language Proceedings of the 7th workshop on Programming languages meets program verification, (25-34)
  19. Habermaier A and Knapp A On the correctness of the SIMT execution model of GPUs Proceedings of the 21st European conference on Programming Languages and Systems, (316-335)
  20. Agut D, van Beek B, Beohar H, Cuijpers P and Fonteijn J The hierarchical compositional interchange format Proceedings of the 9th international conference on Formal Methods for Components and Objects, (316-335)
  21. Van Beek D, Cuijpers P, Markovski J, Agut D and Rooda J Reconciling urgency and variable abstraction in a hybrid compositional setting Proceedings of the 8th international conference on Formal modeling and analysis of timed systems, (47-61)
  22. Dougherty D and Liquori L Logic and computation in a lambda calculus with intersection and union types Proceedings of the 16th international conference on Logic for programming, artificial intelligence, and reasoning, (173-191)
  23. Arkoudas K and Bringsjord S (2009). Vivid, Artificial Intelligence, 173:15, (1367-1405), Online publication date: 1-Oct-2009.
  24. ACM
    Crolard T, Polonowski E and Valarcher P (2009). Extending the loop language with higher-order procedural variables, ACM Transactions on Computational Logic (TOCL), 10:4, (1-37), Online publication date: 1-Aug-2009.
  25. Danvy O and Millikin K (2009). Refunctionalization at work, Science of Computer Programming, 74:8, (534-549), Online publication date: 1-Jun-2009.
  26. Heath L and Sioson A (2009). Semantics of Multimodal Network Models, IEEE/ACM Transactions on Computational Biology and Bioinformatics (TCBB), 6:2, (271-280), Online publication date: 1-Apr-2009.
  27. ACM
    Morris J and Tyrrell M (2008). Dually nondeterministic functions, ACM Transactions on Programming Languages and Systems (TOPLAS), 30:6, (1-34), Online publication date: 1-Oct-2008.
  28. Jeffrey A and Rathke J (2008). Full abstraction for polymorphic π-calculus, Theoretical Computer Science, 390:2-3, (171-196), Online publication date: 20-Jan-2008.
  29. Arkoudas K and Bringsjord S (2007). Computers, Justification, and Mathematical Knowledge, Minds and Machines, 17:2, (185-202), Online publication date: 1-Jul-2007.
  30. Hyland M, Levy P, Plotkin G and Power J (2007). Combining algebraic effects with continuations, Theoretical Computer Science, 375:1-3, (20-40), Online publication date: 20-Apr-2007.
  31. Bohnenkamp H, D'Argenio P, Hermanns H and Katoen J (2006). MODEST, IEEE Transactions on Software Engineering, 32:10, (812-830), Online publication date: 1-Oct-2006.
  32. Jones C (2006). Reasoning About Partial Functions in the Formal Development of Programs, Electronic Notes in Theoretical Computer Science (ENTCS), 145, (3-25), Online publication date: 1-Jan-2006.
  33. Gibbons J and Hutton G (2019). Proof Methods for Corecursive Programs, Fundamenta Informaticae, 66:4, (353-366), Online publication date: 1-Dec-2005.
  34. ACM
    Oancea C and Watt S Parametric polymorphism for software component architectures Proceedings of the 20th annual ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications, (147-166)
  35. ACM
    Oancea C and Watt S (2019). Parametric polymorphism for software component architectures, ACM SIGPLAN Notices, 40:10, (147-166), Online publication date: 12-Oct-2005.
  36. Johann P (2005). On proving the correctness of program transformations based on free theorems for higher-order polymorphic calculi, Mathematical Structures in Computer Science, 15:2, (201-229), Online publication date: 1-Apr-2005.
  37. Gibbons J and Hutton G (2019). Proof Methods for Corecursive Programs, Fundamenta Informaticae, 66:4, (353-366), Online publication date: 1-Jan-2005.
  38. Kossatchev A, Kutter P and Posypkin M (2019). Automated Generation of Strictly Conforming Tests Based on Formal Specification of Dynamic Semantics of the Programming Language, Programming and Computing Software, 30:4, (218-229), Online publication date: 1-Jul-2004.
  39. Ghica D and McCusker G (2003). The regular-language semantics of second-order idealized ALGOL, Theoretical Computer Science, 309:1, (469-502), Online publication date: 2-Dec-2003.
  40. Reynolds J What do types mean? Programming methodology, (309-327)
  41. Reynolds J (1998). Definitional Interpreters Revisited, Higher-Order and Symbolic Computation, 11:4, (355-361), Online publication date: 1-Dec-1998.
Contributors
  • Carnegie Mellon University

Reviews

Hans J. Schneider

Reynolds presents a broad but unified treatment of the basic principles of programming languages. He convincingly elaborates the idea that a relatively small number of concepts suffice to describe a diversity of languages and to reveal the principles of their design. The concepts discussed include compositional semantics, binding structure, domains, transition systems, and inference rules. The first four chapters introduce most of the basic concepts and apply them to a simple imperative language that is built out of assignment, sequential composition, alternatives, while loops, and variable declarations. Abstract syntax and denotational semantics are given in detail. Then, inference rules to prove both partial and total correctness of programs are introduced using Hoare's notation. Finally, arrays are added to the language. Chapters 5 through 9 augment this simple language step by step. First, failure and input/output commands are considered. The formal treatment of these commands leads to continuation semantics. Transition semantics as devised by Plotkin is introduced both as an alternative approach used to describe semantics formally and as a groundwork for the study of nondeterminism and concurrency. In this context, Reynolds treats guarded commands, presenting Dijkstra's weakest preconditions, shared variable concurrency, and message passing. He also discusses fairness and deadlocks in these contexts. The next five chapters are concerned with untyped functional languages. This part of the book starts with a concise presentation of the lambda calculus, including its semantics and different evaluation strategies. Then a functional language with eager evaluation is formally treated; it permits patterns to generalize the binding occurrences of variables. The next chapter defines a continuation semantics for this language, then considers continuations as values and illustrates how to use them as a programming technique. The author completes the discussion of untyped languages by considering normal-order evaluation. Chapters 15 through 18 introduce a type system for a purely functional language. Type inference rules as well as explicit typing, and extrinsic semantics as well as intrinsic are discussed. Reynolds completes the treatment of types with a concise presentation of subtyping, generic operators, polymorphism, and abstract types. He takes the view that the type of a module is in fact its formal specification. Chapters 13 and 19 are concerned with combining functional and imperative concepts. Chapter 13 adds assignment and state changes to a functional language that uses eager evaluation in an Iswim-like style following Landin's approach, whereas chapter 19 considers Algol-like languages that are based on normal-order evaluation, reflecting Algol's copy rule. The book provides a self-contained introduction to the formal treatment of programming languages for graduate students. It is clearly structured, and in the preface, the author defines some sequences of chapters and sections that may be omitted without impeding an understanding of the remaining text. Although the large amount of formal material requires some time to read, the presentation is clear, and the typesetting often helps the reader to understand the structure of the formulas. Each chapter contains valuable exercises and profound bibliographic notes that can serve as a starting point for further reading. I shall use this excellent textbook in my lectures.

Access critical reviews of Computing literature here

Become a reviewer for Computing Reviews.

Recommendations