We present a concurrent higher-order programming language called Plain and a
concomitant static type system. Plain is based on logic variables and computes
with possibly partial data structures. The data structures of Plain are procedures, cells, and records. Plain's type system features record-based subtyping, bounded existential polymorphism, and access modalities distinguishing between reading and writing.
You may want to compare this with The Oz Programming Model (OPM), which
... is a concurrent programming model subsuming higher-order functional and object-oriented programming as facets of a general model. This is particularly interesting for concurrent object-oriented programming, for which no comprehensive formal model existed until now. The model can be extended so that it can express encapsulated problem solvers generalizing the problem solving capabilities of constraint logic programming.
Another paper on OPM is The Operational Semantics of Oz.
In short, the model of Plain is based on that of Oz with the main differences being:
- Plain statically types programs using a type system with subtyping, while Oz is latently typed.
- Therefore Plain chooses to drop support for unification in favor of a single-assignment operation.