The Go Language with Generic Types
Supervisor
Suitable for
Abstract
Go is a popular statically typed programming language desinged and implemented by Google, and used, among others, by Uber, Netflix, and Docker. The recent release of Go 1.18 finally realised the long awaited addition of Generics (parametric polymorphism) to the Go type system. Much academic work has been conducted to ensure that generics are correctly implemented, but there is still more to do [1,2,3,4]. This project aims to further reduce the gap between theory and practice, allowing the Go Team to improve their implementation of generics in Go.
Project 1:
Formalise (and prove correct) a dictionary-passing translation from Featherweight Generic Go (FGG) to a lambda-calculus with pattern matching or other suitable low-level language.
Project 2:
The current model of generics in Go (FGG) does not include important features included in Go 1.18 such as type inference and type sets [5]. The proposed project would be to formalise a true FGG (including aforementioned features) along with a correct translation.
[1] https://dl.acm.org/doi/pdf/10.1145/3428217
[2] https://dl.acm.org/doi/10.1007/978-3-030-89051-3_7
[3] https://dl.acm.org/doi/10.1007/978-3-031-16912-0_7
[4] https://arxiv.org/abs/2208.06810v2
[5] https://go.googlesource.com/proposal/+/master/design/43651-type-parameters.md