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...

Reply via email to