Building Distributed Applications with Recompilers

My article Volta: Developing Distributed Applications by Recompiling (co-authored with Brian Beckman and Benjamin Livshits) is now available in the Software Development Tools issue of IEEE Software (September/October 2008).

Here's the abstract:

Mainstream languages and tools are tailored for sequential, non-distributed applications, with support for distributed computing provided only in library APIs. Such programming environments force developers to make decisions about "where-code-runs" early in the application lifecycle, structuring the entire application around partitioning decisions. Performance measurement may reveal that the original partitioning was wrong, but redistributing the application is expensive because redistributing is restructuring. We built a new kind of tool suite that recompiles executables into distributed form based on declarative user annotations, inserting most of the necessary remoting and synchronization boilerplate code, and facilitating post-hoc instrumentation to drive quantitative redistribution. Since the tools operate on the intermediate language CIL, they are compatible with a wide variety of .NET programming languages and eventual execution environments, even those that do not support .NET CIL directly, such as JavaScript.

Enjoy!