Towards possibility of precise garbage collector
It seems that many approaches of further evolution of GC in uPy depend on being able to do precise GC, i.e. tell which fields with an object are pointers are which are not. To achieve this, each allocated memory block has to be explicitly typed (and from type, internal layout can be inferred). Way to achieve this while staying compatible with conservative GC and without updating code largely is to have to set of memory allocation routines: one set is to deal with uPy objects (which already have type header is structure member) and another set to deal with "raw" memory allocations (which will need type header added implicitly for precise GC, and nothing added for conservative GC).
We currently have ~dozen functions to do memalloc. The above means doubling them. Other approach would be to reserve all current functions to uPy objects, add just add 2 funcs for "raw" memory: m_malloc() (will use implicit "all pointers inside" type) and m_malloc_typed() which takes explicit type for allocation.
Other thoughts?
Backport CircuitPython GC changes in to uPy
Hello,
This issue is for the discussion of bringing CircuitPython's GC changes, commit, example video in to MicroPython.
@tannewt
This GC change shows a good improvement over fragmentation by separating long-lived and short-lived objects to opposite ends of the heap. Fragmentation is a long-standing issue with MicroPython and I'm hoping that bringing Scott's changes in to uPy will alleviate some of the memory stress. There has already been several discussions about changes to garbage collection and memory allocation, those I found immediately are: #2057 #1168 #1161. Mentions for members involved: @dpgeorge @pfalcon @danicampora
We should find an approach forward that does not block any ongoing progress towards GC/MM improvements. I'm hoping that the members mentioned can help clarify what is currently in progress, and what is open for contribution.