{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2025,1,31]],"date-time":"2025-01-31T05:14:44Z","timestamp":1738300484677,"version":"3.35.0"},"reference-count":45,"publisher":"Wiley","issue":"14","license":[{"start":{"date-parts":[[2008,5,22]],"date-time":"2008-05-22T00:00:00Z","timestamp":1211414400000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/2.zoppoz.workers.dev:443\/http\/onlinelibrary.wiley.com\/termsAndConditions#vor"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["Softw Pract Exp"],"published-print":{"date-parts":[[2008,11,25]]},"abstract":"<jats:title>Abstract<\/jats:title><jats:p>This paper presents a variation of the visitor pattern which allows programmers to write visitor\u2010like code in a concise way. The Runabout is a library extension that adds a limited form of multi\u2010dispatch to Java. While the Runabout is not as expressive as a general multiple dispatching facility, the Runabout can be significantly faster than existing implementations of multiple dispatch for Java, such as MultiJava. Unlike MultiJava, the Runabout does not require changes to the syntax and the compiler. This paper illustrates how to use the Runabout, details its implementation and provides benchmarks comparing its performance with other approaches. Furthermore, the effect of an automatic static program transformation tool that translates bytecode using the Runabout to equivalent bytecode is evaluated. The tool uses double dispatch and runtime\u2010type checks to achieve the same semantics that the Runabout has. The performance comparisons on large benchmarks that make extensive use of multiple dispatch show that using the Runabout does not result in a significant loss of performance for realistic applications and that, depending on the application and platform, small performance gains are also possible. Copyright \u00a9 2008 John Wiley &amp; Sons, Ltd.<\/jats:p>","DOI":"10.1002\/spe.878","type":"journal-article","created":{"date-parts":[[2008,5,22]],"date-time":"2008-05-22T17:46:44Z","timestamp":1211478404000},"page":"1531-1560","source":"Crossref","is-referenced-by-count":1,"title":["The Runabout"],"prefix":"10.1002","volume":"38","author":[{"given":"Christian","family":"Grothoff","sequence":"first","affiliation":[],"role":[{"role":"author","vocabulary":"crossref"}]}],"member":"311","published-online":{"date-parts":[[2008,5,22]]},"reference":[{"key":"e_1_2_1_2_2","doi-asserted-by":"publisher","DOI":"10.1007\/BFb0054088"},{"volume-title":"Design Patterns: Elements of Reusable Object\u2010oriented Software","year":"1994","author":"Gamma E","key":"e_1_2_1_3_2"},{"key":"e_1_2_1_4_2","doi-asserted-by":"crossref","unstructured":"PalsbergJ JayCB.The Essence of the Visitor Pattern. Proceedings of the 22nd IEEE International Computer Software and Applications Conference COMPSAC 1998;9\u201315.","DOI":"10.1109\/CMPSAC.1998.716629"},{"key":"e_1_2_1_5_2","doi-asserted-by":"crossref","unstructured":"CliftonC LeavensGT ChambersC MillsteinT.MultiJava: Modular open classes and symmetric multiple dispatch for Java. OOPSLA 2000 Conference on Object\u2010oriented Programming Systems Languages and Applications Minneapolis MN vol. 35(10) 2000;130\u2013145.","DOI":"10.1145\/354222.353181"},{"volume-title":"The Java Language Specification","year":"1996","author":"Gosling J","key":"e_1_2_1_6_2"},{"volume-title":"OOPSLA Proceedings","year":"1998","author":"Bracha G","key":"e_1_2_1_7_2"},{"key":"e_1_2_1_8_2","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-45337-7_18"},{"key":"e_1_2_1_9_2","first-page":"105","volume-title":"Pattern Languages of Program Design 3","author":"Nordberg III ME","year":"1997"},{"key":"e_1_2_1_10_2","unstructured":"BravenboerM VisserE.Guiding visitors: Separating navigation from computation. Technical Report Institute of Information and Computing Sciences Utrecht University 2001."},{"key":"e_1_2_1_11_2","unstructured":"Sun Microsystems.J2ME building blocks for mobile devices. Technical Report Sun Microsystems May2000."},{"key":"e_1_2_1_12_2","unstructured":"OVM Consortium.https:\/\/2.zoppoz.workers.dev:443\/http\/ovmj.org\/ 2004."},{"key":"e_1_2_1_13_2","first-page":"292","volume-title":"ACM SIGPLAN Notices","author":"Tip F","year":"1999"},{"key":"e_1_2_1_14_2","unstructured":"GrothoffC. Jamit.https:\/\/2.zoppoz.workers.dev:443\/http\/ovmj.org\/jamit\/ 2003."},{"key":"e_1_2_1_15_2","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-36579-6_11"},{"key":"e_1_2_1_16_2","unstructured":"UCLA Compilers Group. The Java Tree Builder.https:\/\/2.zoppoz.workers.dev:443\/http\/compilers.cs.ucla.edu\/jtb\/."},{"key":"e_1_2_1_17_2","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-45070-2_17"},{"key":"e_1_2_1_18_2","doi-asserted-by":"crossref","unstructured":"GrothoffC PalsbergJ VitekJ.Encapsulating objects with confined types. OOPSLA 2001 Conference on Object\u2010oriented Programming Systems Languages and Applications Tampa FL 2001;241\u2013253.","DOI":"10.1145\/504282.504300"},{"key":"e_1_2_1_19_2","doi-asserted-by":"crossref","unstructured":"PalaczK BakerJ FlackC GrothoffC YamauchiH VitekJ.Engineering a Customizable Intermediate Representation. ACM SIGPLAN 2003 Workshop on Interpreters Virtual Machines and Emulators (IVME 2003). ACM SIGPLAN 2003.","DOI":"10.1145\/858570.858578"},{"key":"e_1_2_1_20_2","unstructured":"SamantaV GrothoffC. Hitsuji.https:\/\/2.zoppoz.workers.dev:443\/http\/ovmj.org\/hitsuji\/ 2004."},{"key":"e_1_2_1_21_2","unstructured":"ShiversO.Control\u2010flow analysis of higher\u2010order languages. PhD Thesis Carnegie Mellon University 1991."},{"key":"e_1_2_1_22_2","unstructured":"GNU Project.https:\/\/2.zoppoz.workers.dev:443\/http\/www.classpath.org\/ 2004."},{"key":"e_1_2_1_23_2","doi-asserted-by":"publisher","DOI":"10.5381\/jot.2005.4.10.a3"},{"volume-title":"Design Patterns","year":"1994","author":"Gamma E","key":"e_1_2_1_24_2"},{"key":"e_1_2_1_25_2","doi-asserted-by":"crossref","first-page":"487","DOI":"10.1145\/1094811.1094849","volume-title":"OOPSLA","author":"Cunei A","year":"2005"},{"key":"e_1_2_1_26_2","first-page":"45","volume-title":"TOOLS (37)","author":"Forax R","year":"2000"},{"key":"e_1_2_1_27_2","doi-asserted-by":"crossref","unstructured":"FlattM KrishnamurthiS FelleisenM.Classes and mixins. Conference Record of POPL 98: The 25th ACM SIGPLAN\u2010SIGACT Symposium on Principles of Programming Languages San Diego CA New York NY 1998;171\u2013183.","DOI":"10.1145\/268946.268961"},{"key":"e_1_2_1_28_2","doi-asserted-by":"publisher","DOI":"10.1145\/320384.320407"},{"key":"e_1_2_1_29_2","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-49538-X_13"},{"key":"e_1_2_1_30_2","first-page":"49","volume-title":"ACM SIGPLAN Notices","author":"Naik M","year":"2000"},{"key":"e_1_2_1_31_2","unstructured":"StroustrupB.Multiple inheritance for C++. Proceedings of the Spring 1987 European Unix Users Group Conference Helsinki 1987."},{"key":"e_1_2_1_32_2","doi-asserted-by":"crossref","unstructured":"AlpernB CocchiA FinkSJ GroveD LieberD.Efficient implementation of Java interfaces: Invokeinterface considered harmless. OOPSLA 2001 Conference on Object\u2010oriented Programming Systems Languages and Applications Tampa FL 2001;108\u2013124.","DOI":"10.1145\/504282.504291"},{"key":"e_1_2_1_33_2","doi-asserted-by":"crossref","unstructured":"ZibinY (Yossi) GilJ.Fast algorithm for creating space efficient dispatching tables with application to multi\u2010dispatching. OOPSLA 2002 Conference on Object\u2010oriented Programming Systems Languages and Applications Seattle WA 2002;142\u2013160.","DOI":"10.1145\/583854.582434"},{"key":"e_1_2_1_34_2","doi-asserted-by":"crossref","unstructured":"DietzfelbingerM KarlinAR MehlhornK Meyer auf der HeideF RohnertH TarjanRE.Dynamic Perfect Hashing: Upper and Lower Bounds. IEEE Symposium on Foundations of Computer Science 1988;524\u2013531.","DOI":"10.1109\/SFCS.1988.21968"},{"key":"e_1_2_1_35_2","unstructured":"DutchynC.Reflection\u2010based implementation of Java extensions: the double\u2010dispatch use\u2010case. Master's Thesis Department of Computing Science University of Alberta Edmonton Alberta Canada 2001."},{"volume-title":"Double dispatch in C++","year":"2004","author":"Bettini L","key":"e_1_2_1_36_2"},{"key":"e_1_2_1_37_2","doi-asserted-by":"publisher","DOI":"10.1007\/BFb0053381"},{"key":"e_1_2_1_38_2","unstructured":"FlattM.Programming languages for reusable software components. Technical Report TR99\u2010345 20 1999."},{"key":"e_1_2_1_39_2","doi-asserted-by":"crossref","unstructured":"FlattM FelleisenM.Units: Cool Modules for HOT Languages. Proceedings of the ACM SIGPLAN '98 Conference on Programming Language Design and Implementation 1998;236\u2013248.","DOI":"10.1145\/277652.277730"},{"key":"e_1_2_1_40_2","doi-asserted-by":"publisher","DOI":"10.1145\/263699.263715"},{"key":"e_1_2_1_41_2","unstructured":"ZengerM OderskyM.Implementing extensible compilers. Workshop on Multiparadigm Programming with Object\u2010oriented Languages Budapest Hungary June 2001."},{"key":"e_1_2_1_42_2","doi-asserted-by":"crossref","unstructured":"BreuelTM.Implementing dynamic language features in Java using dynamic code generation. Proceedings of the 39th International Conference and Exhibition on Technology of Object\u2010oriented Languages and Systems. TOOLS 39 2001;143\u2013152.","DOI":"10.1109\/TOOLS.2001.941668"},{"key":"e_1_2_1_43_2","doi-asserted-by":"crossref","unstructured":"OvlingerJ WandM.A language for specifying traversals of object structures. Technical Report College of Computer Science Northeastern University Boston MA November1998.","DOI":"10.1145\/320384.320391"},{"key":"e_1_2_1_44_2","doi-asserted-by":"publisher","DOI":"10.1145\/504282.504302"},{"key":"e_1_2_1_45_2","unstructured":"MartinRC.Agile Software Development. Pearson Education:2003."},{"key":"e_1_2_1_46_2","first-page":"79","volume-title":"Pattern Languages of Program Design 3","author":"Gamma E","year":"1997"}],"container-title":["Software: Practice and Experience"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/2.zoppoz.workers.dev:443\/https\/api.wiley.com\/onlinelibrary\/tdm\/v1\/articles\/10.1002%2Fspe.878","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/2.zoppoz.workers.dev:443\/https\/onlinelibrary.wiley.com\/doi\/pdf\/10.1002\/spe.878","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,1,30]],"date-time":"2025-01-30T11:20:30Z","timestamp":1738236030000},"score":1,"resource":{"primary":{"URL":"https:\/\/2.zoppoz.workers.dev:443\/https\/onlinelibrary.wiley.com\/doi\/10.1002\/spe.878"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2008,5,22]]},"references-count":45,"journal-issue":{"issue":"14","published-print":{"date-parts":[[2008,11,25]]}},"alternative-id":["10.1002\/spe.878"],"URL":"https:\/\/2.zoppoz.workers.dev:443\/https\/doi.org\/10.1002\/spe.878","archive":["Portico"],"relation":{},"ISSN":["0038-0644","1097-024X"],"issn-type":[{"type":"print","value":"0038-0644"},{"type":"electronic","value":"1097-024X"}],"subject":[],"published":{"date-parts":[[2008,5,22]]}}}