Episode 21: A Garbage Episode
We talked about this episode for months now, and it's finally here. Garbage collection in its full glory. Classic and free-threaded. Generational and single-pass. With eager and delayed untracking. We cover it all! Explicitly.## Timestamps(00:00:00) THE FUCKING INTRO(00:02:03) PART 0: SPORTS NEWS(00:03:19) PART 1: GARBAGE COLLECTION(00:03:57) The big problem with refcounting(00:08:35) Solving reference cycles through PyGC_Head(00:11:45) 64 bits ought to be enough for anybody(00:17:30) Why a doubly-linked list?(00:21:15) How reference counting makes finding cycles easier(00:26:25) Roots bloody roots(00:30:17) How are objects in the cycle destroyed?(00:31:58) Object resurrection(00:43:21) Why do you need "generations"?(00:52:26) Delayed untracking(00:54:46) Weak references, strong problems(00:59:19) GC in free threading(01:03:27) Reference counting in free-threading builds(01:10:08) Incremental GC talk is DEFERRED(01:11:00) PART 2: PR OF THE WEEK(01:17:15) Type checking the standard library itself?(01:29:51) PART 3: WHAT'S GOING ON IN CPYTHON?(01:30:15) Free-threading changes(01:32:54) Performance updates(01:36:11) http.server supports HTTPS!(01:37:01) PEP 768 and 758 landed(01:37:34) HACL*(01:38:24) fnmatch.filterfalse()(01:38:54) Bugfixes(01:42:46) Curiosities(01:54:49) OUTRO