Preserving Access to Previous System States in the Lively Kernel

  • Lauritz Thamsen
  • Bastian Steinert
  • Robert HirschfeldEmail author
Part of the Understanding Innovation book series (UNDINNO)


In programming systems such as the Lively Kernel, programmers construct applications from objects. Dedicated tools make it possible to manipulate the state and behavior of objects at runtime. Programmers are encouraged to make changes directly and receive immediate feedback on their actions. However, when programmers make mistakes in such programming systems, they need to undo the effects of their actions. Programmers either have to edit objects manually or reload parts of their applications. Moreover, changes can spread across many objects. As a result, recovering previous states is often error-prone and time-consuming. This report presents an approach to object versioning for systems like the Lively Kernel. Access to previous versions of objects is preserved using version-aware references. These references can be resolved to multiple versions of objects and, thereby, allow reestablishing preserved states of the system. We present a design based on proxies and an implementation in JavaScript.


Object Graph Multiple Version Alternative Reference Person Object Software Transactional Memory 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


  1. Appeltauer M, Hirschfeld R, Haupt M, Lincke J, Perscheid M (2009) A comparison of context-oriented programming languages. In: International workshop on context-oriented programming. COP’09. ACM, July 2009, 6:1–6:6Google Scholar
  2. Borning A (1986) Classes versus prototypes in object-oriented languages. In: Proceedings of 1986 ACM fall joint computer conference. ACM’86. IEEE, November 1986, pp 36–40Google Scholar
  3. Cutsem T, Miller MS (2013) Trustworthy proxies: virtualizing objects with invariants. In: Proceedings of the 27th European conference on object-oriented programming. ECOOP’13. Springer, July 2013, pp 154–178Google Scholar
  4. Denker M, Gîrba T, Lienhard A, Nierstrasz O, Renggli L, Zumkehr P (2007) Encapsulating and exploiting change with changeboxes. In: Proceedings of the 2007 international conference on dynamic languages. ICDL’07. ACM, August 2007, pp 25–49Google Scholar
  5. Ecma/TS39 (2014) ECMAScript language specification (Draft for 6th Edition). Published April 27, 2014 (Draft, Revision 24). Accessed 11 May 2014
  6. Gamma E, Helm R, Johnson R, Vlissides J (1995) Design patterns: elements of reusable object-oriented software. Addison-Wesley, Reading, MAGoogle Scholar
  7. Goldberg A, Robson D (1983) Smalltalk-80: the language and its implementation. Addison-Wesley, Reading, MAGoogle Scholar
  8. Hirschfeld R, Costanza P, Nierstrasz O (2008) Context-oriented programming. J Object Technol 7(3):125–151CrossRefGoogle Scholar
  9. Ingalls D, Wallace S, Chow Y-Y, Ludolph F, Doyle K (1988) Fabrik: a visual programming environment. In: Conference proceedings on object-oriented programming systems, languages and applications. OOPSLA’88. ACM, January 1988, pp 176–190Google Scholar
  10. Ingalls D, Kaehler T, Maloney J, Wallace S, Kay A (1997) Back to the future: the story of squeak, a practical smalltalk written in itself. In: Proceedings of the 12th ACM SIGPLAN conference on object-oriented programming systems, languages and applications. OOPSLA’97. ACM, October 1997, pp 318–326Google Scholar
  11. Ingalls D, Palacz K, Uhler S, Taivalsaari A, Mikkonen T (2008) The Lively Kernel—a self-supporting system on a web page. In: Self-sustaining systems. S3. Springer, May 2008, pp 31–50Google Scholar
  12. Kay A (2005) Squeak Etoys authoring and media. Technical report. Published February 2005. Accessed 7 Mar 2014
  13. Krahn R, Ingalls D, Hirschfeld R, Lincke J, Palacz K (2009) Lively wiki: a development environment for creating and sharing active web content. In: Proceedings of the 5th International symposium on wikis and open collaboration. WikiSym’09. ACM, October 2009, 9:1–9:10Google Scholar
  14. Lewis B (2003) Debugging backwards in time. In: Proceedings of the fifth international workshop on automated debugging. AADEBUG’03. Springer, September 2003, pp 225–235Google Scholar
  15. Lieberman H (1986) Using prototypical objects to implement shared behavior in object-oriented systems. In: Conference proceedings on object-oriented programming systems, languages and applications. OOPLSA’86. ACM, June 1986, pp 214–223Google Scholar
  16. Lienhard A (2008) Dynamic object flow analysis. Ph.D. thesis. University of Bern, December 2008Google Scholar
  17. Lienhard A, Gîrba T, Nierstrasz O (2008) Practical object-oriented back-in-time debugging. In: Proceedings of the 22nd European conference on object-oriented programming. ECOOP’08. Springer, July 2008, pp 592–615Google Scholar
  18. Lincke J, Hirschfeld R (2012) Scoping changes in self-supporting development environments using context-oriented programming. In: Proceedings of the international workshop on context-oriented programming. COP’12. ACM, June 2012, 2:1–2:6Google Scholar
  19. Lincke J, Hirschfeld R (2013) User-evolvable tools in the web. In: Proceedings of the 9th international symposium on open collaboration. WikiSym’13. ACM, August 2013, 19:1–19:8Google Scholar
  20. Lincke J, Appeltauer M, Steinert B, Hirschfeld R (2011) An open implementation for context-oriented layer composition in ContextJS. Sci Comput Program 76(12):1194–1209CrossRefGoogle Scholar
  21. Lincke J, Krahn R, Ingalls D, Röder M, Hirschfeld R (2012) The lively partsbin—a cloud-based repository for collaborative development of active web content. In: Proceedings of the 2012 45th Hawaii international conference on system sciences. HICSS’12. IEEE, January 2012, pp 693–701Google Scholar
  22. Maloney JH, Smith RB (1995) Directness and liveness in the morphic user interface construction environment. In: Proceedings of the 8th annual ACM symposium on user interface and software technology. UIST’95. ACM, December 1995, pp 21–28Google Scholar
  23. Maloney J, Resnick M, Rusk N, Silverman B, Eastmond E (2010) The scratch programming language and environment. Trans Comput Educ 10(4):16:1–16:15CrossRefGoogle Scholar
  24. Pluquet F, Langerman S, Wuyts R (2009) Executing code in the past: efficient in-memory object graph versioning. In: Proceedings of the 24th ACM SIGPLAN conference on object oriented programming systems languages and applications. OOPSLA’09. ACM, October 2009, pp 391–408Google Scholar
  25. Shavit N, Touitou D (1995) Software transactional memory. In: Proceedings of the fourteenth annual ACM symposium on principles of distributed computing. PODC’95. ACM, June 1995, pp 204–213Google Scholar
  26. Steinert B, Hirschfeld R (2014) How to compare performance in program design activities: towards an empirical evaluation of CoExist. In: Design thinking research. Understanding innovation. Springer, January 2014, pp 219–238Google Scholar
  27. Steinert B, Cassou D, Hirschfeld R. CoExist: overcoming aversion to change. In: Proceedings of the 8th symposium on dynamic languages. DLS’12. ACM, January 2012, pp 107–118Google Scholar
  28. Taivalsaari A (1992) Kevo, a prototype-based object-oriented language based on concatenation and modules operations. Technical report LACIR 92-02. University of VictoriaGoogle Scholar
  29. Taivalsaari A (1995) Delegation versus concatenation or cloning is inheritance too. In: SIGPLAN OOPS messenger 6.3, July 1995, pp 20–49. Issn: 1055-6400Google Scholar
  30. Taivalsaari A (1996) Classes vs. prototypes-some philosophical and historical observations. J Object Orient Prog 10(7):44–50Google Scholar
  31. Ungar D, Smith RB (1987) Self: the power of simplicity. In: Conference proceedings on object-oriented programming systems, languages and applications. OOPSLA’87. ACM, December 1987, pp 227–242Google Scholar
  32. Ungar D, Smith RB (2007) Self. In: Proceedings of the third ACM SIGPLAN conference on history of programming languages. HOPL III. ACM, San Diego, CA, June 2007, 9:1–9:50Google Scholar
  33. Van Cutsem T, Miller MS (2010) Proxies: design principles for robust object-oriented intercession APIs. SIGPLAN Not 45(12):59–72CrossRefGoogle Scholar
  34. Warth A (2009) Experimenting with programming language. Ph.D. thesis. University of California, Los Angeles, December 2009Google Scholar
  35. Warth A, Ohshima Y, Kaehler T, Kay A (2011) Worlds: controlling the scope of side effects. In: Proceedings of the 25th European conference on object-oriented programming. ECOOP’11. Springer, July 2011, pp 179–203Google Scholar

Copyright information

© Springer International Publishing Switzerland 2016

Authors and Affiliations

  • Lauritz Thamsen
    • 1
  • Bastian Steinert
    • 1
  • Robert Hirschfeld
    • 1
    Email author
  1. 1.Software Architecture Group, Hasso Plattner InstituteUniversity of PotsdamPotsdamGermany

Personalised recommendations