We’ve been gone a while. Here’s our excuse for being silent for a month: PyCon, PyCon, something something security. Come listen to how the conference looked like from our perspective! And whatever you do, DO NOT upgrade to Python 3.13.4.## Timestamps(00:00:00) INTRO(00:01:06) PART 1: LANGUAGE SUMMIT(00:04:47) A bit about the Summit talks(00:06:19) Is free-threading happening?(00:09:20) Łukasz and his favorite discussion item at the Summit(00:13:38) Find actual competent coverage of the Summit on the PSF blog(00:14:17) PART 2: PYCON TALK HIGHLIGHTS(00:14:33) Cory Doctorow's opening keynote(00:18:17) Brandt Bucher's talk on JIT challenges(00:28:28) Lysandros and Nathan talk about community adoption of free-threading(00:36:23) Lynn Root's keynote(00:37:46) PyXL: Python-oriented chip(00:39:47) Łukasz and his tutorial on WebGL with PyScript(00:47:58) A new bet appears!(00:48:14) Zoom, Enhance the Banana(00:54:11) Watch out, Łukasz is talking about audio again(01:02:42) Ivona and Pablo talk about remote code execution as a service(01:05:44) Core Python sprints after the conference(01:12:48) PART 3: PR OF THE WEEK(01:13:00) tarfile security fixes(01:19:13) Pablo's PR: strncmp considered harmful(01:25:36) PART 4: WHAT'S GOING ON IN CPYTHON(01:26:06) compression.zstd lands(01:28:01) concurrent.futures → asyncio.Future transfer 4X faster(01:29:14) Bugfix: PyCFuncPtr_call no longer uses locks(01:30:13) Some curiosities(01:34:14) OUTRO
--------
1:36:11
Beta Frenzy
Python 3.14 Beta 1 is coming! And that means we reach feature freeze. BUT QUICK, there’s still time to squeeze in one last thing!## Timestamps(00:00:00) INTRO(00:01:58) PART 1: Template strings(00:07:10) PART 2: Asyncio Introspection(00:29:07) PART 3: Syntax highlighting(00:43:00) PART 4: Color themes(00:50:56) PART 5: Debugging a remote process with pdb(01:01:35) PART 6: Python Installation Manager for Windows(01:05:29) PART 7: Worship(01:08:53) PART 8: What else is happening?(01:16:03) OUTRO
--------
1:19:11
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
--------
1:57:34
Episode 20: Remote Code Execution By Design
In this episode, Pablo's avoiding the topic of garbage collection by talking about his latest PEP, which allows unprecedented interaction with a running Python process. We also resolve the bet about reference counting semantics, mention some notable changes in Python since the last episode, and discuss syntax highlighting in PyREPL and why it's bad, actually.## Timestamps(00:00:00) INTRO(00:02:16) PART 1: PABLO'S LATEST PEP(00:04:34) gdb is IMPOSSIBLE(00:12:49) Make the process run code for you(00:14:14) This already works on PyPy(00:15:13) How does it work?(00:25:38) Why a file?(00:31:15) What if you don't trust Pablo?(00:32:57) sys.remote_exec()(00:36:09) Less obvious use cases(00:46:56) PART 2: BETS(00:55:44) PART 3: PR OF THE WEEK(00:55:50) Łukasz: syntax highlighting in PyREPL(01:10:14) Pablo's PR: allow the parser to activate future imports on the fly(01:20:11) PART 4: WHAT'S GOING ON IN CPYTHON(01:20:22) Free threading(01:23:30) Performance(01:34:41) PEP 765 implemented(01:36:08) concurrent.futures.Executor.map(buffersize=)(01:36:57) io.Reader and io.Writer(01:38:40) Pabluco's linecache fetching interactive source code(01:41:25) ast.unparse() roundtrip with semicolons(01:41:59) OUTRO
--------
1:44:20
Episode 19: Async hacks, unicorns and velociraptors
In this asynchronous episode we're interviewing a fellow core developer Yury Selivanov to talk about asyncio's past and future, composable design, immutability, and databases you'd actually like using. We also broke the 2-hour episode barrier!## Timestamps(00:00:00) INTRO(00:01:33) PART 1: INTERVIEW(00:02:27) What drives you?(00:04:47) How do you choose what to work on?(00:08:10) Hyperfocus(00:09:28) Things from Rust that Python could use(00:14:50) Nothing is sacred when you depend on glibc(00:18:47) TypeScript typing is god-tier(00:22:04) Adding async and await to Python(00:34:11) Adding new keywords to the language(00:41:17) Jumping into a new codebase(00:49:22) Any design regrets?(00:58:46) Contextvars(01:10:40) Is the frozenmap PEP happening?(01:19:21) uvloop(01:23:25) What makes Gel lovable?(01:39:57) PART 2: PR OF THE WEEK(01:47:08) Saturday talks at PyCon should be fun(01:50:35) PART 3: WHAT'S GOING ON IN CPYTHON(01:50:47) Ken Jin's tail-call interpreter(01:55:05) Barney Gale's glob.glob() optimization(01:55:43) Brandt's boolean guards to narrow types to values in the JIT(01:56:33) Mark Shannon's stack limits implemented with addresses, not counters(01:58:34) Brandt's removal of _DYNAMIC_EXIT(01:58:53) Mark Shannon's async for branches instrumented(01:59:36) Free-threading changes(01:59:58) Sam Gross' regression tests can now run in --parallel-threads(02:00:34) Tomasz Pytel's thread safety crusade(02:01:01) Xuanteng Huang's __annotations__ race fix(02:01:11) Kumar's per-thread linked lists for tasks(02:02:54) Serhiy's crashes related to PySys_GetObject() fixed(02:03:22) Sam's usage of stack pointers in thread stack traversal(02:03:38) Dino Viehland's lock avoidance during object cleanup(02:04:23) OUTRO
We talk about Python internals, because we work on Python internals. We joke about stuff, because we’re jokers. Episodes between 60 and 90 minutes in length. We’ve done more than a few so far and it doesn’t seem like we’ll be stopping any time soon!
Hi Loren!