radical ideas about GC and ARC : need to be time driven?
via Digitalmars-d
digitalmars-d at puremagic.com
Thu May 15 05:44:55 PDT 2014
On Wednesday, 14 May 2014 at 20:02:08 UTC, Ola Fosheim Grøstad
wrote:
> On Wednesday, 14 May 2014 at 19:45:20 UTC, Marc Schütz wrote:
>> - We have external code programmed in languages other than D,
>> most prominently C and C++. These don't provide any type
>> information, therefore the GC needs to handle their memory
>> conservatively, which means there can be false pointers => no
>> deterministic destruction.
>
> Oh yes, I agree.
>
> However, you could have rules for collection and FFI (calling
> C). Like only allowing collection if all C parameters that
> point to GC memory have a shorter life span than other D
> pointers to the same memory (kind of like borrowed pointers in
> Rust).
Some kind of lifetime annotation would be required for this. Not
that this is a bad idea, but it will require some work...
>
>> - Variables on the stack and in registers. In theory, the
>> compiler could generate that information, or existing debug
>> information might be used, but that's complicated for the GC
>> to handle and will probably have runtime costs.
>
> The easy solution is to use something that is to define safe
> zones where you can freeze (kind of like rendezvous
> semaphores, but not quite).
This helps with getting the registers on the stack, but we still
need type information for them.
>
>> - Untagged unions. The GC has no way to figure out which of
>> the union fields is currently valid. If any of them is a
>> pointer, it needs to treat them conservatively.
>
> So you need a function that can help the GC if the pointer
> fields of the union don't match up or don't point to class
> instances.
Which of course requires type information. And existing unions
need to be updated to implement this function. I guess sometimes
it might not even be possible to implement it, because the state
information is not present in the union itself.
More information about the Digitalmars-d
mailing list