Software is becoming ubiquitous in everyday life, from todays smartphones and servers to tomorrows self-driving cars, drones, and Internet of Things devices. However, the distributed, always-on nature of this software poses significant new challenges for reliability, security, and programmer productivity. Better programming tools are needed to enable next-generation applications to achieve thei...