Abstract
Object versioning refers to how an application can have access to previous states of its objects. Implementing this mechanism is hard because it needs to be efficient in space and time, and well integrated with the programming language. This paper presents HistOOry, an object versioning system that uses an efficient data structure to store and retrieve past states. It needs only three primitives, and existing code does not need to be modified to be versioned. It provides fine-grained control over what parts of objects are versioned and when. It stores all states, past and present, in memory. Code can be executed in the past of the system and will see the complete system at that point in time. We have implemented our model in Smalltalk and used it for three applications that need versioning: checked postconditions, stateful execution tracing and a planar point location implementation. Benchmarks are provided to asses the practical complexity of our implementation.
- Malcolm Atkinson. Orthogonally persistent object systems. Nov 1995. URL http://citeseer.ist.psu.edu/411649.Google Scholar
- Elisa Bertino, Elena Ferrari, Giovanna Guerrini, and Isabella Merlo. Extending the odmg object model with time. In In Proceedings of the European Conference on Object-Oriented Programming (ECOOP), pages 41--66, 1998. Google Scholar
Digital Library
- Bob Boothe. Efficient algorithms for bidirectional debugging. In PLDI '00: Proceedings of the ACM SIGPLAN 2000 conference on Programming language design and implementation, pages 299--310, New York, NY, USA, 2000. ACM. ISBN 1-58113-199-2. http://doi.acm.org/10.1145/349299.349339. Google Scholar
Digital Library
- John Brant, Brian Foote, Ralph Johnson, and Don Roberts. Wrappers to the rescue. In Proceedings of ECOOP'98, pages 396--417, 1998. Google Scholar
Digital Library
- Serge Demeyer, Stéphane Ducasse, and Oscar Nierstrasz. Object-Oriented Reengineering Patterns. 2002. ISBN 1-55860-639-4. Google Scholar
Digital Library
- Marcus Denker, Stéphane Ducasse, and Éric Tanter. Runtime bytecode transformation for smalltalk. Computer Languages, Systems&Structures, 32 (2-3): 125--139, 2005. Google Scholar
Digital Library
- D. Dobkin and R. Lipton. Multidimensional searching problems. SIAM Journal of Computing 5, pages 181--186, 1976.Google Scholar
- James R. Driscoll, Neil Sarnak, Daniel D. Sleator, and Robert E. Tarjan. Making data structures persistent. Journal of Computer and System Sciences, pages 86--124, 1986. Google Scholar
Digital Library
- Stéphane Ducasse. Evaluating message passing control techniques in Smalltalk. Journal of Object-Oriented Programming (JOOP), 12 (6): 39--44, 1999.Google Scholar
- Stéphane Ducasse, Tudor Gîrba, and Roel Wuyts. Object-oriented legacy system trace-based logic testing. In Proceedings of CSMR'06, pages 35--44, 2006.Google Scholar
Cross Ref
- Stuart I. Feldman and Channing B. Brown. Igor: a system for program debugging via reversible execution. SIGPLAN Not., 24 (1): 112--123, 1989. ISSN 0362-1340. http://doi.acm.org/10.1145/69215.69226. Google Scholar
Digital Library
- Elnar Hajiyev, Mathieu Verbaere, and Oege de Moor. Codequest: Scalable source code queries with datalog. In Proceedings of ECOOP '06, pages 2--28, 2006. Google Scholar
Digital Library
- Abdelwahab Hamou-Lhadj and Timothy Lethbridge. A survey of trace exploration tools and techniques. In Proceedings IBM Centers for Advanced Studies Conferences (CASON 2004), pages 42--55, 2004. Google Scholar
Digital Library
- Gregor Kiczales, Erik Hilsdale, Jim Hugunin, Mik Kersten, Jeffrey Palm, and William G. Griswold. An overview of AspectJ. In Proceedings of ECOOP'01, pages 327--353, 2001. Google Scholar
Digital Library
- Danny B. Lange and Yuichi Nakamura. Object-oriented program tracing and visualization. Computer, 30 (5): 63--70, 1997. Google Scholar
Digital Library
- Adrian Lienhard, Tudor Gırba, and Oscar Nierstrasz. Practical object-oriented back-in-time debugging. In ECOOP '08: Proceedings of the 22nd European conference on Object-Oriented Programming, pages 592--615, Berlin, Heidelberg, 2008. Springer-Verlag. ISBN 978-3-540-70591-8. http://dx.doi.org/10.1007/978-3-540-70592-5_25. Google Scholar
Digital Library
- Adrian Lienhard, Stéphane Ducasse, and Tudor Gırba. Taking an object-centric view on dynamic information with object flow analysis. Comput. Lang. Syst. Struct., 35 (1): 63--79, 2009. Google Scholar
Digital Library
- A. Marquez. Orthogonal object versioning in an odmg compliant persistent java - extended abstract, 2007. URL http://www.cs.adelaide.edu.au/idea/idea7/PDFs/marquez.pdf. Presented at the School of Computer Science, University of Adelaide, Australia.Google Scholar
- Bertrand Meyer. Applying design by contract. IEEE Computer (Special Issue on Inheritance&Classification), 25 (10): 40--52, 1992. Google Scholar
Digital Library
- Todd Millstein and Craig Chambers. Modular statically typed multimethods. In Proceedings of ECOOP '99, pages 279--303, 1999. Google Scholar
Digital Library
- Frédéric Pluquet, Stefan Langerman, Antoine Marot, and Roel Wuyts. Implementing partial persistence in object-oriented languages. In Proceedings of the Workshop on Algorithm Engineering and Experiments (ALENEX08), 2008.Google Scholar
Cross Ref
- Guillaume Pothier, Éric Tanter, and José Piquer. Scalable omniscient debugging. SIGPLAN Not., 42 (10): 535--552, 2007. ISSN 0362-1340. http://doi.acm.org/10.1145/1297105.1297067. Google Scholar
Digital Library
- Neil Sarnak and Robert E. Tarjan. Planar point location using persistent search trees. Commun. ACM, 29 (7): 669--679, 1986. ISSN 0001-0782. http://doi.acm.org/10.1145/6138.6151. Google Scholar
Digital Library
- Raimund Seidel and Cecilia R. Aragon. Randomized search trees. Algorithmica, 16 (4/5): 464--497, 1996.Google Scholar
Cross Ref
- Nir Shavit and Dan Touitou. Software transactional memory, 1995.Google Scholar
- Willem Visser, Klaus Havelund, and Guillaume Brat. Model checking programs. In Automated Software Engineering Journal, pages 3--12, 2000. Google Scholar
Digital Library
- Darren Willis, David J. Pearce, and James Noble. Efficient object querying for java. In Proceedings of ECOOP'06, pages 28--40, 2006. Google Scholar
Digital Library
- Roel Wuyts. A Logic Meta-Programming Approach to Support the Co-Evolution of Object-Oriented Design and Implementation. PhD thesis, Vrije Universiteit Brussel, 2001.Google Scholar
Index Terms
Executing code in the past: efficient in-memory object graph versioning
Recommendations
Executing code in the past: efficient in-memory object graph versioning
OOPSLA '09: Proceedings of the 24th ACM SIGPLAN conference on Object oriented programming systems languages and applicationsObject versioning refers to how an application can have access to previous states of its objects. Implementing this mechanism is hard because it needs to be efficient in space and time, and well integrated with the programming language. This paper ...
Executing code in the past: efficient in-memory object graph versioning
OOPSLA '09: Proceedings of the 24th ACM SIGPLAN conference companion on Object oriented programming systems languages and applicationsThis paper is an abstract of the paper titled "Executing Code in the Past:Efficient In-Memory Object Graph Versioning" (written by the same authors), accepted in the Research Program of the 2009 ACM SIGPLAN Conference on Object-Oriented Programming ...
Object versioning to support recovery needs: using proxies to preserve previous development states in lively
DLS '14We present object versioning as a generic approach to preserve access to previous development and application states. Version-aware references can manage the modifications made to the target object and record versions as desired. Such references can be ...







Comments