This Article 
 Bibliographic References 
 Add to: 
Volta: Developing Distributed Applications by Recompiling
Sept.-Oct. 2008 (vol. 25 no. 5)
pp. 53-59
Dragos Manolescu, Microsoft Live Labs
Brian Beckman, Microsoft
Benjamin Livshits, Microsoft Research
Mainstream languages and tools are tailored for sequential, nondistributed applications, with support for distributed computing provided only in library APIs. Such programming environments force developers to make decisions early in the application life cycle about where the code should run, structuring the entire application around partitioning decisions. Performance measurement might reveal that the original partitioning was wrong, but redistributing the application is expensive because redistributing is restructuring. This article describes a new kind of tool suite that recompiles executables into a distributed form on the basis of declarative user annotations, inserting most of the necessary remoting and synchronization boilerplate code and facilitating post hoc instrumentation to drive quantitative redistribution. Because the tools operate on the intermediate language CIL (.NET Common Intermediate Language), they're compatible with a wide variety of .NET programming languages and eventual execution environments, even those that don't support CIL directly, such as JavaScript.

1. Standard ECMA-335, Common Language Infrastructure (CLI), Ecma Int'l, 2006, standardsEcma-335.htm.
2. J. Waldo et al., A Note on Distributed Computing, s.l., tech. report SMLI TR-94-29, Sun Microsystems Labs, 1994.
3. W.F. Opdyke and R.E. Johnson, "Refactoring: An Aid in Designing Application Frameworks and Evolving Object-Oriented Systems," Proc. 1990 Symp. Object-Oriented Programming Emphasizing Practical Applications (SOOPPA90), ACM Press, 1990, pp. 145–160.
4. M.J. Foley, "Microsoft Architect Compares Volta and Google's GWT," blog, 7 Dec. 2007,
5. G. Bierman, E. Meijer, and M. Torgersen, "Lost in Translation: Formalizing Proposed Extensions to C#," Proc. 22nd Ann. ACM SIGPLANConf. Object-Oriented Programming Systems and Applications (OOPSLA2007), ACM Press, 2007, pp. 479–498.
6. J. Bock, CIL Programming: Under the Hood of .NET, tech. report 978-1590590416, Apress, 2002.
7. W.F. Opdyke, "Refactoring Object-Oriented Frameworks," doctoral dissertation, Dept. of Computer Science, Univ. of Illinois at Urbana-Champaign, 1992.
8. R. Grimes, ".NET Delegates: Making Asynchronous Method Calls in the .NET Environment," MSDN Magazine, Aug. 2001.
9. F.P. Brooks, The Mythical Man-Month: Essays on Software Engineering, Addison-Wesley, 1995.
10. S. Chong et al., "Secure Web Applications via Automatic Partitioning," Proc. 21st ACM Symp. Operating Systems Principles, ACM Press, 2007, pp. 31–44.
11. "Service Trace Viewer Tool," MSDN, 2007, ms732023.aspx.
12. M.D. Smith, Tracing with Pixie, tech. report CSL-TR-91-497, Computer Systems Laboratory, Stanford Univ., 1991, pp. 1–29.
13. E. Kiciman and B. Livshits, "AjaxScope: A Platform for Remotely Monitoring the Client-Side Behavior of Web 2.0 Applications," Proc. 21st ACM Symp. Operating Systems Principles, ACM Press, 2007, pp. 17–30.
14. S.E. Ganz, D. Friedman, and M. Wand, "Trampolined Style," Proc. 4th ACM SIGPLANInt'l Conf. Functional Programming, 1999, pp. 18–22.

Index Terms:
distributed, Internet-based software engineering tools and techniques; code generation; retargetable compilers; measurements; distributed programming; refactoring; Ajax
Dragos Manolescu, Brian Beckman, Benjamin Livshits, "Volta: Developing Distributed Applications by Recompiling," IEEE Software, vol. 25, no. 5, pp. 53-59, Sept.-Oct. 2008, doi:10.1109/MS.2008.131
Usage of this product signifies your acceptance of the Terms of Use.