{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,9,30]],"date-time":"2026-09-30T18:58:14Z","timestamp":1790794694590,"version":"4.1.0"},"reference-count":49,"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\/"}],"funder":[{"name":"EPSRC","award":["EP\/T006544\/1, EP\/K011715\/1, EP\/K034413\/1, EP\/L00058X\/1, EP\/N027833\/1, EP\/N028201\/1, EP\/T006544\/1, EP\/T014709\/1, EP\/V000462\/1 and EP\/X015955\/1"],"award-info":[{"award-number":["EP\/T006544\/1, EP\/K011715\/1, EP\/K034413\/1, EP\/L00058X\/1, EP\/N027833\/1, EP\/N028201\/1, EP\/T006544\/1, EP\/T014709\/1, EP\/V000462\/1 and EP\/X015955\/1"]}]},{"name":"NC-SS\/EPSRC","award":["VeTSS"],"award-info":[{"award-number":["VeTSS"]}]},{"DOI":"10.13039\/501100012642","name":"Mozilla Foundation","doi-asserted-by":"publisher","award":["Research Award"],"award-info":[{"award-number":["Research Award"]}],"id":[{"id":"10.13039\/501100012642","id-type":"DOI","asserted-by":"publisher"}]},{"name":"Ethereum","award":["Grant"],"award-info":[{"award-number":["Grant"]}]}],"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>Go is a popular statically-typed industrial programming language. To aid the type safe reuse of code, the  \nrecent Go release (Go 1.18) published early 2022 includes bounded parametric polymorphism via generic types.  \nGo 1.18 implements generic types using a combination of monomorphisation and call-graph based  \ndictionary-passing called hybrid. This hybrid approach can be viewed as an optimised form of monomorphisation that  \nstatically generates specialised methods and types based on possible instantiations. A monolithic dictionary  \nsupplements information lost during monomorphisation, and is structured according to the program\u2019s call  \ngraph. Unfortunately, the hybrid approach still suffers from code bloat, poor compilation speed, and limited  \ncode coverage.<\/jats:p>\n          <jats:p>In this paper we propose and formalise a new non-specialising call-site based dictionary-passing translation.  \nOur call-site based translation creates individual dictionaries for each type parameter, with dictionary  \nconstruction occurring in place of instantiation, overcoming the limitations of hybrid. We prove it correct using  \na novel and general bisimulation up to technique. To better understand how different generics translation  \napproaches work in practice, we benchmark five translators, Go 1.18, two existing monomorphisation  \ntranslators, our dictionary-passing translator, and an erasure translator. Our findings reveal several suggestions for  \nimprovements for Go 1.18\u2014 specifically how to overcome the expressiveness limitations of generic Go and  \nimprove compile time and compiled code size performance of Go 1.18.<\/jats:p>","DOI":"10.1145\/3563331","type":"journal-article","created":{"date-parts":[[2022,10,31]],"date-time":"2022-10-31T20:23:35Z","timestamp":1667247815000},"page":"1207-1235","update-policy":"https:\/\/doi.org\/10.1145\/crossmark-policy","source":"Crossref","is-referenced-by-count":5,"title":["Generic go to go: dictionary-passing, monomorphisation, and hybrid"],"prefix":"10.1145","volume":"6","author":[{"ORCID":"https:\/\/orcid.org\/0000-0002-3556-2201","authenticated-orcid":false,"given":"Stephen","family":"Ellis","sequence":"first","affiliation":[{"name":"University of Oxford, UK"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0003-3689-7668","authenticated-orcid":false,"given":"Shuofei","family":"Zhu","sequence":"additional","affiliation":[{"name":"Pennsylvania State University, USA"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-3925-8557","authenticated-orcid":false,"given":"Nobuko","family":"Yoshida","sequence":"additional","affiliation":[{"name":"University of Oxford, UK"}],"role":[{"vocabulary":"crossref","role":"author"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-3185-9278","authenticated-orcid":false,"given":"Linhai","family":"Song","sequence":"additional","affiliation":[{"name":"Pennsylvania State University, USA"}],"role":[{"vocabulary":"crossref","role":"author"}]}],"member":"320","published-online":{"date-parts":[[2022,10,31]]},"reference":[{"key":"e_1_2_1_1_1","doi-asserted-by":"publisher","DOI":"10.1145\/263698.263720"},{"key":"e_1_2_1_2_1","volume-title":"Proceedings of the Inaugural Conference on the Principles and Practice of Programming, 2002 and Proceedings of the Second Workshop on Intermediate Representation Engineering for Virtual Machines","author":"Allen Eric","year":"2002","unstructured":"Eric Allen and Robert Cartwright . 2002 . The Case for Run-Time Types in Generic Java . In Proceedings of the Inaugural Conference on the Principles and Practice of Programming, 2002 and Proceedings of the Second Workshop on Intermediate Representation Engineering for Virtual Machines , 2002 (PPPJ \u201902\/IRE \u201902). National University of Ireland, Maynooth, County Kildare, IRL. 19\u201324. isbn:0 901519 87 1 Eric Allen and Robert Cartwright. 2002. The Case for Run-Time Types in Generic Java. In Proceedings of the Inaugural Conference on the Principles and Practice of Programming, 2002 and Proceedings of the Second Workshop on Intermediate Representation Engineering for Virtual Machines, 2002 (PPPJ \u201902\/IRE \u201902). National University of Ireland, Maynooth, County Kildare, IRL. 19\u201324. isbn:0 901519 87 1"},{"key":"e_1_2_1_3_1","volume-title":"Katoen","author":"Baier Christal","year":"2008","unstructured":"Christal Baier and Joost P . Katoen . 2008 . Principles of Model Checking. MIT Press , United States. isbn:978-0-262-02649-9 Christal Baier and Joost P. Katoen. 2008. Principles of Model Checking. MIT Press, United States. isbn:978-0-262-02649-9"},{"key":"e_1_2_1_4_1","doi-asserted-by":"publisher","DOI":"10.1145\/3341695"},{"key":"e_1_2_1_5_1","doi-asserted-by":"publisher","DOI":"10.1016\/0304-3975(88)90098-9"},{"key":"e_1_2_1_6_1","doi-asserted-by":"publisher","DOI":"10.1145\/99370.99392"},{"key":"e_1_2_1_7_1","doi-asserted-by":"publisher","DOI":"10.1145\/2384616.2384631"},{"key":"e_1_2_1_8_1","unstructured":"Clement Rey. 2018. go-internals. https:\/\/github.com\/teh-cmc\/go-internals\/blob\/master\/chapter2_interfaces\/README.md#anatomy-of-an-interface (Accessed on 04\/15\/2022). \t\t\t\t  Clement Rey. 2018. go-internals. https:\/\/github.com\/teh-cmc\/go-internals\/blob\/master\/chapter2_interfaces\/README.md#anatomy-of-an-interface (Accessed on 04\/15\/2022)."},{"key":"e_1_2_1_9_1","doi-asserted-by":"publisher","DOI":"10.1145\/291251.289459"},{"key":"e_1_2_1_10_1","unstructured":"Docker. 2021. Docker - Build Ship and Run Any App Anywhere. https:\/\/www.docker.com\/ (Accessed on 04\/15\/2022). \t\t\t\t  Docker. 2021. Docker - Build Ship and Run Any App Anywhere. https:\/\/www.docker.com\/ (Accessed on 04\/15\/2022)."},{"key":"e_1_2_1_11_1","doi-asserted-by":"publisher","DOI":"10.1145\/236337.236369"},{"key":"e_1_2_1_12_1","doi-asserted-by":"publisher","DOI":"10.5281\/zenodo.7067362"},{"key":"e_1_2_1_13_1","unstructured":"Stephen Ellis Shuofei Zhu Nobuko Yoshida and Linhai Song. 2022. fgg2go. https:\/\/github.com\/sfzhu93\/fgg2go \t\t\t\t  Stephen Ellis Shuofei Zhu Nobuko Yoshida and Linhai Song. 2022. fgg2go. https:\/\/github.com\/sfzhu93\/fgg2go"},{"key":"e_1_2_1_14_1","unstructured":"Stephen Ellis Shuofei Zhu Nobuko Yoshida and Linhai Song. 2022. fgg2go. https:\/\/archive.softwareheritage.org\/browse\/origin\/directory\/?origin_url=https:\/\/github.com\/sfzhu93\/fgg2go \t\t\t\t  Stephen Ellis Shuofei Zhu Nobuko Yoshida and Linhai Song. 2022. fgg2go. https:\/\/archive.softwareheritage.org\/browse\/origin\/directory\/?origin_url=https:\/\/github.com\/sfzhu93\/fgg2go"},{"key":"#cr-split#-e_1_2_1_15_1.1","unstructured":"Stephen Ellis Shuofei Zhu Nobuko Yoshida and Linhai Song. 2022. Generic Go to Go: Dictionary-Passing Monomorphisation and Hybrid. https:\/\/doi.org\/10.48550\/ARXIV.2208.06810 10.48550\/ARXIV.2208.06810"},{"key":"#cr-split#-e_1_2_1_15_1.2","doi-asserted-by":"crossref","unstructured":"Stephen Ellis Shuofei Zhu Nobuko Yoshida and Linhai Song. 2022. Generic Go to Go: Dictionary-Passing Monomorphisation and Hybrid. https:\/\/doi.org\/10.48550\/ARXIV.2208.06810","DOI":"10.1145\/3563331"},{"key":"e_1_2_1_16_1","unstructured":"Free Software Foundation. 2021. objdump(1) - Linux manual page. https:\/\/man7.org\/linux\/man-pages\/man1\/objdump.1.html (Accessed on 04\/15\/2022). \t\t\t\t  Free Software Foundation. 2021. objdump(1) - Linux manual page. https:\/\/man7.org\/linux\/man-pages\/man1\/objdump.1.html (Accessed on 04\/15\/2022)."},{"key":"e_1_2_1_17_1","doi-asserted-by":"publisher","DOI":"10.1145\/1543135.1542528"},{"key":"e_1_2_1_18_1","unstructured":"gitchander. 2021. Permutation. https:\/\/github.com\/gitchander\/permutation (Accessed on 04\/15\/2022). \t\t\t\t  gitchander. 2021. Permutation. https:\/\/github.com\/gitchander\/permutation (Accessed on 04\/15\/2022)."},{"key":"e_1_2_1_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/3428217"},{"key":"e_1_2_1_20_1","unstructured":"gRPC. 2021. A high performance open-source universal RPC framework. https:\/\/github.com\/grpc\/grpc-go \t\t\t\t  gRPC. 2021. A high performance open-source universal RPC framework. https:\/\/github.com\/grpc\/grpc-go"},{"key":"e_1_2_1_21_1","unstructured":"Raymond Hu. 2021. Mini prototype of FG\/FGG\/FGR in Go. https:\/\/github.com\/rhu1\/fgg \t\t\t\t  Raymond Hu. 2021. Mini prototype of FG\/FGG\/FGR in Go. https:\/\/github.com\/rhu1\/fgg"},{"key":"e_1_2_1_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/320384.320395"},{"key":"e_1_2_1_24_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-56610-4_61"},{"key":"e_1_2_1_25_1","doi-asserted-by":"publisher","DOI":"10.1007\/BF01019005"},{"key":"e_1_2_1_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/378795.378797"},{"key":"e_1_2_1_27_1","unstructured":"Kubernetes. 2021. Production-Grade Container Orchestration. https:\/\/kubernetes.io\/ (Accessed on 04\/15\/2022). \t\t\t\t  Kubernetes. 2021. Production-Grade Container Orchestration. https:\/\/kubernetes.io\/ (Accessed on 04\/15\/2022)."},{"key":"e_1_2_1_28_1","doi-asserted-by":"publisher","DOI":"10.1007\/s10817-009-9155-4"},{"key":"e_1_2_1_29_1","unstructured":"Alice Merrick. 2020. Go Developer Survey 2020 Results. https:\/\/blog.golang.org\/survey2020-results (Accessed on 04\/15\/2022). \t\t\t\t  Alice Merrick. 2020. Go Developer Survey 2020 Results. https:\/\/blog.golang.org\/survey2020-results (Accessed on 04\/15\/2022)."},{"key":"e_1_2_1_30_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-55719-9_114"},{"key":"e_1_2_1_31_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-39953-4_10"},{"key":"e_1_2_1_32_1","doi-asserted-by":"publisher","DOI":"10.1145\/263699.263715"},{"key":"e_1_2_1_33_1","unstructured":"Keith Randall. 2020. Generics implementation - Dictionaries. https:\/\/go.googlesource.com\/proposal\/+\/refs\/heads\/master\/design\/generics-implementation-dictionaries.md (Accessed on 04\/15\/2022). \t\t\t\t  Keith Randall. 2020. Generics implementation - Dictionaries. https:\/\/go.googlesource.com\/proposal\/+\/refs\/heads\/master\/design\/generics-implementation-dictionaries.md (Accessed on 04\/15\/2022)."},{"key":"e_1_2_1_34_1","unstructured":"Keith Randall. 2020. Generics implementation - GC Shape Stenciling. https:\/\/go.googlesource.com\/proposal\/+\/refs\/heads\/master\/design\/generics-implementation-gcshape.md (Accessed on 04\/15\/2022). \t\t\t\t  Keith Randall. 2020. Generics implementation - GC Shape Stenciling. https:\/\/go.googlesource.com\/proposal\/+\/refs\/heads\/master\/design\/generics-implementation-gcshape.md (Accessed on 04\/15\/2022)."},{"key":"e_1_2_1_35_1","unstructured":"Keith Randall. 2020. Generics implementation - Stenciling. https:\/\/go.googlesource.com\/proposal\/+\/refs\/heads\/master\/design\/generics-implementation-stenciling.md (Accessed on 04\/15\/2022). \t\t\t\t  Keith Randall. 2020. Generics implementation - Stenciling. https:\/\/go.googlesource.com\/proposal\/+\/refs\/heads\/master\/design\/generics-implementation-stenciling.md (Accessed on 04\/15\/2022)."},{"key":"e_1_2_1_36_1","unstructured":"Keith Randall. 2022. Go 1.18 Implementation of Generics via Dictionaries and Gcshape Stenciling. https:\/\/github.com\/golang\/proposal\/blob\/e9af402b19db4352e7831b33a3f47719e86a5267\/design\/generics-implementation-dictionaries-go1.18.md (Accessed on 04\/15\/2022). \t\t\t\t  Keith Randall. 2022. Go 1.18 Implementation of Generics via Dictionaries and Gcshape Stenciling. https:\/\/github.com\/golang\/proposal\/blob\/e9af402b19db4352e7831b33a3f47719e86a5267\/design\/generics-implementation-dictionaries-go1.18.md (Accessed on 04\/15\/2022)."},{"key":"e_1_2_1_37_1","unstructured":"Russ Cox. 2009. Go Data Structures: Interfaces. https:\/\/research.swtch.com\/interfaces \t\t\t\t  Russ Cox. 2009. Go Data Structures: Interfaces. https:\/\/research.swtch.com\/interfaces"},{"key":"e_1_2_1_38_1","unstructured":"Michael Salib. 2004. Starkiller: A static type inferencer and compiler for Python. Ph.D. Dissertation. Massachusetts Institute of Technology. \t\t\t\t  Michael Salib. 2004. Starkiller: A static type inferencer and compiler for Python. Ph.D. Dissertation. Massachusetts Institute of Technology."},{"key":"e_1_2_1_39_1","doi-asserted-by":"publisher","DOI":"10.1145\/286936.286959"},{"key":"e_1_2_1_40_1","unstructured":"IEEE Spectrum. 2022. Top Programming Languages - IEEE Spectrum. https:\/\/spectrum.ieee.org\/top-programming-languages\/ (Accessed on 04\/15\/2022). \t\t\t\t  IEEE Spectrum. 2022. Top Programming Languages - IEEE Spectrum. https:\/\/spectrum.ieee.org\/top-programming-languages\/ (Accessed on 04\/15\/2022)."},{"key":"e_1_2_1_41_1","unstructured":"Stack Overflow. 2021. 2021 Developer Survey. https:\/\/insights.stackoverflow.com\/survey\/2021 (Accessed on 04\/15\/2022). \t\t\t\t  Stack Overflow. 2021. 2021 Developer Survey. https:\/\/insights.stackoverflow.com\/survey\/2021 (Accessed on 04\/15\/2022)."},{"key":"e_1_2_1_42_1","volume-title":"The C++ Programming Language (3^ rd ed.)","author":"Stroustrup Bjarne","unstructured":"Bjarne Stroustrup . 1997. The C++ Programming Language (3^ rd ed.) . Addison Wesley . Bjarne Stroustrup. 1997. The C++ Programming Language (3^ rd ed.). Addison Wesley."},{"key":"e_1_2_1_43_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-030-89051-3_7"},{"key":"e_1_2_1_44_1","unstructured":"The Go Team. 2021. The Go Programming Language Specification - The Go Programming Language. https:\/\/https:\/\/golang.org\/ref\/spec#Function_types (Accessed on 04\/15\/2022). \t\t\t\t  The Go Team. 2021. The Go Programming Language Specification - The Go Programming Language. https:\/\/https:\/\/golang.org\/ref\/spec#Function_types (Accessed on 04\/15\/2022)."},{"key":"e_1_2_1_45_1","unstructured":"The Go Team. 2021. The go2go playground. https:\/\/go2goplay.golang.org\/ (Accessed on 04\/15\/2022). \t\t\t\t  The Go Team. 2021. The go2go playground. https:\/\/go2goplay.golang.org\/ (Accessed on 04\/15\/2022)."},{"key":"e_1_2_1_46_1","unstructured":"The Go Team. 2022. Go 1.18 Release Notes. https:\/\/tip.golang.org\/doc\/go1.18 (Accessed on 04\/15\/2022). \t\t\t\t  The Go Team. 2022. Go 1.18 Release Notes. https:\/\/tip.golang.org\/doc\/go1.18 (Accessed on 04\/15\/2022)."},{"key":"e_1_2_1_47_1","doi-asserted-by":"publisher","DOI":"10.1145\/2509136.2509537"},{"key":"e_1_2_1_48_1","doi-asserted-by":"publisher","DOI":"10.1145\/353171.353182"},{"key":"e_1_2_1_50_1","doi-asserted-by":"publisher","DOI":"10.1145\/964001.964005"}],"container-title":["Proceedings of the ACM on Programming Languages"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3563331","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3563331","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2025,6,17]],"date-time":"2025-06-17T16:38:10Z","timestamp":1750178290000},"score":1,"resource":{"primary":{"URL":"https:\/\/dl.acm.org\/doi\/10.1145\/3563331"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2022,10,31]]},"references-count":49,"journal-issue":{"issue":"OOPSLA2","published-print":{"date-parts":[[2022,10,31]]}},"alternative-id":["10.1145\/3563331"],"URL":"https:\/\/doi.org\/10.1145\/3563331","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"}}]}}