Abstract
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.
Access this chapter
Tax calculation will be finalised at checkout
Purchases are for personal use only
References
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:6
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–40
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–178
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–49
Ecma/TS39 (2014) ECMAScript language specification (Draft for 6th Edition). Published April 27, 2014 (Draft, Revision 24). http://wiki.ecmascript.org/doku.php?id=harmony:specification_drafts. Accessed 11 May 2014
Gamma E, Helm R, Johnson R, Vlissides J (1995) Design patterns: elements of reusable object-oriented software. Addison-Wesley, Reading, MA
Goldberg A, Robson D (1983) Smalltalk-80: the language and its implementation. Addison-Wesley, Reading, MA
Hirschfeld R, Costanza P, Nierstrasz O (2008) Context-oriented programming. J Object Technol 7(3):125–151
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–190
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–326
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–50
Kay A (2005) Squeak Etoys authoring and media. Technical report. Published February 2005. http://www.vpri.org/pdf/rn2005002_authoring.pdf. Accessed 7 Mar 2014
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:10
Lewis B (2003) Debugging backwards in time. In: Proceedings of the fifth international workshop on automated debugging. AADEBUG’03. Springer, September 2003, pp 225–235
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–223
Lienhard A (2008) Dynamic object flow analysis. Ph.D. thesis. University of Bern, December 2008
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–615
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:6
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:8
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–1209
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–701
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–28
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:15
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–408
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–213
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–238
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–118
Taivalsaari A (1992) Kevo, a prototype-based object-oriented language based on concatenation and modules operations. Technical report LACIR 92-02. University of Victoria
Taivalsaari A (1995) Delegation versus concatenation or cloning is inheritance too. In: SIGPLAN OOPS messenger 6.3, July 1995, pp 20–49. Issn: 1055-6400
Taivalsaari A (1996) Classes vs. prototypes-some philosophical and historical observations. J Object Orient Prog 10(7):44–50
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–242
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:50
Van Cutsem T, Miller MS (2010) Proxies: design principles for robust object-oriented intercession APIs. SIGPLAN Not 45(12):59–72
Warth A (2009) Experimenting with programming language. Ph.D. thesis. University of California, Los Angeles, December 2009
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–203
Author information
Authors and Affiliations
Corresponding author
Editor information
Editors and Affiliations
Rights and permissions
Copyright information
© 2016 Springer International Publishing Switzerland
About this chapter
Cite this chapter
Thamsen, L., Steinert, B., Hirschfeld, R. (2016). Preserving Access to Previous System States in the Lively Kernel. In: Plattner, H., Meinel, C., Leifer, L. (eds) Design Thinking Research. Understanding Innovation. Springer, Cham. https://doi.org/10.1007/978-3-319-19641-1_15
Download citation
DOI: https://doi.org/10.1007/978-3-319-19641-1_15
Publisher Name: Springer, Cham
Print ISBN: 978-3-319-19640-4
Online ISBN: 978-3-319-19641-1
eBook Packages: Business and ManagementBusiness and Management (R0)