University of Virginia, Department of Computer Science
CS655: Programming Languages
Spring 2000

Project Ideas

You are not limited to choosing projects from this list. Any project that could lead to a paper that would be suitable for a programming languages conference is acceptable. Many of these projects include optional implementations. Expectations for an implementation will depend on the size of your team.

Language Analysis

Pick an interesting and important language, and write an analysis that describes the important aspects of the language and argues why the language is interesting or important. You should install a translator for the language and write some programs to ground your analysis in some concrete experience. Describe flaws in the language design and suggest improvements consistent with the language philosophy. You may choose any language you want, but are encouraged to choose a language you are not already familiar with. Some possibilities (but don't limit yourself to this list): Algol68, AspectJ, Eiffel, JavaSpaces, Icon, Miranda, Sather, Self, SNOBOL4.

Language Design

Parameterized Types in Java
Many have lamented Java's lack of support for parameterized types (e.g., Vector[String]). Analyze various proposals for adding parameterized types to Java, and mechanisms for supporting parameterized types in other languages (CLU, C++ templates). Propose and implement an extension to Java that supports parameterized types.

Code Reuse
One problem with languages like CLU that do not support inheritance, is the difficulty in reusing code. Design a mechanism that would improve code reuability, and implement it for some language.

Exception Mechanisms
Compare the exception mechanisms in C++, Java, CLU, Ada, and PL/I. What are the advantages and disadvantages of each approach? Suggest improvements the Java exception mechanisms. Pay attention to performance issues. (If ambitious, implement your exception mechanisms.)

Design a Domain-Specific Language
Select a particular domain that is not well-served by existing programming languages and make the case that a domain-specific language would be useful. Design such a language and illustrate its usefulness with some example programs. (If a large team, implement a translator for the language.) Be creative and careful in choosing your problem domain.

Traditional garbage collectors do not work well in embedded systems where space and processing are limited and real-time behavior is critical. Design an approach to memory management that would work well in these environments and build a prototype. Your approach may involve extending or modifying a programming language.


Secure Language
Design a language in which it is impossible to write a harmful program. Define what harmful means. Look at PLAN as a starting point.

Naccio Threads
The current implementation of Naccio does not deal well with multiple threads. Analyze security vulnerabilities resulting from this problem. Suggest and implement a reasonable solution.

SASI Policies
SASI [Erlingsson99] offers a general and interesting way of enforcing safety policies, but its definition mechanisms are impractical. Design a language for describing safety policies and implement a translator that converts them into a SASI automaton description. (Consider using Naccio's policy definition languages for this.)

Intermediate Language for Static Checking
Design an intermediate language suitable for static checking. It should keep more information about the source program than an intermediate language for code generation. Modify LCLint to do its checking using your intermediate language, and produce a front end for at least one programming language.

LCLint Case Study
Pick a well-known program and use LCLint to analyze it. Report on the problems discovered. Suggest and implemenet changes to LCLint that would have made this easier or more effective.


Code Distribution
Determine if it is possible to improve code distribution by dividing programs into small chunks (not classes or methods) that are distributed on-demand. Build a system that does this, analyze its performance. (Start by looking at Emin Gun Sirer, et. al.'s work.)

Industry Adoption It seems to take about 20 years for a good idea from the programming language research community (e.g., garbage collection, data abstraction) to become widely adopted by industry. Trace the history of adoption of two or three good research ideas. Devise and support a theory for why it takes so long. Speculate on what current buried treasures exist in the programming language research community and what it will take to get them adopted by industry.

CS 655 University of Virginia
CS 655: Programming Languages
Last modified: Mon Feb 26 12:48:14 2001