{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,1,9]],"date-time":"2026-01-09T03:32:54Z","timestamp":1767929574115,"version":"3.49.0"},"reference-count":42,"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>We describe a design for generics in Go inspired by previous work on Featherweight Java by Igarashi, Pierce, and Wadler. Whereas subtyping in Java is nominal, in Go it is structural, and whereas generics in Java are defined via erasure, in Go we use monomorphisation. Although monomorphisation is widely used, we are one of the first to formalise it. Our design also supports a solution to The Expression Problem.<\/jats:p>","DOI":"10.1145\/3428217","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":13,"title":["Featherweight go"],"prefix":"10.1145","volume":"4","author":[{"given":"Robert","family":"Griesemer","sequence":"first","affiliation":[{"name":"Google, USA"}]},{"ORCID":"https:\/\/orcid.org\/0000-0003-4361-6772","authenticated-orcid":false,"given":"Raymond","family":"Hu","sequence":"additional","affiliation":[{"name":"University of Hertfordshire, UK"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-1662-0381","authenticated-orcid":false,"given":"Wen","family":"Kokke","sequence":"additional","affiliation":[{"name":"University of Edinburgh, UK"}]},{"ORCID":"https:\/\/orcid.org\/0000-0001-9697-1378","authenticated-orcid":false,"given":"Julien","family":"Lange","sequence":"additional","affiliation":[{"name":"Royal Holloway University of London, UK"}]},{"given":"Ian Lance","family":"Taylor","sequence":"additional","affiliation":[{"name":"Google, USA"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-0746-7514","authenticated-orcid":false,"given":"Bernardo","family":"Toninho","sequence":"additional","affiliation":[{"name":"Nova University of Lisbon, Portugal \/ NOVA-LINCS, Portugal"}]},{"ORCID":"https:\/\/orcid.org\/0000-0001-7619-6378","authenticated-orcid":false,"given":"Philip","family":"Wadler","sequence":"additional","affiliation":[{"name":"University of Edinburgh, UK"}]},{"ORCID":"https:\/\/orcid.org\/0000-0002-3925-8557","authenticated-orcid":false,"given":"Nobuko","family":"Yoshida","sequence":"additional","affiliation":[{"name":"Imperial College London, UK"}]}],"member":"320","published-online":{"date-parts":[[2020,11,13]]},"reference":[{"key":"e_1_2_2_1_1","first-page":"838","article-title":"Java and Scala's type systems are unsound: the existential crisis of null pointers","author":"Amin Nada","year":"2016","unstructured":"Nada Amin and Ross Tate . 2016 . Java and Scala's type systems are unsound: the existential crisis of null pointers . In Object-Oriented Programming: Systems, Languages, and Applications (OOPSLA). 838 - 848 . Nada Amin and Ross Tate. 2016. Java and Scala's type systems are unsound: the existential crisis of null pointers. In Object-Oriented Programming: Systems, Languages, and Applications (OOPSLA). 838-848.","journal-title":"Object-Oriented Programming: Systems, Languages, and Applications (OOPSLA)."},{"key":"e_1_2_2_2_1","doi-asserted-by":"publisher","DOI":"10.1145\/289423.289435"},{"key":"e_1_2_2_3_1","doi-asserted-by":"crossref","unstructured":"Jasmin Christian Blanchette Sascha B\u00f6hme Andrei Popescu and Nicholas Smallbone. 2016. Encoding Monomorphic and Polymorphic Types. Logical Methods in Computer Science 12 4 ( 2016 ).  Jasmin Christian Blanchette Sascha B\u00f6hme Andrei Popescu and Nicholas Smallbone. 2016. Encoding Monomorphic and Polymorphic Types. Logical Methods in Computer Science 12 4 ( 2016 ).","DOI":"10.2168\/LMCS-12(4:13)2016"},{"key":"e_1_2_2_4_1","volume-title":"FroCoS (Lecture Notes in Computer Science","author":"Bobot Fran\u00e7ois","unstructured":"Fran\u00e7ois Bobot and Andrey Paskevich . 2011. Expressing Polymorphic Types in a Many-Sorted Language . In FroCoS (Lecture Notes in Computer Science , Vol. 6989 ). Springer , 87-102. Fran\u00e7ois Bobot and Andrey Paskevich. 2011. Expressing Polymorphic Types in a Many-Sorted Language. In FroCoS (Lecture Notes in Computer Science, Vol. 6989 ). Springer, 87-102."},{"key":"e_1_2_2_5_1","doi-asserted-by":"publisher","DOI":"10.1145\/286936.286957"},{"key":"e_1_2_2_6_1","first-page":"273","article-title":"F-bounded polymorphism for object-oriented programming","author":"Canning Peter","year":"1989","unstructured":"Peter Canning , William Cook , Walter Hill , Walter Olthof , and John C Mitchell . 1989 . F-bounded polymorphism for object-oriented programming . In Functional Programming Languages and Computer Architecture (FPCA). 273 - 280 . Peter Canning, William Cook, Walter Hill, Walter Olthof, and John C Mitchell. 1989. F-bounded polymorphism for object-oriented programming. In Functional Programming Languages and Computer Architecture (FPCA). 273-280.","journal-title":"Functional Programming Languages and Computer Architecture (FPCA)."},{"key":"e_1_2_2_7_1","doi-asserted-by":"publisher","DOI":"10.1007\/3-540-46425-5_4"},{"key":"e_1_2_2_8_1","doi-asserted-by":"publisher","DOI":"10.1017\/s0956796815000143"},{"key":"e_1_2_2_9_1","first-page":"151","volume-title":"Workshop of the REX Project (LNCS","volume":"489","author":"Cook William R","year":"1990","unstructured":"William R Cook . 1990 . Object-oriented programming versus abstract data types . In Workshop of the REX Project (LNCS , Vol. 489 ). Springer , 151 - 178 . William R Cook. 1990. Object-oriented programming versus abstract data types. In Workshop of the REX Project (LNCS, Vol. 489 ). Springer, 151-178."},{"key":"e_1_2_2_10_1","doi-asserted-by":"publisher","DOI":"10.1145\/289423.289459"},{"key":"e_1_2_2_11_1","doi-asserted-by":"publisher","DOI":"10.1007\/BFb0053388"},{"key":"e_1_2_2_13_1","first-page":"171","article-title":"Classes and Mixins","author":"Flatt Matthew","year":"1998","unstructured":"Matthew Flatt , Shriram Krishnamurthi , and Matthias Felleisen . 1998 . Classes and Mixins . In Principles of Programming Languages (POPL). 171 - 183 . Matthew Flatt, Shriram Krishnamurthi, and Matthias Felleisen. 1998. Classes and Mixins. In Principles of Programming Languages (POPL). 171-183.","journal-title":"Principles of Programming Languages (POPL)."},{"key":"e_1_2_2_14_1","unstructured":"Matthew Fluet. 2015. MLton-Monomorphise. http:\/\/mlton.org\/Monomorphise.  Matthew Fluet. 2015. MLton-Monomorphise. http:\/\/mlton.org\/Monomorphise."},{"key":"e_1_2_2_15_1","doi-asserted-by":"publisher","DOI":"10.1145\/2594291.2594308"},{"key":"e_1_2_2_16_1","volume-title":"Bernardo Toninho, Philip Wadler, and Nobuko Yoshida.","author":"Griesemer Robert","year":"2020","unstructured":"Robert Griesemer , Raymond Hu , Wen Kokke , Julien Lange , Ian Lance Taylor , Bernardo Toninho, Philip Wadler, and Nobuko Yoshida. 2020 . Featherweight Go. CoRR abs\/ 2005.11710 ( 2020 ). arXiv: 2005.11710 https:\/\/arxiv.org\/abs\/ 2005.11710 Robert Griesemer, Raymond Hu, Wen Kokke, Julien Lange, Ian Lance Taylor, Bernardo Toninho, Philip Wadler, and Nobuko Yoshida. 2020. Featherweight Go. CoRR abs\/ 2005.11710 ( 2020 ). arXiv: 2005.11710 https:\/\/arxiv.org\/abs\/ 2005.11710"},{"key":"e_1_2_2_17_1","unstructured":"Robert Griesemer Rob Pike Ken Thompson Ian Taylor Russ Cox Jini Kim and Adam Langley. 2009. Hey! Ho! Let's Go! https:\/\/opensource.googleblog.com\/ 2009 \/11\/hey-ho-lets-go.html  Robert Griesemer Rob Pike Ken Thompson Ian Taylor Russ Cox Jini Kim and Adam Langley. 2009. Hey! Ho! Let's Go! https:\/\/opensource.googleblog.com\/ 2009 \/11\/hey-ho-lets-go.html"},{"key":"e_1_2_2_18_1","doi-asserted-by":"publisher","DOI":"10.1145\/320384.320395"},{"key":"e_1_2_2_19_1","doi-asserted-by":"publisher","DOI":"10.1145\/503502.503505"},{"key":"e_1_2_2_20_1","doi-asserted-by":"crossref","unstructured":"Mark P Jones. 1995. Dictionary-free overloading by partial evaluation. Lisp and Symbolic Computation 8 3 ( 1995 ) 229-248.  Mark P Jones. 1995. Dictionary-free overloading by partial evaluation. Lisp and Symbolic Computation 8 3 ( 1995 ) 229-248.","DOI":"10.1007\/BF01019005"},{"key":"e_1_2_2_21_1","doi-asserted-by":"publisher","DOI":"10.1145\/378795.378797"},{"key":"e_1_2_2_22_1","doi-asserted-by":"publisher","DOI":"10.1007\/BFb0054088"},{"key":"e_1_2_2_23_1","doi-asserted-by":"publisher","DOI":"10.1145\/143165.143205"},{"key":"e_1_2_2_24_1","unstructured":"Maurice Naftalin and Philip Wadler. 2006. Java generics and collections. O'Reilly. http:\/\/www.oreilly.de\/catalog\/javagenerics\/ index.html  Maurice Naftalin and Philip Wadler. 2006. Java generics and collections. O'Reilly. http:\/\/www.oreilly.de\/catalog\/javagenerics\/ index.html"},{"key":"e_1_2_2_25_1","first-page":"161","article-title":"Javalight is Type-safe-Definitely","author":"Nipkow Tobias","year":"1998","unstructured":"Tobias Nipkow and David von Oheimb . 1998 . Javalight is Type-safe-Definitely . In Principles of Programming Languages (POPL). 161 - 170 . Tobias Nipkow and David von Oheimb. 1998. Javalight is Type-safe-Definitely. In Principles of Programming Languages (POPL). 161-170.","journal-title":"Principles of Programming Languages (POPL)."},{"key":"e_1_2_2_26_1","doi-asserted-by":"publisher","DOI":"10.1145\/143165.143228"},{"key":"e_1_2_2_27_1","volume-title":"New Directions in Algorithmic Languages","author":"Reynolds John C","unstructured":"John C Reynolds . 1994. User-defined types and procedural data structures as complementary approaches to data abstraction . In New Directions in Algorithmic Languages . MIT Press , 13-23. John C Reynolds. 1994. User-defined types and procedural data structures as complementary approaches to data abstraction. In New Directions in Algorithmic Languages. MIT Press, 13-23."},{"key":"e_1_2_2_28_1","doi-asserted-by":"publisher","DOI":"10.1145\/1411286.1411292"},{"key":"e_1_2_2_29_1","first-page":"304","volume-title":"European Conference on Object-Oriented Programming (ECOOP) (LNCS","volume":"4067","author":"Jeremy","unstructured":"Jeremy G. Siek and Walid Taha. 2006. A Semantic Analysis of C++ Templates . In European Conference on Object-Oriented Programming (ECOOP) (LNCS , Vol. 4067 ). Springer , 304 - 327 . Jeremy G. Siek and Walid Taha. 2006. A Semantic Analysis of C++ Templates. In European Conference on Object-Oriented Programming (ECOOP) (LNCS, Vol. 4067 ). Springer, 304-327."},{"key":"e_1_2_2_30_1","volume-title":"The C+ + Programming Language","author":"Stroustrup Bjarne","unstructured":"Bjarne Stroustrup . 2013. The C+ + Programming Language , 4 th Edition. Addison-Wesley . Bjarne Stroustrup. 2013. The C+ + Programming Language, 4th Edition. Addison-Wesley.","edition":"4"},{"key":"e_1_2_2_31_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796808006758"},{"key":"e_1_2_2_32_1","volume-title":"Formal Syntax and Semantics of Java","author":"Syme Don","unstructured":"Don Syme . 1999. Proving Java Type Soundness . In Formal Syntax and Semantics of Java . Springer-Verlag , 83-118. Don Syme. 1999. Proving Java Type Soundness. In Formal Syntax and Semantics of Java. Springer-Verlag, 83-118."},{"key":"e_1_2_2_33_1","doi-asserted-by":"crossref","unstructured":"Akira Tanaka Reynald Afeldt and Jacques Garrigue. 2018. Safe Low-level Code Generation in Coq Using Monomorphization and Monadification. JIP 26 ( 2018 ) 54-72.  Akira Tanaka Reynald Afeldt and Jacques Garrigue. 2018. Safe Low-level Code Generation in Coq Using Monomorphization and Monadification. JIP 26 ( 2018 ) 54-72.","DOI":"10.2197\/ipsjjip.26.54"},{"key":"e_1_2_2_34_1","unstructured":"Ian Lance Taylor and Robert Griesemer. 2019. Contracts-Draft Design. https:\/\/go.googlesource.com\/proposal\/+\/master\/ design\/go2draft-contracts.md  Ian Lance Taylor and Robert Griesemer. 2019. Contracts-Draft Design. https:\/\/go.googlesource.com\/proposal\/+\/master\/ design\/go2draft-contracts.md"},{"key":"e_1_2_2_35_1","unstructured":"Ian Lance Taylor and Robert Griesemer. 2020. Type Parameters-Draft Design. https:\/\/go.googlesource.com\/proposal\/+\/ refs\/heads\/master\/design\/go2draft-type-parameters.md  Ian Lance Taylor and Robert Griesemer. 2020. Type Parameters-Draft Design. https:\/\/go.googlesource.com\/proposal\/+\/ refs\/heads\/master\/design\/go2draft-type-parameters.md"},{"key":"e_1_2_2_36_1","unstructured":"The Go Team. 2020. The Go Programming Language Specification. https:\/\/golang.org\/ref\/spec  The Go Team. 2020. The Go Programming Language Specification. https:\/\/golang.org\/ref\/spec"},{"key":"e_1_2_2_37_1","unstructured":"The Rust Team. 2017. The Rust programming language. http:\/\/rust-lang.org\/  The Rust Team. 2017. The Rust programming language. http:\/\/rust-lang.org\/"},{"key":"e_1_2_2_38_1","doi-asserted-by":"publisher","DOI":"10.1017\/S0956796898003086"},{"key":"e_1_2_2_39_1","doi-asserted-by":"publisher","DOI":"10.1007\/978-3-540-24851-4_6"},{"key":"e_1_2_2_40_1","unstructured":"Aaron Turon. 2015. Abstraction without overhead: traits in Rust. https:\/\/blog.rust-lang.org\/ 2015 \/05\/11\/traits.html  Aaron Turon. 2015. Abstraction without overhead: traits in Rust. https:\/\/blog.rust-lang.org\/ 2015 \/05\/11\/traits.html"},{"key":"e_1_2_2_41_1","doi-asserted-by":"publisher","DOI":"10.1145\/353171.353182"},{"key":"e_1_2_2_42_1","unstructured":"Philip Wadler. 1998. The expression problem. Posted on the Java Genericity mailing list. http:\/\/homepages.inf.ed.ac.uk\/ wadler\/papers\/expression\/expression.txt  Philip Wadler. 1998. The expression problem. Posted on the Java Genericity mailing list. http:\/\/homepages.inf.ed.ac.uk\/ wadler\/papers\/expression\/expression.txt"},{"key":"e_1_2_2_43_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\/3428217","content-type":"unspecified","content-version":"vor","intended-application":"text-mining"},{"URL":"https:\/\/dl.acm.org\/doi\/pdf\/10.1145\/3428217","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\/3428217"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2020,11,13]]},"references-count":42,"journal-issue":{"issue":"OOPSLA","published-print":{"date-parts":[[2020,11,13]]}},"alternative-id":["10.1145\/3428217"],"URL":"https:\/\/doi.org\/10.1145\/3428217","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"}}]}}