Plaid: Programming with Typestate and Permissions

Emerging Languages
Location: E144
Average rating: ***..
(3.00, 4 ratings)

Plaid is an emerging programming language with a number of new features that work together to provide a powerful foundation for software development: typestate, permissions, gradual typing, and concurrency by default.

Plaid includes native support for typestate, which captures the changing states an object can be in. Each typestate defines its own interface (methods signatures), representation (fields), and behavior (method signatures); calling a method on the object may result in a transition from one typestate to another. Typestate is thus a powerful facility for modeling many different kinds of stateful abstrations, including files, network and database connections, UI components, business processes, or interactions in simulated environments.

In order to help programmers manage typestate, Plaid includes a type system that tracks which typestate an object is in at any point. Because tracking typestate can be difficult in the presence of aliasing, Plaid includes permissions like “unique” that declare whether an object may be aliased or not, and what effect those aliases may have. Permissions express important invariants about the structure of the heap, in addition to helping the type system check typestate. Plaid’s permission system also enables the compiler to detect what parts of the computation can be executed in parallel, leading to a concurrent-by-default programming model that leverages today’s multicore systems.

To reduce the overhead of specifying both types and permissions in the code, Plaid uses convenient syntax and good defaults that make its type system quite lightweight, comparing well to Java in many cases. In addition, programmers can replace static checks with dynamic ones through the use of casts, and can mix statically and dynamically typed code through Plaid’s gradual typing feature.

In this presentation, we will provide an overview of the Plaid programming language through a series of examples drawing from domains like I/O code, user interfaces, business process modeling, and simulated environments. We will demonstrate the open-source Plaid compiler, which is available at, and provide opportunities for attendees to try out the language themselves, either by downloading the compiler or using the web-based Plaid terminal at

Attendees should come away with an understanding of the core new ideas in the Plaid language, including typestate, permissions, concurrency by default, and gradual types. They should also have an idea of how different problems can be effectively modeled with Plaid’s constructs, and (for the adventurous) a taste of writing programs in Plaid. We hope some attendees will experiment with Plaid after the presentation, perhaps find it useful, and that Plaid’s new ideas will in turn spur further innovation in other emerging programming languages.

Karl Naden

Carnegie Mellon University

Karl Naden is a Ph.D. student at Carnegie Mellon University, advised by Jonathan Aldrich. Karl’s research focuses on the design and development of the Plaid programming language. Karl holds a B.A. in math and history from Williams College. When he is not working, you might find him singing, running, cooking, or playing board games.

Photo of Jonathan Aldrich

Jonathan Aldrich

Carnegie Mellon University

Jonathan Aldrich is Associate Professor of Computer Science at Carnegie Mellon University. He is the director of CMU’s undergraduate minor program in Software Engineering, and teaches courses in programming languages, software engineering, and program analysis for quality and security. In addition, he serves as a consultant on architecture, design, process, and legal issues in the software industry. Dr. Aldrich joined the CMU faculty after completing a Ph.D. at the University of Washington and a B.S. at Caltech.

Dr. Aldrich’s research centers on programming languages and type systems that are deeply informed by software engineering considerations. His research contributions include verifying the correct implementation of an architectural design, modular formal reasoning about code, and API protocol specification and verification. For his work on software architecture, Aldrich received a 2006 NSF CAREER award and the 2007 Dahl-Nygaard Junior Prize, given annually for a significant technical contribution to object-oriented programming. Aldrich was one of 12 computer science researchers nationwide who were selected to the 2007 DARPA Computer Science Study Group. Aldrich’s current work focuses on support for typestate-oriented programming and concurrency in the design of the Plaid language.