129 research outputs found
Generic Go to Go: Dictionary-Passing, Monomorphisation, and Hybrid
Go is a popular statically-typed industrial programming language. To aid the
type safe reuse of code, the recent Go release (Go 1.18) published on 15th
March 2022 includes bounded parametric polymorphism via generic types. Go 1.18
implements generic types using combination of monomorphisation and call-graph
based dictionary-passing called hybrid. This hybrid approach can be viewed as
an optimised form of monomorphisation that statically generates specialised
methods and types based on possible instantiations. A monolithic dictionary
supplements information lost during monomorphisation, and it is structured
according to the program's call graph. Unfortunately, the hybrid approach still
suffers from code bloat, poor compilation speed, and limited code coverage.
In this paper we propose and formalise a new non-specialising call-site based
dictionary-passing translation. Our call-site based translation creates
individual dictionaries for each type parameter, with dictionary construction
occurring in place of instantiation, overcoming the limitations of hybrid. We
prove it correct using a novel and general bisimulation up to technique. To
better understand how different generics translations approaches work in
practice, we benchmark five translators, Go 1.18, two existing monomorphisation
translators, our dictionary-passing translator, and erasure translator. Our
findings reveal several suggestions for improvements for Go 1.18 --
specifically how to overcome the expressiveness limitations of generic Go, and
improve compile time and compiled code size performance of Go 1.18.Comment: Full version of paper submitted to OOPSLA '2
Java & Lambda: a Featherweight Story
We present FJ&, a new core calculus that extends Featherweight Java
(FJ) with interfaces, supporting multiple inheritance in a restricted form,
-expressions, and intersection types. Our main goal is to formalise
how lambdas and intersection types are grafted on Java 8, by studying their
properties in a formal setting. We show how intersection types play a
significant role in several cases, in particular in the typecast of a
-expression and in the typing of conditional expressions. We also
embody interface \emph{default methods} in FJ&, since they increase
the dynamism of -expressions, by allowing these methods to be called
on -expressions.
The crucial point in Java 8 and in our calculus is that -expressions
can have various types according to the context requirements (target types):
indeed, Java code does not compile when -expressions come without
target types. In particular, in the operational semantics we must record target
types by decorating -expressions, otherwise they would be lost in the
runtime expressions.
We prove the subject reduction property and progress for the resulting
calculus, and we give a type inference algorithm that returns the type of a
given program if it is well typed. The design of FJ& has been driven
by the aim of making it a subset of Java 8, while preserving the elegance and
compactness of FJ. Indeed, FJ& programs are typed and behave the same
as Java programs
Deconfined Intersection Types in Java
We show how Java intersection types can be freed from their confinement in type casts, in such a way that the proposed Java extension is safe and fully compatible with the current language. To this aim, we exploit two calculi which formalise the simple Java core and the extended language, respectively. Namely, the second calculus extends the first one by allowing an intersection type to be used anywhere in place of a nominal type. We define a translation algorithm, compiling programs of the extended language into programs of the former calculus. The key point is the interaction between ?-expressions and intersection types, that adds safe expressiveness while being the crucial matter in the translation. We prove that the translation preserves typing and semantics. Thus, typed programs in the proposed extension are translated to typed Java programs. Moreover, semantics of translated programs coincides with the one of the source programs
- …