Inferred Type Instantiation for GJ

Martin Odersky, EPFL Lausanne

Note sent to the types mailing list, January 2002.

Abstract

The task of type instantiation is to substitute types for formal type parameters in applications of polymorphic methods. Instantiating these parameters automatically considerably reduces clutter in program code that applies polymorphic functions. GJ uses type instantiation in a type system that combines Java's nominal subtyping discipline with F-bounded polymorphism. The version of GJ distributed as the early access release for JSR14 was recently shown by Alan Jeffrey to be unsound. Specifically, code that uses polymorphic methods but no explicit type casts can still cause a ``ClassCastException'' to be thrown at run-time. The unsoundness is caused by the semantically unclear status of the ``undefined'' type ``*'' in local type inference. This note puts forward another system for inferred type instantiation for GJ which avoids the unsoundness problem of GJ's current scheme. The new scheme has been implemented in the latest version of javac. It was tested with several large examples, including the compiler itself and the GJL, a generified version of ObjectSpace's JGL. In all this code (roughly 30000 lines) there was not a single instance where a type annotation had to be given which was not there before. This is a good indication that the new type inference scheme is in practice at least as good as the previous one.

Paper

in .ps or .ps.gz or .dvi .dvi.gz

BibTeX Entry


@Misc{odersky:localti-note,
  author =	 {Martin Odersky},
  title =	 {Inferred Type Instantiation for GJ},
  howpublished = {Note sent to the types mailing list},
  month =	 {January},
  year =	 2002
}

Martin Odersky
Last modified: Tue May 14 14:04:09 DST 2002