Affiliation:
1. University of Massachusetts, Amherst, Amherst, MA, USA
2. LogicBlox Inc., Atlanta, GA, USA
Abstract
Variance allows the safe integration of parametric and subtype polymorphism. Two flavors of variance, definition-site versus use-site variance, have been studied and have had their merits hotly debated. Definition-site variance (as in Scala and C#) offers simple type-instantiation rules, but causes fractured definitions of naturally invariant classes; Use-site variance (as in Java) offers simplicity in class definitions, yet complex type-instantiation rules that elude most programmers.
We present a unifying framework for reasoning about variance. Our framework is quite simple and entirely denotational, that is, it evokes directly the definition of variance with a small core calculus that does not depend on specific type systems. This general framework can have multiple applications to combine the best of both worlds: for instance, it can be used to add use-site variance annotations to the Scala type system. We show one such application in detail: we extend the Java type system with a mechanism that modularly infers the definition-site variance of type parameters, while allowing use-site variance annotations on any type-instantiation.
Applying our technique to six Java generic libraries (including the Java core library) shows that 20-58 (depending on the library) of generic definitions are inferred to have single-variance; 8-63% of method signatures can be relaxed through this inference, and up to 91% of existing wildcard annotations are unnecessary and can be elided.
Publisher
Association for Computing Machinery (ACM)
Subject
Computer Graphics and Computer-Aided Design,Software
Reference24 articles.
1. J. Altidor S. S. Huang and Y. Smaragdakis. Taming the wildcards: Combining definition- and use-site variance (extended version). http://www.cs.umass.edu/ yannis/variance-extended2011.pdf. J. Altidor S. S. Huang and Y. Smaragdakis. Taming the wildcards: Combining definition- and use-site variance (extended version). http://www.cs.umass.edu/ yannis/variance-extended2011.pdf.
2. A parallel object-oriented language with inheritance and subtyping
3. Apache Software Foundation. Apache commons-collections library. http://larvalabs.com/collections/. Version 4.01. Apache Software Foundation. Apache commons-collections library. http://larvalabs.com/collections/. Version 4.01.
4. J. Bloch. The closures controversy. http://www.javac.info/bloch-closures-controversy.ppt. Accessed Nov. 2010. J. Bloch. The closures controversy. http://www.javac.info/bloch-closures-controversy.ppt. Accessed Nov. 2010.
5. K. Boumillion and J. Levy. Guava: Google core libraries for Java 1.5 K. Boumillion and J. Levy. Guava: Google core libraries for Java 1.5
Cited by
2 articles.
订阅此论文施引文献
订阅此论文施引文献,注册后可以免费订阅5篇论文的施引文献,订阅后可以查看论文全部施引文献