radical ideas about GC and ARC : need to be time driven?

via Digitalmars-d digitalmars-d at puremagic.com
Wed May 14 13:02:07 PDT 2014


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).

> - 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).

> - 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.

Ola.


More information about the Digitalmars-d mailing list