|
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.
REFERENCES
Note: OCR errors may be found in this Reference List extracted from the full text article. ACM has opted to expose the complete List rather than only correct and linked references.
| |
1
|
Malcolm Atkinson. Orthogonally persistent object systems. Nov 1995. URL http://citeseer.ist.psu.edu/411649.
|
| |
2
|
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.
|
| |
3
|
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.
|
| |
4
|
John Brant, Brian Foote, Ralph Johnson, and Don Roberts. Wrappers to the rescue. In Proceedings of ECOOP'98, pages 396--417, 1998.
|
| |
5
|
Serge Demeyer, Stéphane Ducasse, and Oscar Nierstrasz. Object-Oriented Reengineering Patterns. 2002. ISBN 1-55860-639-4.
|
| |
6
|
Marcus Denker, Stéphane Ducasse, and Éric Tanter. Runtime bytecode transformation for smalltalk. Computer Languages, Systems & Structures, 32 (2-3): 125--139, 2005.
|
| |
7
|
D. Dobkin and R. Lipton. Multidimensional searching problems. SIAM Journal of Computing 5, pages 181--186, 1976.
|
| |
8
|
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.
|
| |
9
|
Stéphane Ducasse. Evaluating message passing control techniques in Smalltalk. Journal of Object-Oriented Programming (JOOP), 12 (6): 39--44, 1999.
|
| |
10
|
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.
|
| |
11
|
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.
|
| |
12
|
Elnar Hajiyev, Mathieu Verbaere, and Oege de Moor. Codequest: Scalable source code queries with datalog. In Proceedings of ECOOP '06, pages 2--28, 2006.
|
| |
13
|
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.
|
| |
14
|
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.
|
| |
15
|
Danny B. Lange and Yuichi Nakamura. Object-oriented program tracing and visualization. Computer, 30 (5): 63--70, 1997.
|
| |
16
|
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.
|
| |
17
|
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.
|
| |
18
|
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.
|
| |
19
|
Bertrand Meyer. Applying design by contract. IEEE Computer (Special Issue on Inheritance & Classification), 25 (10): 40--52, 1992.
|
| |
20
|
Todd Millstein and Craig Chambers. Modular statically typed multimethods. In Proceedings of ECOOP '99, pages 279--303, 1999.
|
| |
21
|
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.
|
| |
22
|
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.
|
| |
23
|
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.
|
| |
24
|
Raimund Seidel and Cecilia R. Aragon. Randomized search trees. Algorithmica, 16 (4/5): 464--497, 1996.
|
| |
25
|
Nir Shavit and Dan Touitou. Software transactional memory, 1995.
|
| |
26
|
Willem Visser, Klaus Havelund, and Guillaume Brat. Model checking programs. In Automated Software Engineering Journal, pages 3--12, 2000.
|
| |
27
|
Darren Willis, David J. Pearce, and James Noble. Efficient object querying for java. In Proceedings of ECOOP'06, pages 28--40, 2006.
|
| |
28
|
Roel Wuyts. A Logic Meta-Programming Approach to Support the Co-Evolution of Object-Oriented Design and Implementation. PhD thesis, Vrije Universiteit Brussel, 2001.
|
|