On Monday, 19 June 2017 at 06:34:49 UTC, Ali Çehreli wrote:
It's unreliable because structs are value types in D, which
means that they can be moved around freely. This is why
self-referencing structs are illegal in D.
I guess it's more like the spec states, that they can be moved
vithout notice. Value type semantics themselves do not mean
spontaneous uncontrolled mobility.
I can't claim expertise but here is a quick and dirty proof of
concept that Vittorio Romeo and I had played with a few weeks
ago:
...
shared byte b; // to prevent compiler optimizations
struct UniquePtr {
void * p;
this(void * p) {
this.p = p;
import core.atomic;
core.atomic.atomicOp!"+="(b, 1);
}
Very interesting hack, thank you.
Note how post-blit is disabled there. In addition to a
moveFrom(), that's exactly what Atila Neves had to do in this
automem library as well:
https://github.com/atilaneves/automem
Nice, thanks.