Thursday, October 5, 2006
4:15 pm
B17 Upson Hall

Computer Science
Fall 2006

Craig Chambers
University of Washington

Extensible, Modular Software Units

Modern programming languages include features that allow software units to be extended with new capabilities.  For example, object-oriented languages allow libraries of classes to be extended with new subclasses, and functional languages like ML allow existing datatype families to be extended with new functions.  Both of these extensibility mechanisms allow existing code to be extended without invasive changes, and both support certain kinds of modular reasoning about units (e.g., static typechecking) separately from unrelated extensions.  However, no mainstream programming language supports both kinds of extensibility simultaneously.

In this talk I will present our group's work on a family of language designs, including MultiJava and EML, that support both kinds of extensibility in an integrated fashion.  The key components of our work are predicate dispatching (which generalizes functional-style pattern-matching, standard object-oriented dispatching, and multi-methods) and module-oriented restrictions on predicate dispatching, enforceable at compile-time and/or link-time, sufficient to ensure the absence of run-time dispatching errors while still allowing both object-oriented- and functional-style extensibility.