Copy elimination in functional languages
POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
On the expressive power of programming languages
ESOP '90 Selected papers from the symposium on 3rd European symposium on programming
A uniform treatment of order of evaluation and aggregate update
Theoretical Computer Science
Path analysis and the optimization of nonstrict functional languages
ACM Transactions on Programming Languages and Systems (TOPLAS)
Proceedings of the 3rd Workshop on Mathematical Foundations of Programming Language Semantics
TPHOLs '08 Proceedings of the 21st International Conference on Theorem Proving in Higher Order Logics
Adapting functional programs to higher order logic
Higher-Order and Symbolic Computation
Copy-on-write in the PHP language
Proceedings of the 36th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
The Higher-Order Aggregate Update Problem
VMCAI '09 Proceedings of the 10th International Conference on Verification, Model Checking, and Abstract Interpretation
Extending coq with imperative features and its application to SAT verification
ITP'10 Proceedings of the First international conference on Interactive Theorem Proving
Hi-index | 0.01 |
Functional programs are more amenable to rigorous mathematical analysis than imperative programs, but are typically less efficient in terms of execution space and time. The update of aggregate data structures, such as arrays, are a significant source of space/time inefficiencies in functional programming. Imperative programs can execute such updates in place, whereas the semantics of functional languages require aggregate data structures to be copied and updated. In many functional programs, the execution of aggregate updates by copying is redundant and could be safely implemented by means of destructive, inplace updates. We describe a method for analyzing higher-order, eager functional programs for safe destructive updates. This method has been implemented for the PVS specification language for the purpose of animating or testing specifications to check if they accurately reflect their intended function. We also give a careful proof of correctness for the safety of the destructive update optimization.