Why same pointer type for GC and manual memory?

Dukc ajieskola at gmail.com
Wed Nov 13 15:30:33 UTC 2019


On Wednesday, 13 November 2019 at 11:07:12 UTC, IGotD- wrote:
> I'm trying to find the rationale why GC pointers (should be 
> names managed pointers) are using the exact same type as any 
> other pointer.
>
> Doesn't this limit the ability to change the default GC type?
What does grabage collector type mean?

> Doesn't this confusion make GC pointers just as unsafe as raw 
> pointers?
It does if you pass the pointers to somewhere the garbage 
collector does not know about. However, normally it has a list of 
all memory used by the program -even the memory that is not 
managed by it. But if you, for example, put a pointer to memory 
allocated by some C program that is totally unaware of the GC, 
you need to either manually register (and unregister) the memory 
to the GC, or keep a copy of the pointer in somewhere the GC 
knows about. Assuming the pointed memory is controlled by GC, 
that is. Otherwise, the GC will not find the pointer during 
collection and think you have stopped using the memory it points 
to.

> Has there been any prior discussion about introducing managed 
> pointers in D?
I'm not 100% sure what managed pointers mean -Are they so that 
you can't pass them to unregistered memory? A library solution 
would likely do -wrap the pointer in a struct and make it @system 
to extract it's pointer as "raw". So you cannot put it to 
C-allocated arrays without type casting, which you probably don't 
do accidently.


More information about the Digitalmars-d-learn mailing list