D may disappoint in the presence of an alien Garbage Collector?
Carl Sturtivant via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Jul 29 22:05:22 PDT 2014
On Monday, 28 July 2014 at 21:33:54 UTC, Rene Zwanenburg wrote:
>
> If I understand you correctly, an easy way is to use RefCounted
> with a simple wrapper. Something like this:
>
> // Descriptor defined by the external library
> struct DescriptorImpl
> {
> size_t type;
> void* data;
> }
>
> // Tiny wrapper telling the alien GC of the existence of this
> reference
> private struct DescriptorWrapper
> {
> DescriptorImpl descriptor;
> alias descriptor this;
>
> @disable this();
>
> this(DescriptorImpl desc)
> {
> // Make alien GC aware of this reference
> }
>
> ~this()
> {
> // Make alien GC aware this reference is no longer valid
> }
> }
>
> // This is the type you will be working with on the D side
> alias Descriptor = RefCounted!DescriptorWrapper;
Just read RefCounted definition here,
http://dlang.org/phobos/std_typecons.html#.RefCounted
and it heap allocates its object, so your response above does not
stack allocate the basic type that you call DescriptorWrapper,
and is not a solution to the problem as stated.
If there was no alien GC, but everything else was the same, heap
allocation of something containing a DescriptorImpl would be
unnecessary. Now achieve the same with the alien GC present
without an extra layer of indirection and heap allocation ---
this is the essence of my question.
More information about the Digitalmars-d-learn
mailing list