Instead of "owned", I would propose "iso" for read-and-write-uniqueness and
"trn" for write-uniqueness. With "iso", the "Owner" can safely delete the
object - no other references exist. With "trn", the object is aliased, but the
aliases are thread-local. So the owner can safely write to the object, but not
delete it. With "iso", an object can be transferred/send to another thread
safely ; but then, the object is lost for the sending thead since it isn't
reachable for it longer. With "trn", an object can not be given to another
thread - but it can be converted into a val and values can be aliased always,
making the object untouchable for any kind of writing or removing from the heap
as long as other threads might still run. An object that has been transferred
to another object via "iso" is under full responsibility of the receiving
thread - it might be deleted or transferred further. If this:
[https://www.imperial.ac.uk/media/imperial-college/faculty-of-engineering/computing/public/GeorgeSteed.pdf](https://www.imperial.ac.uk/media/imperial-college/faculty-of-engineering/computing/public/GeorgeSteed.pdf)
or this:
[https://www.ponylang.io/media/papers/formalizing-generics-for-pony.pdf](https://www.ponylang.io/media/papers/formalizing-generics-for-pony.pdf)
is of some interest for you, please let me know, Araq. BTW I appreciate your
approach, it's a wonderful thing for NIM. There are some pecularities though.