skip to main content
research-article

Executing code in the past: efficient in-memory object graph versioning

Published:25 October 2009Publication History
Skip Abstract Section

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

  1. Malcolm Atkinson. Orthogonally persistent object systems. Nov 1995. URL http://citeseer.ist.psu.edu/411649.Google ScholarGoogle Scholar
  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. Google ScholarGoogle ScholarDigital LibraryDigital Library
  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. Google ScholarGoogle ScholarDigital LibraryDigital Library
  4. John Brant, Brian Foote, Ralph Johnson, and Don Roberts. Wrappers to the rescue. In Proceedings of ECOOP'98, pages 396--417, 1998. Google ScholarGoogle ScholarDigital LibraryDigital Library
  5. Serge Demeyer, Stéphane Ducasse, and Oscar Nierstrasz. Object-Oriented Reengineering Patterns. 2002. ISBN 1-55860-639-4. Google ScholarGoogle ScholarDigital LibraryDigital Library
  6. Marcus Denker, Stéphane Ducasse, and Éric Tanter. Runtime bytecode transformation for smalltalk. Computer Languages, Systems&Structures, 32 (2-3): 125--139, 2005. Google ScholarGoogle ScholarDigital LibraryDigital Library
  7. D. Dobkin and R. Lipton. Multidimensional searching problems. SIAM Journal of Computing 5, pages 181--186, 1976.Google ScholarGoogle Scholar
  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. Google ScholarGoogle ScholarDigital LibraryDigital Library
  9. Stéphane Ducasse. Evaluating message passing control techniques in Smalltalk. Journal of Object-Oriented Programming (JOOP), 12 (6): 39--44, 1999.Google ScholarGoogle Scholar
  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.Google ScholarGoogle ScholarCross RefCross Ref
  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. Google ScholarGoogle ScholarDigital LibraryDigital Library
  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. Google ScholarGoogle ScholarDigital LibraryDigital Library
  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. Google ScholarGoogle ScholarDigital LibraryDigital Library
  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. Google ScholarGoogle ScholarDigital LibraryDigital Library
  15. Danny B. Lange and Yuichi Nakamura. Object-oriented program tracing and visualization. Computer, 30 (5): 63--70, 1997. Google ScholarGoogle ScholarDigital LibraryDigital Library
  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. Google ScholarGoogle ScholarDigital LibraryDigital Library
  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. Google ScholarGoogle ScholarDigital LibraryDigital Library
  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.Google ScholarGoogle Scholar
  19. Bertrand Meyer. Applying design by contract. IEEE Computer (Special Issue on Inheritance&Classification), 25 (10): 40--52, 1992. Google ScholarGoogle ScholarDigital LibraryDigital Library
  20. Todd Millstein and Craig Chambers. Modular statically typed multimethods. In Proceedings of ECOOP '99, pages 279--303, 1999. Google ScholarGoogle ScholarDigital LibraryDigital Library
  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.Google ScholarGoogle ScholarCross RefCross Ref
  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. Google ScholarGoogle ScholarDigital LibraryDigital Library
  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. Google ScholarGoogle ScholarDigital LibraryDigital Library
  24. Raimund Seidel and Cecilia R. Aragon. Randomized search trees. Algorithmica, 16 (4/5): 464--497, 1996.Google ScholarGoogle ScholarCross RefCross Ref
  25. Nir Shavit and Dan Touitou. Software transactional memory, 1995.Google ScholarGoogle Scholar
  26. Willem Visser, Klaus Havelund, and Guillaume Brat. Model checking programs. In Automated Software Engineering Journal, pages 3--12, 2000. Google ScholarGoogle ScholarDigital LibraryDigital Library
  27. Darren Willis, David J. Pearce, and James Noble. Efficient object querying for java. In Proceedings of ECOOP'06, pages 28--40, 2006. Google ScholarGoogle ScholarDigital LibraryDigital Library
  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.Google ScholarGoogle Scholar

Index Terms

  1. Executing code in the past: efficient in-memory object graph versioning

        Recommendations

        Comments

        Login options

        Check if you have access through your login credentials or your institution to get full access on this article.

        Sign in

        Full Access

        • Published in

          cover image ACM SIGPLAN Notices
          ACM SIGPLAN Notices  Volume 44, Issue 10
          OOPSLA '09
          October 2009
          554 pages
          ISSN:0362-1340
          EISSN:1558-1160
          DOI:10.1145/1639949
          Issue’s Table of Contents
          • cover image ACM Conferences
            OOPSLA '09: Proceedings of the 24th ACM SIGPLAN conference on Object oriented programming systems languages and applications
            October 2009
            590 pages
            ISBN:9781605587660
            DOI:10.1145/1640089

          Copyright © 2009 ACM

          Publisher

          Association for Computing Machinery

          New York, NY, United States

          Publication History

          • Published: 25 October 2009

          Check for updates

          Qualifiers

          • research-article

        PDF Format

        View or Download as a PDF file.

        PDF

        eReader

        View online with eReader.

        eReader
        About Cookies On This Site

        We use cookies to ensure that we give you the best experience on our website.

        Learn more

        Got it!