The Illinois functional programming interpreter
SIGPLAN '87 Papers of the Symposium on Interpreters and interpretive techniques
Update analysis and the efficient implementation of functional aggregates
FPCA '89 Proceedings of the fourth international conference on Functional programming languages and computer architecture
How to make destructive updates less destructive
POPL '91 Proceedings of the 18th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Efficiently computing static single assignment form and the control dependence graph
ACM Transactions on Programming Languages and Systems (TOPLAS)
FPCA '95 Proceedings of the seventh international conference on Functional programming languages and computer architecture
The aggregate update problem in functional programming systems
POPL '85 Proceedings of the 12th ACM SIGACT-SIGPLAN symposium on Principles of programming languages
Communications of the ACM
Static Analysis for Safe Destructive Updates in a Functional Language
LOPSTR '01 Selected papers from the 11th International Workshop on Logic Based Program Synthesis and Transformation
A type system for bounded space and functional in-place update
Nordic Journal of Computing
A new method for functional arrays
Journal of Functional Programming
Static approximation of dynamically generated Web pages
WWW '05 Proceedings of the 14th international conference on World Wide Web
A persistent union-find data structure
ML '07 Proceedings of the 2007 workshop on Workshop on ML
HTML templates that fly: a template engine approach to automated offloading from server to client
Proceedings of the 18th international conference on World wide web
Evaluation of a just-in-time compiler retrofitted for PHP
Proceedings of the 6th ACM SIGPLAN/SIGOPS international conference on Virtual execution environments
There is nothing wrong with out-of-thin-air: compiler optimization and memory models
Proceedings of the 2011 ACM SIGPLAN Workshop on Memory Systems Performance and Correctness
A practical solution for achieving language compatibility in scripting language compilers
Science of Computer Programming
Hi-index | 0.02 |
PHP is a popular language for server-side applications. In PHP, assignment to variables copies the assigned values, according to its so-called copy-on-assignment semantics. In contrast, a typical PHP implementation uses a copy-on-write scheme to reduce the copy overhead by delaying copies as much as possible. This leads us to ask if the semantics and implementation of PHP coincide, and actually this is not the case in the presence of sharings within values. In this paper, we describe the copy-on-assignment semantics with three possible strategies to copy values containing sharings. The current PHP implementation has inconsistencies with these semantics, caused by its naïve use of copy-on-write. We fix this problem by the novel mostly copy-on-write scheme, making the copy-on-write implementations faithful to the semantics. We prove that our copy-on-write implementations are correct, using bisimulation with the copy-on-assignment semantics.