A practical method for LR and LL syntactic error diagnosis and recovery
ACM Transactions on Programming Languages and Systems (TOPLAS)
The theory and practice of first-class prompts
POPL '88 Proceedings of the 15th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Control delimiters and their hierarchies
Lisp and Symbolic Computation
LFP '90 Proceedings of the 1990 ACM conference on LISP and functional programming
Ambitious evaluation: a new reading of an old issue
ACM SIGPLAN Lisp Pointers
Safe-for-Space Threads in Standard ML
Higher-Order and Symbolic Computation
Journal of Functional Programming
Searching for type-error messages
Proceedings of the 2007 ACM SIGPLAN conference on Programming language design and implementation
Functional pearl: the great escape or, how to jump the border without getting caught
ICFP '07 Proceedings of the 12th ACM SIGPLAN international conference on Functional programming
Proceedings of the 5th ACM SIGPLAN workshop on Types in language design and implementation
A true higher-order module system
A true higher-order module system
Hi-index | 0.00 |
We present a technique, based on the use of first-class control operators, enabling programs to maintain and invoke rollback logs for sequences of reversible effects. Our technique is modular, in that it provides complete separation between some library of effectful operations, and a client, "driver" program which invokes and rolls back sequences of these operations. In particular, the checkpoint mechanism, which is entirely encapsulated within the effect library, logs not only the library's effects, but also the client's control state. Thus, logging and rollback can be almost completely transparent to the client code. This separation of concerns manifests itself nicely when we must implement software with sophisticated error handling. We illustrate with two examples that exploit the architecture to disentangle some core parsing task from its error management. The parser code is completely separate from the error-correction code, although the two components are deeply intertwined at run time.