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.
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.
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 [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.
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.
University of Virginia
CS 655: Programming Languages
Last modified: Mon Feb 26 12:48:14 2001