ML for the working programmer (2nd ed.)
ML for the working programmer (2nd ed.)
Units: cool modules for HOT languages
PLDI '98 Proceedings of the ACM SIGPLAN 1998 conference on Programming language design and implementation
Compiling standard ML to Java bytecodes
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
A type system for object initialization in the Java bytecode language
ACM Transactions on Programming Languages and Systems (TOPLAS)
FranTk - a declarative GUI language for Haskell
ICFP '00 Proceedings of the fifth ACM SIGPLAN international conference on Functional programming
Declarative event-oriented programming
Proceedings of the 2nd ACM SIGPLAN international conference on Principles and practice of declarative programming
Recursive structures for standard ML
Proceedings of the sixth ACM SIGPLAN international conference on Functional programming
A Theory of Objects
Proceedings of the 2002 ACM SIGPLAN workshop on Haskell
Mixin Modules in a Call-by-Value Setting
ESOP '02 Proceedings of the 11th European Symposium on Programming Languages and Systems
Compilation of extended recursion in call-by-value functional languages
Proceedings of the 5th ACM SIGPLAN international conference on Principles and practice of declaritive programming
A type system for well-founded recursion
Proceedings of the 31st ACM SIGPLAN-SIGACT symposium on Principles of programming languages
The recursive record semantics of objects revisited
Journal of Functional Programming
FUNCTIONAL PEARL Pickler combinators
Journal of Functional Programming
A concurrent lambda calculus with futures
FroCoS'05 Proceedings of the 5th international conference on Frontiers of Combining Systems
L3: a linear language with locations
TLCA'05 Proceedings of the 7th international conference on Typed Lambda Calculi and Applications
Generics for the working ML'er
ML '07 Proceedings of the 2007 workshop on Workshop on ML
Unrestricted pure call-by-value recursion
Proceedings of the 2008 ACM SIGPLAN workshop on ML
Masked types for sound object initialization
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Compilation of extended recursion in call-by-value functional languages
Higher-Order and Symbolic Computation
Small-step and big-step semantics for call-by-need
Journal of Functional Programming
The billion-dollar fix: safe modular circular initialisation
ECOOP'13 Proceedings of the 27th European conference on Object-Oriented Programming
Hi-index | 0.00 |
Mutual dependencies between objects arise frequently in programs, and programmers must typically solve this value recursion by manually filling ''initialization holes'' to help construct the corresponding object graphs, i.e. null values and/or explicitly mutable locations. This paper aims to augment ongoing theoretical work on value recursion with a description of a semi-safe mechanism for a generalized form of value recursion in an ML-like language, where initialization corresponds to a graph of lazy computations whose nodes are sequentially forced, requiring runtime checks for soundness during initialization in the style of Russo. Our primary contribution is to use the mechanism to develop compelling examples of how the absence of value recursion leads to real problems in the presence of abstraction boundaries, and give micro-examples that characterize how initialization graphs permit more programs to be expressed in the mutation-free fragment of ML. Finally we argue that in heterogeneous programming environments semi-safe variations on value-recursion may be appropriate for ML-like languages, because initialization effects from external libraries are difficult to characterize, document and control.