Programming Languages Day 2001

Keynote: Is Code Optimization Research Relevant?

Bill Pugh
University of Maryland

Many papers are published on compiler optimizations that improve the performance of some set of benchmark programs. But I believe that much of this research has had little impact on the ability of developers to quickly produce reliable and efficient software. Unfortunately, research that does address these problems is often hard to publish. I will talk about this problem, and possible directions to try to improve the situation.

Toward Effective Component Verification: Deriving an Efficient Program Analysis from a High-level Specification

John Field
IBM T.J. Watson Research Center

The Canvas project at IBM Research and Tel-Aviv University aims to help ease the use of software components by allowing the component designer to specify component _conformance_ constraints in a natural way, and providing the client code developer with automated software _certification_ tools to determine whether the client satisfies the component's conformance constraints.

In this talk, we describe some initial steps toward this goal by showing how to systematically _derive_ efficient and precise certification algorithms from a formal specification of the Concurrent Modification Problem (CMP), which can arise from misuse of iterators in the Java 2 Collection Classes. One of the algorithms we describe runs in polynomial time for a large class of Java applications. One interesting aspect of CMP is that it expresses an interrelationship between a ``temporal'' property (the order in which certain methods are called), and ``spacial'' properties (the relationship between a collection object and iterator objects defined on it). Many program verification systems or analysis techniques have been specialized for one of those two domains, but CMP requires that both types of properties be verified in an integrated way.

We report preliminary benchmarking results for a prototype implementation of our efficient certification algorithm (HCMP), along with results for a more conventional algorithm (VCMP). The results show that HCMP is not only more precise than VCMP, it is also more efficient in practice.

Joint work with G. Ramalingam, IBM T.J. Watson Research Center, and Alex Warshavsky and Mooly Sagiv, Tel-Aviv University.

Efficient Object Sampling via Weak References

Alexander Garthwaite
Sun Labs

The performance of automatic memory management may be improved if the policies used in allocating and collecting objects had knowledge of the lifetimes of objects. To date, approaches to the pretenuring of objects in older generations have relied on profile-driven feedback gathered from trace runs. This feedback has been used to specialize allocation sites in a program. These approaches suffer from a number of limitations. We propose an alternative that through efficient sampling of objects allows for on-line adaption of allocation sites to improve the efficiency of the memory system. In doing so, we make use of a facility already present in many collectors such as those found in Java(tm) virtual machines: weak references. By judiciously tracking a subset of allocated objects with weak references, we are able to gather the necessary statistics to make better object-placement decisions.

Tangible Computation Bricks: Building-blocks for Physical Microworlds

Tim McNerney
MIT Media Lab

Learning activities that involve computation do not necessarily need to involve a computer. The approach presented in this talk avoids user interfaces which need a screen, keyboard, and pointing device, offering instead physical building-blocks augmented with embedded microprocessors. Using these techniques offers computational learning experiences without the cognitive overhead required by many computer-based learning tools. This talk introduces a general-purpose, constructive tangible user interface device, the Tangible Computation Brick. It describes several tangible programming languages that can be implemented with a handful of Bricks and applied in a variety of domains. The talk focuses on one language that was designed for scientific exploration, and discusses informal observations on test subjects. This system is easy to teach to novices, and it is successful at allowing students to focus on the learning task at-hand instead of being distracted by the user interface.

Ferret: Programming Language Support for Multiple Dynamic Classification

Bard Bloom
IBM T.J. Watson Research Center

We introduce a concept of multiple dynamic classification, a powerful generalization of single-inheritance OO, and a language Ferret which implements it. Multiple classification allows Male, Female, and Married to be subclasses of Person, arranged so that a single Person object may be both Male and Married, but may not be both Male and Female. Dynamic classification allows classes to change: a Person may acquire or lose Married status.

The subclasses are true subclasses. Married carries fields (e.g., spouse) which are specific to married people. Methods may be defined on classes, and even on Boolean combinations of class: Male & Married. Ferret provides a generalization of superclass calls, so that the methods for Male & Married can be based on those for Male and Married, without losing other classifications like Employee. Ferret has mutators, analogous to constructors but applicable when objects change class. The resulting language is powerful and highly expressive.

Type-Based Hot Swapping of Running Modules

Dominic Duggan
Stevens Institute of Technology, Hoboken NJ

While dynamic linking has become an integral part of the run-time execution of modern programming languages, there is increasing recognition of the need for support for replacing running libraries, particularly in long-lived server applications. The interesting challenge for such a facility is to allow the new library to change the types exported by the original library, while preserving type safety. An example is upgrading IPv4 routers to handle IPv6. I will discuss an approach I have been developing to solve this general problem, in the context of type systems for module languages. I will discuss problems with other approachs that have been proposed (and sometimes implemented), and explain how this approach avoids those problems. If there is time, I will relate this approach to the broader context of module languages. In particular, although some of the type-theoretic concepts originate from the SML90 module language, this approach to hot swapping is more readily applicable to object-oriented languages such as Java and C#.