CIS 700-003: Parametric and Ad hoc Polymorphism
University of Pennsylvania
Spring 2006
Location: Towne 305
Time: Tuesday and Thursday 10:30 - 11:50 AM
Instructor: Stephanie
Weirich
Prerequisites: CIS 500
(Software foundations) or permission of the
instructor
An important principle of
software construction is to factor out common functionality. Many
programming languages use type abstraction, also called type
polymorphism, to support this process. With polymorphism,
functions and procedures can operate over many different forms of data
so that the same code can be used in many situations. Examples include:
- data structures, such as lists and trees, that store and
provide access to many different types of elements
- run-time services, such as serialization, structural
equality, and garbage collection, that iterate over any type of data
- operations that apply to all types of data supporting a
common interface
However, few programming languages support the rich forms of
polymorphism needed for all of the above situations. Traditionally,
polymorphism has been divided into three distinct flavors (parametric,
ad hoc and subtype) and languages typically support only one or two of
these varieties. It is becoming clear that all three of these forms of
polymorphism are essential. Therefore, much current research seeks to
integrate these forms of polymorphism together, and into
next-generation programming languages.
In this course, we will investigate parametric and ad hoc polymorphism
in detail. We will ask questions such as: What operations can they
express? How can languages supporting them be mathematically modeled?
What happens
when they are combined together and with other language features? How
does polymorphism relate to other mechanisms for software abstraction?
Our sources for study will be recent research results in the field of
programming languages as well as classic papers, tutorials and
textbooks.
Recommended textbooks:
Benjamin C. Pierce, Types and
Programming Languages.
Benjamin C. Pierce, ed. Advanced Topics in
Types and Programming Languages.
|