progsys mascot

UCSD Programming Systems

The Rhodium language for writing program analyses and transformations

Rhodium is a domain specific language for expressing program analyses and transformations. By providing natural abstractions for declaratively specifying analyses and transformations, Rhodium makes it easier for humans to write and reason about various kinds of program analysis tools, for example compilers, static checkers, static bug finders and source-to-source program translators. But more importantly, Rhodium will make it possible for a computer to effectively understand, process and reason about program analyses and transformations. Here are some examples of goals we hope to achieve once program analysis tools are expressed in Rhodium:

By providing better support for writing program analyses and transformations, Rhodium can provide a foundation for user-extensible program analysis tools, whether it be compilers, static bug finders or type-checkers.

As a first step, we have focused on reasoning statically about the safety of Rhodium analyses and transformations. An analysis is safe if the information it computes correctly characterizes the behavior of the program being analyzed. A transformation is safe if for any input program P, the transformation produces an output program P' that is semantically equivalent to P. We have implemented a static safety checker that can verify the safety of Rhodium analyses and transformations, before they are even run once.

The details of our approach can be found in the following POPL 05 paper: Automated Soundness Proofs for Dataflow Analyses and Transformations via Local Rules (POPL 2005)
Sorin Lerner, Todd Millstein, Erika Rice, and Craig Chambers

Also, the following PLDI 03 paper describes Cobalt, the predecessor to Rhodium: Automatically Proving the Correctness of Compiler Optimizations (PLDI 2003)
Sorin Lerner, Todd Millstein, and Craig Chambers

Contacts:

Sorin Lerner