University of Virginia, Department
of Computer Science
CS655: Programming
Languages
Spring 2000
Project Proposal
Song Li, Ying Lu, Michael Walker, Hexin Wang
16 February 2000
Description of the Problem
Java, as currently defined, lacks support for parameterized types. A
programmer that wants to define a group of related types that have similar
behavior but manipulate different types cannot always do so in Java. However,
the language was designed to be expandable as the need for new programming
power arises. We believe that Java users would benefit from the additional
power of generic abstractions in code, and in our project, we will propose
and implement an extension to Java that adds support for parametric polymorphism.
There have already been several attempts at offering support for parameterized
types in Java (PolyJ, Pizza, GJ, and others). Each of these previous attempts
is cleverly designed to offer complete support for all flavors of parametric
polymorphism. Accommodating all possible scenarios of generic abstractions
is a difficult programming task, and the current extensions handle these
problems quite well.
Instead of trying to provide a better version of the same complete extension,
we will take a different approach. Firstly, we will examine what properties
of parameterized types are most valuable to Java users. We wish to answer
the question: What makes parameterized types valuable to programmers? We
believe that determining the usefulness of the extension is of primary
importance, and we will then use this knowledge to guide our design, rather
than attempting to provide full support first, and then reflect on its
usefulness after the implementation is complete.
After choosing what makes parameterized types valuable to programmers,
we will finally design and implement a limited version of these
features. We aim to add only the most useful extensions to Java, and will
not add complexity to the language unless its usefulness outweighs its
complexity.
Related Work
A number of researchers have already looked at how to add generic types to Java.
Milestones:
1. (Feb. 28) Examine what properties of parameterized types are most
valuable to Java users. This includes an investigation of current implementations
of parameterized types in Java.
2. (Mar. 23) Design a language extension to provide these valuable
properties in Java.
3. (Apr. 14) Implement the above design.
4. (Apr. 21) Test and evaluate the above implementation.
5. (Apr. 27) Document our work, and write a report describing our design
decisions, our implementation, and how well our decisions held up to evaluation.
Division of labor:
1. Each member of the team researches one or two of the existing implementations
of parameterized types.
2. After forming a consensus about our approach, each team member works
on one part of the project: one for semantics, one for syntax, one for
lexical design, and the other one for error checking.
3. After the above work is completed, two of us test the implementation
and the other two do the evaluation.
4. All of us work together to prepare the final report.
Evaluation Criteria
The goal of this project is to allow common parameterized classes to
be programmed in Java. In this project, we are most interested in making
it easy to handle common, useful cases rather than maximizing absolute
language expressiveness. The language extension should be implemented so
as try to preserve Java's code executing efficiency without changing Java's
robustness.
Therefore, the criteria for evaluating our project are the following according to the above motivation:
| University of Virginia
CS 655: Programming Languages |