Modularly Typesafe Interface Dispatch in JPred
2006 International Workshop on Foundations and Developments of Object-Oriented Languages (FOOL/WOOD 2006), Charleston, South Carolina, January 14, 2006.
Christopher Frost, Todd Millstein
Multiple dispatch generalizes the receiver-oriented dynamic dispatch
of traditional object-oriented (OO) languages by allowing the run-time
classes of all arguments to
be employed.
While research over the last decade has shown how to integrate
multiple dispatch with the modular static typechecking found in
traditional OO languages, that work has been forced to impose
unnatural restrictions or modifications in order to safely accommodate multiple
inheritance. In the context of Java, the effect has been to make it
difficult to dispatch on interfaces.
In this paper, we illustrate how the concept of predicate
dispatch, which generalizes multiple dispatch by allowing each
method to be guarded by a predicate indicating when the method
should be invoked, provides a simple but practical way to support
dispatch on interfaces while preserving modular
typechecking. We have instantiated our approach in the context of
JPred, an
existing extension to Java supporting predicate dispatch that
previously disallowed dispatch on interfaces altogether. We have
formalized our approach in a core subset of JPred and proven an
associated type soundness theorem. We have also performed two case
studies using JPred, on the JPred compiler itself and on portions of
Eclipse, to demonstrate the utility of our approach in practice.
[PDF | Implementation | Project Page]
Superseded by this paper.