A type-directed, dictionary-passing translation of method overloading and structural subtyping in Featherweight Generic Go
Authors:
- Martin SulzmannMSMartin Sulzmann
- Stefan WehrSWStefan Wehr
Open Access
- 9 October 2023
- journal article
- research article
- Published by Cambridge University Press (CUP) in Journal of Functional Programming
- Vol. 33
Abstract
Featherweight Generic Go (FGG) is a minimal core calculus modeling the essential features of the programming language Go. It includes support for overloaded methods, interface types, structural subtyping, and generics. The most straightforward semantic description of the dynamic behavior of FGG programs is to resolve method calls based on runtime type information of the receiver. This article shows a different approach by defining a type-directed translation from ${\textrm{FGG}^{-}}$ to an untyped lambda-calculus. ${\textrm{FGG}^{-}}$ includes all features of FGG but type assertions. The translation of an ${\textrm{FGG}^{-}}$ program provides evidence for the availability of methods as additional dictionary parameters, similar to the dictionary-passing approach known from Haskell type classes. Then, method calls can be resolved by a simple lookup of the method definition in the dictionary. Every program in the image of the translation has the same dynamic semantics as its source ${\textrm{FGG}^{-}}$ program. The proof of this result is based on a syntactic, step-indexed logical relation. The step index ensures a well-founded definition of the relation in the presence of recursive interface types and recursive methods. Although being non-deterministic, the translation is coherent.
Keywords
All Related Versions
This publication has 35 references indexed in Scilit:
- A bisimulation for type abstraction and recursionJournal of the ACM, 2007
- Syntactic Logical Relations for Polymorphic and Recursive TypesElectronic Notes in Theoretical Computer Science, 2007
- An indexed model of recursive types for foundational proof-carrying codeACM Transactions on Programming Languages and Systems, 2001
- Featherweight JavaACM Transactions on Programming Languages and Systems, 2001
- Making the future safe for the pastACM SIGPLAN Notices, 1998
- Existential types: Logical relations and operational equivalenceLecture Notes in Computer Science, 1998
- Type classes in HaskellACM Transactions on Programming Languages and Systems, 1996
- Type classes with existential typesJournal of Functional Programming, 1996
- Abstract types have existential typeACM Transactions on Programming Languages and Systems, 1988
- Intensional interpretations of functionals of finite type IThe Journal of Symbolic Logic, 1967