A compositional analysis of evaluation-order and its application
LFP '90 Proceedings of the 1990 ACM conference on LISP and functional programming
Handbook of theoretical computer science (vol. B)
The essence of functional programming
POPL '92 Proceedings of the 19th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Path analysis and the optimization of nonstrict functional languages
ACM Transactions on Programming Languages and Systems (TOPLAS)
Monad transformers and modular interpreters
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Semantic Lego
Control flow semantics
A case study in specifying the semantics of a programming language
POPL '80 Proceedings of the 7th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A case study in specifying the semantics of a programming language
POPL '80 Proceedings of the 7th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
A logic for expressions with side-effects
POPL '82 Proceedings of the 9th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Inference Rules for Programming Languages with Side Effects in Expressions
TPHOLs '96 Proceedings of the 9th International Conference on Theorem Proving in Higher Order Logics
The Semantics of the C Programming Language
CSL '92 Selected Papers from the Workshop on Computer Science Logic
Modular monadic semantics and compilation
Modular monadic semantics and compilation
Continuations for parallel logic programming
Proceedings of the 2nd ACM SIGPLAN international conference on Principles and practice of declarative programming
A coinductive calculus for asynchronous side-effecting processes
FCT'11 Proceedings of the 18th international conference on Fundamentals of computation theory
An executable formal semantics of C with applications
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Axiomatic constructor classes in Isabelle/HOLCF
TPHOLs'05 Proceedings of the 18th international conference on Theorem Proving in Higher Order Logics
AMAST'06 Proceedings of the 11th international conference on Algebraic Methodology and Software Technology
A coinductive calculus for asynchronous side-effecting processes
Information and Computation
Hi-index | 0.00 |
The presence of side effects in even a very simple language of expressions gives rise to a number of semantic questions. The issue of evaluation order becomes a crucial one and, unless a specific order is enforced, the language becomes non-deterministic. In this paper we study the denotational semantics of such a language under a variety of possible evaluation strategies, from simpler to more complex, concluding with unspecified evaluation order, unspecified order of side effects and the mechanism of sequence points that is particular to the ANSI C programming language. In doing so, we adopt a dialect of Haskell as a metalanguage, instead of mathematical notation, and use monads and monad transformers to improve modularity. In this way, only small modifications are required for each transition. The result is a better understanding of different evaluation strategies and a unified way of specifying their semantics. Furthermore, a significant step is achieved towards a complete and accurate semantics for ANSI C.