We already have a NO_MOVE attribute that can be set or unset.
What's wrong with that?
http://dlang.org/phobos/core_memory.html#NO_MOVE
On Saturday, 13 October 2012 at 18:58:27 UTC, Alex Rønne
Petersen wrote:
Hi,
With precise garbage collection coming up, and most likely
compacting garbage collection in the future, I think it's time
we start thinking about an API to pin garbage collector-managed
objects.
A typical approach that people use to 'pin' objects today is to
allocate a chunk of memory from the C heap, add it as a root
[range], and store a reference in it. That, or just global
variables.
This is kind of terrible because adding the chunk of memory as
a root forces the GC to actually scan it, which is unnecessary
when what you really want is to pin the object in place and
tell the GC "I know what I'm doing, don't touch this".
I propose the following functions in core.memory.GC:
static bool pin(const(void)* p) nothrow;
static bool unpin(const(void)* p) nothrow;
The pin function shall pin the object pointed to by p in place
such that it is not allowed to be moved nor collected until
unpinned. The function shall return true if the object was
successfully pinned or false if the object was already pinned
or didn't belong to the garbage collector in the first place.
The unpin function shall unpin the object pointed to by p such
that it is once again eligible for moving and collection as
usual. The function shall return true if the object was
successfully unpinned or false if the object was not pinned or
didn't belong to the garbage collector in the first place.
Destroy!