Suppose you have some programming language with manual memory management. What features does this language need to have in order to be able to implement precise garbage collection as a library, and not as a fundamental language construct?By a precise GC I mean one where only pointers to the heap are traversed to ascertain which variables are or are not live.Some additional considerations:C and C++ have the Boehm garbage collector, but I don't count this since it's not a precise GC. The Boehm collector assumes that anything on the stack that could be a pointer, based purely on memory alignment requirements, is a pointer. For example, any integer k such that (k % 4) == 0 looks at a bit level like a pointer, since pointers must be 4-byte aligned.magpie transforms existing C code to use a precise garbage collector. The generated C code has a lot of stubs for garbage collection, i.e. stuff for registering any stack pointers into the heap with the collector. I don't count this because no one could ever be expected to write code that way; it's more of a compilation target for other languages.I imagine that such a language would need to have:Macros or some form of metaprogramming, for encapsulating all of the extra code needed to do things like register GC roots.Some reflective mechanism that allows you to inspect structs or unions; you need to determine which members are pointers.Some reflective mechanism that allows you to examine the stack frame layout. This sounds a lot harder than 2.I hope this isn't too vague or opinion-based but I've been wondering about it for a while.
What would a language look like in which precise GC was implementable as a library?
memory management;language design;garbage collection