{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,10,2]],"date-time":"2026-10-02T10:29:33Z","timestamp":1790936973991,"version":"4.1.0"},"reference-count":73,"publisher":"Association for Computing Machinery (ACM)","issue":"OOPSLA2","license":[{"start":{"date-parts":[[2022,10,31]],"date-time":"2022-10-31T00:00:00Z","timestamp":1667174400000},"content-version":"vor","delay-in-days":0,"URL":"https:\/\/creativecommons.org\/licenses\/by\/4.0\/"}],"content-domain":{"domain":["dl.acm.org"],"crossmark-restriction":true},"short-container-title":["Proc. ACM Program. Lang."],"published-print":{"date-parts":[[2022,10,31]]},"abstract":"<jats:p>WebAssembly (Wasm) is a compact, well-specified bytecode format that offers a portable compilation target with near-native execution speed. The bytecode format was specifically designed to be fast to parse, validate, and compile, positioning itself as a portable alternative to native code. It was pointedly not designed to be interpreted directly. Instead, design considerations at the time focused on competing with native code, utilizing optimizing compilers as the primary execution tier. Yet, in JIT scenarios, compilation time and memory consumption critically impact application startup, leading many Wasm engines to later deploy faster single-pass (baseline) compilers. Though faster, baseline compilers still take time and waste code space for infrequently executed code. A typical interpreter being infeasible, some engines resort to compiling Wasm not to machine code, but to a more compact, but easy to interpret format. This still takes time and wastes memory. Instead, we introduce in this article a fast in-place interpreter for WebAssembly, where no rewrite and no separate format is necessary. Our evaluation shows that in-place interpretation of Wasm code is space-efficient and fast, achieving performance on-par with interpreting a custom-designed internal format. This fills a hole in the execution tier space for Wasm, allowing for even faster startup and lower memory footprint than previous engine configurations.<\/jats:p>","DOI":"10.1145\/3563311","type":"journal-article","created":{"date-parts":[[2022,10,31]],"date-time":"2022-10-31T16:23:35Z","timestamp":1667233415000},"page":"646-672","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":31,"title":["A fast in-place interpreter for WebAssembly"],"prefix":"10.1145","volume":"6","author":[{"ORCID":"https:\/\/orcid.org\/0000-0002-9690-2089","authenticated-orcid":false,"given":"Ben L.","family":"Titzer","sequence":"first","affiliation":[{"name":"Carnegie Mellon University, USA"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2022,10,31]]},"reference":[{"key":"e_1_2_1_1_1","unstructured":"1998. Hotspot internals: interpreter. https:\/\/openjdk.java.net\/groups\/hotspot\/docs\/RuntimeOverview.html (Accessed 2022-4-07) \t\t\t\t  1998. Hotspot internals: interpreter. https:\/\/openjdk.java.net\/groups\/hotspot\/docs\/RuntimeOverview.html (Accessed 2022-4-07)"},{"key":"e_1_2_1_2_1","unstructured":"2015. lli - directly execute programs from LLVM bitcode. https:\/\/llvm.org\/docs\/CommandGuide\/lli.html (Accessed 2022-4-12) \t\t\t\t  2015. lli - directly execute programs from LLVM bitcode. https:\/\/llvm.org\/docs\/CommandGuide\/lli.html (Accessed 2022-4-12)"},{"key":"e_1_2_1_3_1","unstructured":"2018. https:\/\/v8.dev\/blog\/liftoff (Accessed 2022-4-07) \t\t\t\t  2018. https:\/\/v8.dev\/blog\/liftoff (Accessed 2022-4-07)"},{"key":"e_1_2_1_4_1","unstructured":"2018. TurboFan: V8\u2019s Optimizing Compiler. https:\/\/v8.dev\/docs\/turbofan (Accessed 2021-07-29) \t\t\t\t  2018. TurboFan: V8\u2019s Optimizing Compiler. https:\/\/v8.dev\/docs\/turbofan (Accessed 2021-07-29)"},{"key":"e_1_2_1_5_1","unstructured":"2018. WAVM: a non-browser WebAssembly virtual machine. https:\/\/github.com\/WAVM\/WAVM (Accessed 2022-1-10) \t\t\t\t  2018. WAVM: a non-browser WebAssembly virtual machine. https:\/\/github.com\/WAVM\/WAVM (Accessed 2022-1-10)"},{"key":"e_1_2_1_6_1","unstructured":"2019. A New Bytecode Format for JavaScriptCore. https:\/\/webkit.org\/blog\/9329\/a-new-bytecode-format-for-javascriptcore\/ (Accessed 2022-04-07) \t\t\t\t  2019. A New Bytecode Format for JavaScriptCore. https:\/\/webkit.org\/blog\/9329\/a-new-bytecode-format-for-javascriptcore\/ (Accessed 2022-04-07)"},{"key":"e_1_2_1_7_1","unstructured":"2020. The edge of the multi-cloud. https:\/\/www.fastly.com\/cassets\/6pk8mg3yh2ee\/79dsHLTEfYIMgUwVVllaa4\/5e5330572b8f317f72e16696256d8138\/WhitePaper-Multi-Cloud.pdf (Accessed 2021-07-06) \t\t\t\t  2020. The edge of the multi-cloud. https:\/\/www.fastly.com\/cassets\/6pk8mg3yh2ee\/79dsHLTEfYIMgUwVVllaa4\/5e5330572b8f317f72e16696256d8138\/WhitePaper-Multi-Cloud.pdf (Accessed 2021-07-06)"},{"key":"e_1_2_1_8_1","unstructured":"2020. Wasm3: The fastest WebAssembly interpreter and the most universal runtime.. https:\/\/github.com\/wasm3\/wasm3 (Accessed 2021-08-11) \t\t\t\t  2020. Wasm3: The fastest WebAssembly interpreter and the most universal runtime.. https:\/\/github.com\/wasm3\/wasm3 (Accessed 2021-08-11)"},{"key":"e_1_2_1_9_1","unstructured":"2021. A fast WebAssembly Interpreter design in WASM-Micro-Runtime. https:\/\/www.intel.com\/content\/www\/us\/en\/developer\/articles\/technical\/webassembly-interpreter-design-wasm-micro-runtime.html (Accessed 2022-09-19) \t\t\t\t  2021. A fast WebAssembly Interpreter design in WASM-Micro-Runtime. https:\/\/www.intel.com\/content\/www\/us\/en\/developer\/articles\/technical\/webassembly-interpreter-design-wasm-micro-runtime.html (Accessed 2022-09-19)"},{"key":"e_1_2_1_10_1","unstructured":"2021. JavaScriptCore the built-in JavaScript engine for WebKit. https:\/\/trac.webkit.org\/wiki\/JavaScriptCore (Accessed 2021-07-29) \t\t\t\t  2021. JavaScriptCore the built-in JavaScript engine for WebKit. https:\/\/trac.webkit.org\/wiki\/JavaScriptCore (Accessed 2021-07-29)"},{"key":"e_1_2_1_11_1","unstructured":"2021. SpiderMonkey: Mozilla\u2019s JavaScript and WebAssembly engine. https:\/\/spidermonkey.dev (Accessed 2021-07-29) \t\t\t\t  2021. SpiderMonkey: Mozilla\u2019s JavaScript and WebAssembly engine. https:\/\/spidermonkey.dev (Accessed 2021-07-29)"},{"key":"e_1_2_1_12_1","unstructured":"2021. V8 Development Site. https:\/\/v8.dev (Accessed 2021-07-29) \t\t\t\t  2021. V8 Development Site. https:\/\/v8.dev (Accessed 2021-07-29)"},{"key":"e_1_2_1_13_1","unstructured":"2021. Wasmer: A Fast and Secure WebAssembly Runtime. https:\/\/github.com\/wasmerio\/wasmer (Accessed 2021-07-06) \t\t\t\t  2021. Wasmer: A Fast and Secure WebAssembly Runtime. https:\/\/github.com\/wasmerio\/wasmer (Accessed 2021-07-06)"},{"key":"e_1_2_1_14_1","unstructured":"2021. Wasmtime: a standalone runtime for WebAssembly. https:\/\/github.com\/bytecodealliance\/wasmtime (Accessed 2021-08-11) \t\t\t\t  2021. Wasmtime: a standalone runtime for WebAssembly. https:\/\/github.com\/bytecodealliance\/wasmtime (Accessed 2021-08-11)"},{"key":"e_1_2_1_15_1","unstructured":"2022. Ignition: a fast low-level interpreter. https:\/\/v8.dev\/docs\/ignition (Accessed 2022-04-11) \t\t\t\t  2022. Ignition: a fast low-level interpreter. https:\/\/v8.dev\/docs\/ignition (Accessed 2022-04-11)"},{"key":"e_1_2_1_16_1","unstructured":"2022. Labels as Values (GNU Compiler Collection). https:\/\/gcc.gnu.org\/onlinedocs\/gcc\/Labels-as-Values.html (Accessed 2022-04-11) \t\t\t\t  2022. Labels as Values (GNU Compiler Collection). https:\/\/gcc.gnu.org\/onlinedocs\/gcc\/Labels-as-Values.html (Accessed 2022-04-11)"},{"key":"e_1_2_1_17_1","unstructured":"2022. LEB128. https:\/\/en.wikipedia.org\/wiki\/LEB128 (Accessed 2022-04-11) \t\t\t\t  2022. LEB128. https:\/\/en.wikipedia.org\/wiki\/LEB128 (Accessed 2022-04-11)"},{"key":"e_1_2_1_18_1","unstructured":"2022. WebAssembly Micro Runtime (WAMR). https:\/\/github.com\/bytecodealliance\/wasm-micro-runtime (Accessed 2022-04-11) \t\t\t\t  2022. WebAssembly Micro Runtime (WAMR). https:\/\/github.com\/bytecodealliance\/wasm-micro-runtime (Accessed 2022-04-11)"},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/3158140"},{"key":"e_1_2_1_20_1","doi-asserted-by":"publisher","DOI":"10.1145\/2617548.2617552"},{"key":"e_1_2_1_21_1","doi-asserted-by":"publisher","DOI":"10.1145\/362248.362270"},{"key":"e_1_2_1_22_1","doi-asserted-by":"publisher","DOI":"10.1145\/1565824.1565827"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/1869631.1869633"},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/1286821.1286828"},{"key":"e_1_2_1_25_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-31985-6_18"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/384286.264209"},{"key":"e_1_2_1_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/2451116.2451141"},{"key":"e_1_2_1_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/858570.858575"},{"key":"e_1_2_1_29_1","doi-asserted-by":"publisher","DOI":"10.1145\/96709.96735"},{"key":"e_1_2_1_30_1","doi-asserted-by":"publisher","DOI":"10.1145\/360825.360849"},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1145\/143095.143140"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1145\/1059579.1059583"},{"key":"e_1_2_1_33_1","doi-asserted-by":"publisher","DOI":"10.1145\/1059579.1059583"},{"key":"e_1_2_1_34_1","doi-asserted-by":"publisher","DOI":"10.1002\/spe.434"},{"key":"e_1_2_1_35_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-11980-9_13"},{"key":"e_1_2_1_36_1","doi-asserted-by":"publisher","DOI":"10.1145\/1542476.1542528"},{"key":"e_1_2_1_37_1","doi-asserted-by":"publisher","DOI":"10.1145\/3357390.3361029"},{"key":"e_1_2_1_38_1","doi-asserted-by":"publisher","DOI":"10.1145\/3062341.3062363"},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/3453483.3454070"},{"key":"e_1_2_1_40_1","doi-asserted-by":"publisher","DOI":"10.1145\/2576195.2576205"},{"key":"e_1_2_1_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/3167132.3167266"},{"key":"e_1_2_1_42_1","doi-asserted-by":"publisher","DOI":"10.1109\/ISCA.2016.34"},{"key":"e_1_2_1_43_1","doi-asserted-by":"publisher","DOI":"10.1145\/3458864.3466910"},{"key":"e_1_2_1_44_1","doi-asserted-by":"publisher","DOI":"10.1145\/367177.367199"},{"key":"e_1_2_1_45_1","unstructured":"Microsoft. 2021. ChakraCore: a JavaScript engine with a C API. https:\/\/github.com\/chakra-core\/ChakraCore (Accessed 2021-07-29) \t\t\t\t  Microsoft. 2021. ChakraCore: a JavaScript engine with a C API. https:\/\/github.com\/chakra-core\/ChakraCore (Accessed 2021-07-29)"},{"key":"e_1_2_1_46_1","doi-asserted-by":"publisher","DOI":"10.1145\/1508244.1508275"},{"key":"e_1_2_1_47_1","doi-asserted-by":"publisher","DOI":"10.1145\/3434770.3459731"},{"key":"e_1_2_1_48_1","doi-asserted-by":"publisher","DOI":"10.1145\/3242947.3242948"},{"key":"e_1_2_1_49_1","doi-asserted-by":"publisher","DOI":"10.1109\/IC2E52221.2021.00032"},{"key":"e_1_2_1_50_1","doi-asserted-by":"publisher","DOI":"10.1145\/605397.605404"},{"key":"e_1_2_1_51_1","unstructured":"Jens Palsberg. 2014. From Java to Mips in Four Nifty Steps. http:\/\/web.cs.ucla.edu\/classes\/spring11\/cs132\/kannan\/index.html (Accessed 2022-4-07) \t\t\t\t  Jens Palsberg. 2014. From Java to Mips in Four Nifty Steps. http:\/\/web.cs.ucla.edu\/classes\/spring11\/cs132\/kannan\/index.html (Accessed 2022-4-07)"},{"key":"e_1_2_1_52_1","doi-asserted-by":"publisher","DOI":"10.1145\/1059579.1059584"},{"key":"e_1_2_1_53_1","doi-asserted-by":"publisher","DOI":"10.1145\/277650.277743"},{"key":"e_1_2_1_54_1","unstructured":"Filip Pizlo. 2016. Introducing the B3 JIT Compiler. https:\/\/webkit.org\/blog\/5852\/introducing-the-b3-jit-compiler\/ (Accessed 2022-4-12) \t\t\t\t  Filip Pizlo. 2016. Introducing the B3 JIT Compiler. https:\/\/webkit.org\/blog\/5852\/introducing-the-b3-jit-compiler\/ (Accessed 2022-4-12)"},{"key":"e_1_2_1_55_1","doi-asserted-by":"publisher","DOI":"10.1145\/199448.199526"},{"key":"e_1_2_1_56_1","doi-asserted-by":"publisher","DOI":"10.1145\/1449955.1449796"},{"key":"e_1_2_1_57_1","doi-asserted-by":"publisher","DOI":"10.1109\/CGO.2015.7054191"},{"key":"e_1_2_1_58_1","doi-asserted-by":"publisher","DOI":"10.1145\/2532642"},{"key":"e_1_2_1_59_1","doi-asserted-by":"publisher","DOI":"10.1145\/1064979.1065001"},{"key":"e_1_2_1_60_1","doi-asserted-by":"publisher","DOI":"10.1145\/2491956.2491962"},{"key":"e_1_2_1_61_1","unstructured":"Ben L. Titzer. 2021. Wizard An advanced WebAssembly Engine for Research. https:\/\/github.com\/titzer\/wizard-engine (Accessed 2021-07-29) \t\t\t\t  Ben L. Titzer. 2021. Wizard An advanced WebAssembly Engine for Research. https:\/\/github.com\/titzer\/wizard-engine (Accessed 2021-07-29)"},{"key":"e_1_2_1_62_1","unstructured":"Ben L. Titzer. 2022. Oopsla 2022 Artifact. https:\/\/github.com\/titzer\/oopsla22-artifact (Accessed 2021-10-1) \t\t\t\t  Ben L. Titzer. 2022. Oopsla 2022 Artifact. https:\/\/github.com\/titzer\/oopsla22-artifact (Accessed 2021-10-1)"},{"key":"e_1_2_1_63_1","doi-asserted-by":"publisher","DOI":"10.5281\/zenodo.7093079"},{"key":"e_1_2_1_64_1","doi-asserted-by":"publisher","DOI":"10.1145\/1065910.1065919"},{"key":"e_1_2_1_65_1","doi-asserted-by":"publisher","DOI":"10.1145\/1772954.1772993"},{"key":"e_1_2_1_66_1","doi-asserted-by":"publisher","DOI":"10.1145\/1366230.1366265"},{"key":"e_1_2_1_67_1","doi-asserted-by":"publisher","DOI":"10.1145\/2480360.2384587"},{"key":"e_1_2_1_68_1","doi-asserted-by":"publisher","DOI":"10.1145\/1629175.1629203"},{"key":"e_1_2_1_69_1","unstructured":"Alon Zakai. 2013. asm.js: an extraordinarily optimizable low-level subset of JavaScript. http:\/\/asmjs.org (Accessed 2021-07-29) \t\t\t\t  Alon Zakai. 2013. asm.js: an extraordinarily optimizable low-level subset of JavaScript. http:\/\/asmjs.org (Accessed 2021-07-29)"},{"key":"e_1_2_1_70_1","doi-asserted-by":"publisher","DOI":"10.5555\/1105634.1105657"},{"key":"e_1_2_1_71_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.scico.2021.102759"},{"key":"e_1_2_1_72_1","doi-asserted-by":"publisher","DOI":"10.1016\/j.micpro.2015.05.004"},{"key":"e_1_2_1_73_1","doi-asserted-by":"publisher","DOI":"10.1145\/2724942.2724944"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3563311","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3563311","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T12:38:10Z","timestamp":1750163890000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3563311"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2022,10,31]]},"references-count":73,"journal-issue":{"issue":"OOPSLA2","published-print":{"date-parts":[[2022,10,31]]}},"alternative-id":["10.1145\/3563311"],"URL":"https:\/\/doi.org\/10.1145\/3563311","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2022,10,31]]},"assertion":[{"value":"2022-10-31","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}