D may disappoint in the presence of an alien Garbage Collector?
Anton via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Jul 28 13:52:00 PDT 2014
On Monday, 28 July 2014 at 19:57:38 UTC, Carl Sturtivant wrote:
> Suppose I want to use D as a system programming language to
> work with a library of functions written in another language,
> operating on dynamically typed data that has its own garbage
> collector, such as an algebra system or the virtual machine of
> a dynamically typed scripting language viewed as a library of
> operations on its own data type. For concreteness, suppose the
> library is written in C. (More generally, the data need not
> restricted to the kind above, but for concreteness, make that
> supposition.)
>
> Data in such a system is usually a (possibly elaborate) tagged
> union, that is essentially a struct consisting of (say) two
> words, the first indicating the type and perhaps containing
> some bits that indicate other attributes, and the second
> containing the data, which may be held directly or indirectly.
> Call this a Descriptor.
>
> Descriptors are small, so it's natural to want them held by
> value and not allocated on the heap (either D's or the
> library's) unless they are a part of a bigger structure that
> naturally resides there. And it's natural to want them to
> behave like values when passed as parameters or assigned. This
> usually fits in with the sort of heterogeneous copy semantics
> of such a library, where some of the dynamic types are
> implicitly reference types and others are not.
>
> The trouble is that the library's alien GC needs to be made
> aware of each Descriptor when it appears and when it
> disappears, so that a call of a library function that allocates
> storage doesn't trigger a garbage collection that vacuums up
> library allocated storage that a D Descriptor points to, or
> fails to adjust a pointer inside a D descriptor when it moves
> the corresponding data, or worse, follows a garbage pointer
> from an invalid D Descriptor that's gone out of scope. This
> requirement applies to local variables, parameters and
> temporaries, as well as to other situations, like D arrays of
> Descriptors that are D-heap allocated. Ignore the latter kind
> of occasion for now.
>
> Abstract the process of informing the GC of a Descriptor's
> existence as a Protect operation, and that it will be out of
> scope as an Unprotect operation. Protect and Unprotect
> naturally need the address of the storage holding the relevant
> Descriptor.
>
> In a nutshell, the natural requirement when interfacing to such
> a library is to add Descriptor as a new value type in D along
> the lines described above, with a definition such that Protect
> and Unprotect operations are compiled to be performed
> automatically at the appropriate junctures so that the user of
> the library can forget about garbage collection to the usual
> extent.
>
> How can this requirement be fulfilled?
Suppose I want to do system programming...Would I choose the
option with a GC ?
Just get off. The GC is just such a fagot. People are smart
enough to manage memory.
More information about the Digitalmars-d-learn
mailing list