Much of today's information infrastructure makes use of virtual machines (VMs). For example, consumer devices typically contain VMs for Java, JavaScript, and Flash. VMs are often well suited to roll out new capabilities to a broad range of target devices, which is why new VMs are being created all the time. Unfortunately, most VMs today are created from scratch, in spite of the fact that they are broadly similar. This is a considerable waste of programmer time and money. The goal of this project is to make creating VMs simpler, by creating a "toolbox" of components from which new VMs can be constructed easily.

The technical challenge is to create building blocks that can be put together to work as well as the custom-crafted VMs of today. In many cases, VM performance is critical. For example, on mobile devices, a slower VM might force us to run the processor at a higher speed, leading to faster battery depletion. This research promises that one may one day be able to create a competitively performing VM for Java, JavaScript and Flash in which some parts are shared, so that the total size is much smaller than three separate VMs. This is important for resource-constrained devices such as mobile phones. Re-using components rather than reinventing the wheel each time would reduce the entry cost for new languages. Sharing components would also lead to pooling of debugging resources, reducing errors and thereby leading to a safer and more stable computing infrastructure.

Project Report

Our project had the goal of developing the components of a modular virtual machine / language runtime that will make it easier for designers of programming languages, particularly dynamic languages, to get high-performing implementations off the ground. In the current state of the art, the up-front investment required to build a high- performance language runtime is so great that only a small fraction of deserving programming languages ever gain implementations beyond a simple interpreter. We largely succeeded in bringing down the effort required for making a dynamically typed programming language perform well. Of particular significance is a new technique "Iterator Peeling" that leads to significant speedups of programming languages such as Python. We believe that it will be broadly adopted by language implementors. We have also made significant progress on optimizing information-flow tracking for programming languages that support certain kinds of security type systems. Information-flow tracking could solve many of the security problems that plague current web browsers, but current browsers do not support this feature because it has too much runtime overhead. The new techniques that we have developed under this award make information-flow tracking substantially more efficient, making it practical to incorporate them directly into web browsers. If this were adopted by browser vendors, it would lead to an altogether safer web browsing experience for everyone.

National Science Foundation (NSF)
Division of Computer and Communication Foundations (CCF)
Standard Grant (Standard)
Application #
Program Officer
Anindya Banerjee
Project Start
Project End
Budget Start
Budget End
Support Year
Fiscal Year
Total Cost
Indirect Cost
University of California Irvine
United States
Zip Code