The Plaid Programming Language
Plaid is a radical new programming language designed for the nascent age of concurrent, component-based computing (overview document). You can try out Plaid at our Web Terminal. Plaid's characteristics include:
- Typestate-Oriented Programming, a paradigm that extends object-oriented programming with typestates. A typestate is like a class, in that it has its own interface (a set of method signatures), representation (fields), and behavior (method implementations). However, the typestate of an object can change over time, and Plaid's type system helps track these changes.
- Concurrency by Default, a programming paradigm in which programmers specify dependencies between operations using permissions rather than specify the order of execution in the program. The run time system is therefore free to execute the program concurrently up to the expressed dependencies. Concurrency by Default brings the concurrency benefits of dataflow and functional programming to stateful programs.
- A simple and clean object model that supports first-class composable traits, diamond-free multiple inheritance, and convenient functional programming.
- A linear type system that tracks state changes dynamically using access permissions, supports strict information hiding, provides integrated structural and nominal types, and supports type members.
- Gradual Typing, which allows programmers to mix statically and dynamically typed code in the programs they write. Plaid will be among the first (if not the first) serious implementation of a gradual type system. In addition, it breaks new ground in supporting gradual typestate and permissions and in ensuring that dynamically typed code cannot break modularity guarantees.
We hope to innovate in other areas as well, including better language support for distributed and web programming, new verification approaches that leverage Plaid's permissions, and better language support for common software framework designs.
Plaid-related publications include:
- First-Class State Change in Plaid. Joshua Sunshine, Karl Naden, Sven Stork, Jonathan Aldrich, and Éric Tanter. To appear in Proceedings of Object-Oriented Programming, Systems, Languages, and Applications (OOPSLA '11), 2011.
- Gradual Typestate. Roger Wolff, Ronald Garcia, Éric Tanter, and Jonathan Aldrich. To appear in Proceedings of the European Conference on Object-Oriented Programming (ECOOP '11), 2011.
- Permission-Based Programming Languages (NIER Track). Jonathan Aldrich, Ronald Garcia, Mark Hahnenberg, Manuel Mohr, Karl Naden, Darpan Saini, Sven Stork, Joshua Sunshine, Éric Tanter, and Roger Wolff. In Proceedings of the International Conference on Software Engineering (ICSE '11), New Ideas and Emerging Results Track, 2011.
- Typestate-Oriented Programming. Jonathan Aldrich, Joshua Sunshine, Darpan Saini, and Zachary Sparks. In Proceedings of Onward!, 2009. (presentation)
- Concurrency by Default: Using Permissions to Express Dataflow in Stateful Programs. Sven Stork, Paulo Marques, and Jonathan Aldrich. In Proceedings of Onward!, 2009.
We are also working on a draft specification for the dynamically typed core of Plaid.
Two recent presentations covering the Plaid language design are:
- Plaid: A Resource-Based Programming Language. Jonathan Aldrich. New University of Lisbon Seminar, May 2010.
- Principles of Plaid: The Design and Rationale for a New Programming Language. Jonathan Aldrich. Principles of Programming Seminar, Carnegie Mellon University, March 5, 2010. Both slides and a video (you need MS Silverlight, available for Windows and Mac OS X, to watch) are available.
One more publication just for fun (SIGBOVIK is an April Fool's conference):
- Holy States Can Save the World! Brother Jonathan Aldrich, High Monk of the Plaid Brotherhood. In Proceedings of the 9th Biarennial Workshop about Symposium on Robot Dance Party of Conference in Celebration of Harry Q. Bovik's 0x40th Birthday, April 1, 2010. (presentation and source code)
Research projects are also available for CMU undergraduate and masters students. Contact Jonathan Aldrich if you are interested.
The Plaid project is supported by NSF grant #CCF-1116907, Foundations of Permission-Based Object-Oriented Languages.