Systems where components share information and resources indiscriminately are often fragile. Conversely, the control of sharing contributes to modularity, reliability, and security. Java, C#, and other modern programming languages rely on sophisticated concepts and methods for controlling sharing. These are embodied in constructs such as locks, abstract data types, and unforgeable object references, and in type systems and static analyses.
This project aims to study and develop techniques for controlled sharing in programming languages. For this purpose, it relies on the development of foundational calculi (e.g., calculi of objects or processes). It focuses on capabilities (such as unforgeable references), on related "packaging" constructs (such as objects and abstract data types), and on disciplines for the safe use of run-time mechanisms for controlled sharing.