Superficially Substructural Types
Many sub-structural type systems have been proposed for controlling access to shared state in higher-order languages. Central to these systems is the notion of a resource, which may be split into disjoint pieces that different parts of a program can manipulate independently without worrying about interfering with one another. Some systems support a logical notion of resource (such as permissions), under which two resources may be considered disjoint even if they govern the same piece of state. However, in nearly all existing systems, the notions of resource and dis-jointness are fixed at the outset, baked into the model of the language, and fairly coarse-grained in the kinds of sharing they enable.