Vote to promote Sergey Miryanov

I’d like to nominate Sergey Miryanov (@sergey-miryanov on GitHub, @sergey-miryanov here) for promotion to the core team.

Sergey began contributing to CPython in January 2025. Since then he has authored 65 merged PRs, opened 37 issues, reviewed more than 130 PRs by other people, and taken part in more than 250 issue discussions. In October 2025 @sobolevn and I nominated him to the triage team, and he has been a steady, reliable triager since.

Most of his work is in the hardest parts of the interpreter, especially the garbage collector:

  • Generational GC in 3.14 and 3.15. After the decision to revert the incremental GC, Sergey worked with @nascheme to forward-port the generational GC from 3.13 to both 3.14 and main. He also ported the heap_size accounting (#149025, #149195) and handled the manual backports of the finalizer weakref fix (#144214, #144444). This is careful, high-stakes work that 3.14 users now depend on.
  • GC observability. He proposed and implemented richer GC statistics, exposed them through _Py_DebugOffsets (#146532), and added get_gc_stats to _remote_debugging (#148071). The GC of a running process can now be monitored from outside the process without pausing it. On top of this he built gcmon, a zero-overhead tool that watches the GC of another process. He also did the performance analysis for PEP 848.
  • GC cleanups and correctness. He removed obsolete GC state (#137055, #138767) and fixed a leak in gc_mark_span_push (#141213). He made DEBUG_UNCOLLECTABLE actually print uncollectable objects (#136518). He also removed GC support from immutable types and from _thread.lock/RLock where it wasn’t needed (#139073, #141268), and made managed dict/weakref flags require Py_TPFLAGS_HAVE_GC (#135863).

He also works well outside the GC:

  • Class creation speed-ups for gh-132042 (#132156, #132619).
  • _PyTuple_FromPair. He implemented it from @markshannon’s proposal (#145325) and then carried out the migration across the Parser, Objects and Modules. That migration caught a real leak in OrderedDict.popitem along the way.
  • Crash and memory-safety fixes in the JIT/executor (#141921, #141959), BaseExceptionGroup.__repr__ (#146141), functools.partial.__setstate__ (#140671) and asyncio Task deallocation on the free-threaded build (#154563).
  • Leak fixes in ctypes, _pickle and _testexternalinspection.
  • Unbounded type-cache growth fix in ctypes. He implemented per-type pointer caching from @encukou’s proposal and the comtypes-compatibility fallbacks (#100926).
  • PyREPL fixes on Windows (#131901, #131910) and a Windows --enable-stackref-debug build option (#139728).
  • Documentation, including the async generators best-practices section (#141885) and the Py_TPFLAGS_PREHEADER docs.

What stands out to me is how Sergey works. He finds problems himself, writes clear issues with a concrete plan, and splits large changes into reviewable pieces. His reviews are thoughtful, and he is patient and pleasant to work with.

Honestly, I think we need more people like him: GC experts are rare, and the GC is one of the most important parts of the interpreter :smile:
I’ve worked with Sergey since his first PRs, and I’m confident he will be a great addition to the core team. If he is promoted, I’m happy to keep mentoring him.

  • Promote Sergey Miryanov
  • Do not promote
0 voters
14 Likes

Thanks for voting, everyone! The Steering Council has discussed the promotion and does not veto it :tada:

Congratulations and welcome to the core team, Sergey!

11 Likes

Thrilled to join the CPython core dev team! I’ll do my best to contribute meaningfully.

Thanks @Eclips4 and @sobolevn for mentoring me. Many thanks to everyone who has helped me!

13 Likes

The SC did not veto the promotion. Sergey is all set up now.

Welcome to the team, Sergey!

5 Likes

Thanks, Petr!

3 Likes