Designing and implementing robust and high-performance distributed systems remains a challenging, tedious, and error-prone task. Building correct systems is difficult because of the asynchronous, heterogeneous, failure-prone and adversarial environments these systems are subject to. Tracking the source of performance problems often reduces to searching for a needle in a haystack: among millions of individual message transmissions, algorithmic decisions, and a large number of participating nodes, which network link, computer, or low-level algorithm results in performance degradations?
This research aims to create a programming environment for building distributed systems, that includes (1) programmings language that make the structure of the system explicit in a manner that allows the compilation of readable high-level descriptions into high-performance implementations, and (2) tools that can exploit the explicit structure to perform automatic system level analyses that will help developers locate, understand and fix behavioral anomalies in deployed systems. By increasing our understanding of which aspects of the development process are automatable, this research will show the high-level aspects where human creativity needs to be focused, without paying the price of performance penalties. This research can lead to the availability of novel architectures and services as an increasing developer population is empowered to design and build these systems