{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,7,16]],"date-time":"2026-07-16T06:14:38Z","timestamp":1784182478926,"version":"3.55.0"},"reference-count":32,"publisher":"Association for Computing Machinery (ACM)","issue":"OOPSLA","license":[{"start":{"date-parts":[[2020,11,13]],"date-time":"2020-11-13T00:00:00Z","timestamp":1605225600000},"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":[[2020,11,13]]},"abstract":"<jats:p>TypeScript is a dynamically typed language widely used to develop large-scale applications nowadays. These applications are usually designed with complex class or interface hierarchies and have highly polymorphic behaviors. These object-oriented (OO) features will lead to inefficient inline caches (ICs) or trigger deoptimizations, which impact the performance of TypeScript applications.<\/jats:p>\n          <jats:p>To address this problem, we introduce an inline caching design called hidden inheritance (HI). The basic idea of HI is to cache the static information of class or interface hierarchies into hidden classes, which are leveraged to generate efficient inline caches for improving the performance of OO-style TypeScript programs. The HI design is implemented in a TypeScript engine STSC (Static TypeScript Compiler) including a static compiler and a runtime system. STSC statically generates hidden classes and enhanced inline caches, which are applied to generate specialized machine code via ahead-of-time compilation (AOTC) or just-in-time compilation (JITC). To evaluate the efficiency of this technique, we implement STSC on a state-of-the-art JavaScript virtual machine V8 and demonstrate its performance improvements on industrial benchmarks and applications.<\/jats:p>","DOI":"10.1145\/3428242","type":"journal-article","created":{"date-parts":[[2020,11,24]],"date-time":"2020-11-24T23:40:14Z","timestamp":1606261214000},"page":"1-29","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":6,"title":["Hidden inheritance: an inline caching design for TypeScript performance"],"prefix":"10.1145","volume":"4","author":[{"given":"Zhefeng","family":"Wu","sequence":"first","affiliation":[{"name":"Alibaba Group, China"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Zhe","family":"Sun","sequence":"additional","affiliation":[{"name":"Alibaba Group, China"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Kai","family":"Gong","sequence":"additional","affiliation":[{"name":"Alibaba Group, China"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Lingyun","family":"Chen","sequence":"additional","affiliation":[{"name":"Alibaba Group, China"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Bin","family":"Liao","sequence":"additional","affiliation":[{"name":"Alibaba Group, China"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"given":"Yihua","family":"Jin","sequence":"additional","affiliation":[{"name":"Alibaba Group, China"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2020,11,13]]},"reference":[{"key":"e_1_2_2_1_1","unstructured":"Angular2. 2017. Google Angular JS Framework. https:\/\/developers.google.com\/v8\/.  Angular2. 2017. Google Angular JS Framework. https:\/\/developers.google.com\/v8\/."},{"key":"e_1_2_2_2_1","unstructured":"Apple. 2018. JavaScriptCore. https:\/\/github.com\/WebKit\/webkit\/tree\/master\/Source\/JavaScriptCore.  Apple. 2018. JavaScriptCore. https:\/\/github.com\/WebKit\/webkit\/tree\/master\/Source\/JavaScriptCore."},{"key":"e_1_2_2_3_1","unstructured":"Artoul. 2015. Javascript Hidden Classes and Inline Caching in V8. http:\/\/richardartoul.github.io\/jekyll\/update\/ 2015 \/04\/26\/ hidden-classes.html..  Artoul. 2015. Javascript Hidden Classes and Inline Caching in V8. http:\/\/richardartoul.github.io\/jekyll\/update\/ 2015 \/04\/26\/ hidden-classes.html.."},{"key":"e_1_2_2_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/3357390.3361032"},{"key":"e_1_2_2_5_1","unstructured":"Bevenius. 2018. Learning Google V8. https:\/\/github.com\/danbev\/learning-v8..  Bevenius. 2018. Learning Google V8. https:\/\/github.com\/danbev\/learning-v8.."},{"key":"e_1_2_2_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/2384616.2384631"},{"key":"e_1_2_2_7_1","first-page":"49","volume-title":"Conference Proceedings on Object-oriented Programming Systems, Languages and Applications (OOPSLA '89)","author":"Chambers C."},{"key":"e_1_2_2_8_1","doi-asserted-by":"publisher","DOI":"10.1145\/3314221.3314587"},{"key":"e_1_2_2_9_1","first-page":"35","article-title":"A Simple Graph-based Intermediate Representation. In Papers from the 1995 ACM SIGPLAN Workshop on Intermediate Representations (IR '95). ACM, New York","author":"Click Clif","year":"1995","journal-title":"NY, USA"},{"key":"e_1_2_2_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/583810.583821"},{"key":"e_1_2_2_11_1","first-page":"105","volume-title":"Proceedings of the 2015 International Symposium on Memory Management (ISMM '15)","author":"Cliford Daniel"},{"key":"e_1_2_2_12_1","first-page":"297","volume-title":"Proceedings of the 11th ACM SIGACT-SIGPLAN Symposium on Principles of Programming Languages (POPL '84)","author":"Peter Deutsch L."},{"key":"e_1_2_2_13_1","unstructured":"Egret-3d. 2017. Egret 3D Game Engine. https:\/\/github.com\/egret-labs\/egret-core.  Egret-3d. 2017. Egret 3D Game Engine. https:\/\/github.com\/egret-labs\/egret-core."},{"key":"e_1_2_2_14_1","unstructured":"Facebook. 2013. React.js Framework. https:\/\/reactjs.org\/.  Facebook. 2013. React.js Framework. https:\/\/reactjs.org\/."},{"key":"e_1_2_2_15_1","unstructured":"Ben Frederickson. 2015. Ranking. https:\/\/www.benfrederickson. com\/ranking-programming-languages-by-github-users\/.  Ben Frederickson. 2015. Ranking. https:\/\/www.benfrederickson. com\/ranking-programming-languages-by-github-users\/."},{"key":"e_1_2_2_16_1","unstructured":"Google. 2015. Code Caching. https:\/\/v8.dev\/blog\/code-caching.  Google. 2015. Code Caching. https:\/\/v8.dev\/blog\/code-caching."},{"key":"e_1_2_2_17_1","unstructured":"Google-V8. 2019. V8 JavaScript Engine. https:\/\/developers.google.com\/v8\/.  Google-V8. 2019. V8 JavaScript Engine. https:\/\/developers.google.com\/v8\/."},{"key":"e_1_2_2_18_1","doi-asserted-by":"publisher","DOI":"10.5555\/646149.679193"},{"key":"e_1_2_2_19_1","unstructured":"IDE-VSCode. 2017. Microsoft Visual Studio Code-Open Source. https:\/\/github.com\/Microsoft\/vscode.  IDE-VSCode. 2017. Microsoft Visual Studio Code-Open Source. https:\/\/github.com\/Microsoft\/vscode."},{"key":"e_1_2_2_20_1","unstructured":"Microsoft. 2014. TypeScript Specification. http:\/\/www.typescriptlang.org\/.  Microsoft. 2014. TypeScript Specification. http:\/\/www.typescriptlang.org\/."},{"key":"e_1_2_2_21_1","unstructured":"Microsoft. 2018. ChakraCore. https:\/\/github.com\/Microsoft\/ChakraCore.  Microsoft. 2018. ChakraCore. https:\/\/github.com\/Microsoft\/ChakraCore."},{"key":"e_1_2_2_22_1","unstructured":"NativeScript. 2017. NativeScript: A Framework of Native Mobile Applications. https:\/\/github.com\/nativescript.  NativeScript. 2017. NativeScript: A Framework of Native Mobile Applications. https:\/\/github.com\/nativescript."},{"key":"e_1_2_2_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/3125501.3125512"},{"key":"e_1_2_2_24_1","doi-asserted-by":"publisher","DOI":"10.1145\/1806596.1806598"},{"key":"e_1_2_2_25_1","doi-asserted-by":"publisher","DOI":"10.4230\/LIPIcs.ECOOP.2015.76"},{"key":"e_1_2_2_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/3276945.3276950"},{"key":"e_1_2_2_27_1","doi-asserted-by":"publisher","DOI":"10.1145\/3302516.3307344"},{"key":"e_1_2_2_28_1","unstructured":"Stackoverflow. 2017. Programming Languages. https:\/\/insights.stackoverflow.com\/survey\/2017technology.  Stackoverflow. 2017. Programming Languages. https:\/\/insights.stackoverflow.com\/survey\/2017technology."},{"key":"e_1_2_2_29_1","unstructured":"Superpowers. 2018. Superpowers. https:\/\/github.com\/superpowers\/superpowers-core.  Superpowers. 2018. Superpowers. https:\/\/github.com\/superpowers\/superpowers-core."},{"key":"e_1_2_2_30_1","unstructured":"Tiobe. 2020. Programming Languages. https:\/\/www.tiobe.com\/tiobe-index\/.  Tiobe. 2020. Programming Languages. https:\/\/www.tiobe.com\/tiobe-index\/."},{"key":"e_1_2_2_31_1","unstructured":"Vue.js. 2019. Vue.js Framework. https:\/\/github.com\/vuejs\/vue-next.  Vue.js. 2019. Vue.js Framework. https:\/\/github.com\/vuejs\/vue-next."},{"key":"e_1_2_2_32_1","unstructured":"WebKit. 2019. JetStream2 Benchmarks. https:\/\/github.com\/WebKit\/webkit\/tree\/master\/PerformanceTests\/JetStream2.  WebKit. 2019. JetStream2 Benchmarks. https:\/\/github.com\/WebKit\/webkit\/tree\/master\/PerformanceTests\/JetStream2."}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3428242","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3428242","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T22:02:57Z","timestamp":1750197777000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3428242"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2020,11,13]]},"references-count":32,"journal-issue":{"issue":"OOPSLA","published-print":{"date-parts":[[2020,11,13]]}},"alternative-id":["10.1145\/3428242"],"URL":"https:\/\/doi.org\/10.1145\/3428242","relation":{},"ISSN":["2475-1421"],"issn-type":[{"value":"2475-1421","type":"electronic"}],"subject":[],"published":{"date-parts":[[2020,11,13]]},"assertion":[{"value":"2020-11-13","order":2,"name":"published","label":"Published","group":{"name":"publication_history","label":"Publication History"}}]}}