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.
Memory-Management
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.
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.
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 |
cs655-staff@cs.virginia.edu Last modified: Mon Feb 26 12:48:14 2001 |