ACM SIGPLAN Notices
I-structures: data structures for parallel computing
ACM Transactions on Programming Languages and Systems (TOPLAS)
The essence of functional programming
POPL '92 Proceedings of the 19th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Imperative functional programming
POPL '93 Proceedings of the 20th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
PLDI '94 Proceedings of the ACM SIGPLAN 1994 conference on Programming language design and implementation
Functional programming and input/output
Functional programming and input/output
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Region-based memory management
Information and Computation
Typed memory management in a calculus of capabilities
Proceedings of the 26th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Enforcing high-level protocols in low-level software
Proceedings of the ACM SIGPLAN 2001 conference on Programming language design and implementation
The Definition of Standard ML
Functional Programming and Parallel Graph Rewriting
Functional Programming and Parallel Graph Rewriting
On Implementations and Semantics of a Concurrent Programming Language
CONCUR '97 Proceedings of the 8th International Conference on Concurrency Theory
Proving Correctness of Programs with IO - A Paradigm Comparison
IFL '02 Selected Papers from the 13th International Workshop on Implementation of Functional Languages
Theorem Proving for Functional Programmers
IFL '02 Selected Papers from the 13th International Workshop on Implementation of Functional Languages
Composable memory transactions
Proceedings of the tenth ACM SIGPLAN symposium on Principles and practice of parallel programming
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
A principled approach to operating system construction in Haskell
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
Proving make correct: I/O proofs in Haskell and clean
IFL'02 Proceedings of the 14th international conference on Implementation of functional languages
Checking interference with fractional permissions
SAS'03 Proceedings of the 10th international conference on Static analysis
Reasoning about deterministic concurrent functional i/o
IFL'04 Proceedings of the 16th international conference on Implementation and Application of Functional Languages
Asynchronous Exceptions as an Effect
MPC '08 Proceedings of the 9th international conference on Mathematics of Program Construction
Reasoning about i/o in functional programs
CEFP'11 Proceedings of the 4th Summer School conference on Central European Functional Programming School
Hi-index | 0.00 |
The problem of expressing I/O and side effects in functional languages is a well-established one. This paper addresses this problem from a general semantic viewpoint by giving a unified framework for describing shared state, I/O and deterministic concurrency. We develop a modified state transformer which lets us mathematically model the API, then investigate and machine verify some broad conditions under which confluence holds. This semantics is used as the basis for a small deterministic Haskell language extension called CURIO, which enforces determinism using runtime checks.Our confluence condition is first shown to hold for a variety of small components, such as individual shared variables, 1-to-1 communication channels, and I-structures. We then show how models of substantial APIs (like a modification of Haskell's file I/O API which permits inter-process communication) may be constructed from these smaller components using "combinators" in such a way that determinism is always preserved. We describe combinators for product, name-indexing and dynamic allocation, the last of which requires some small extensions to cater for process locality.