On Tuesday, 13 October 2015 at 16:04:07 UTC, Ola Fosheim Grøstad
wrote:
_loosely_ translated:
isolated: void*
transition: const T*
reference: T*
value: immutable T*
box: globally as shared const T*, locally as shared T*
tag: shared T*
The above turned out rather allegorical (and possibly confusing),
the following is a lockfree interpretation that is a little bit
more useful and somewhat more accurate:
ISOLATED: Unique!T
referable as void*, shared void*
transferrable to other threads
TRANSITION: Unique!T
referable as const T*, void*, shared void*
convertible to immutable T*
REFERENCE: T*
referable as T*, const T*, void*, shared void*
VALUE: immutable T*
referable as immutable T*, const T*, shared const T*, void*,
shared void*
shareable with other threads
BOX: const T*
referable as const T*, void*, shared void*
aliasing with T*, immutable T*
TAG: void T* or shared void*
referable as void T*, shared void*
aliasing with all types as it is a pure identity
Then we can do a new interpretation with locking/synchronization
and get something like:
LOCKED BOX: shared const T*
referable as shared const T*, void*, shared void*
aliasing with shared T*, immutable T*
LOCKED TAG: shared T*
referable as shared T*, shared const T*, void T*, shared void*
More or less...