He’s using Python as an example of non refcounted garbage collection, but historically Python was refcounted with cycle breakers - is it now fully mark sweep?
Python is still ref counting with cycle detection. It’s extraordinarily difficult to change because every function in every C extension is littered with Py_INCREF, Py_DECREF, etc.
FWIW one thing I really learned in implementing a collector is how “littered all over” the codebase memory management is. It’s hard to change later, unless you have a layer of indirection like PyPy or Oil, which I mentioned here:
Yeah I would have been shocked if they managed to change it, though there are ways (for example you could have a non-zero refcount push an object into a separate root table, though then you need manage cycle breaking again :) ).
He’s using Python as an example of non refcounted garbage collection, but historically Python was refcounted with cycle breakers - is it now fully mark sweep?
Python is still ref counting with cycle detection. It’s extraordinarily difficult to change because every function in every C extension is littered with Py_INCREF, Py_DECREF, etc.
FWIW one thing I really learned in implementing a collector is how “littered all over” the codebase memory management is. It’s hard to change later, unless you have a layer of indirection like PyPy or Oil, which I mentioned here:
https://www.oilshell.org/blog/2023/01/garbage-collector.html#a-delicate-octopus-with-thousands-of-arms
I think non-moving tracing (e.g. mark and sweep) is the least “littered all over” of all strategies
Aside: Looks like they have a new dev guide which is kinda cool, haven’t seen this:
https://devguide.python.org/internals/garbage-collector/
Yeah I would have been shocked if they managed to change it, though there are ways (for example you could have a non-zero refcount push an object into a separate root table, though then you need manage cycle breaking again :) ).