Skip to content

Instantly share code, notes, and snippets.

@gaborbernat
Last active May 17, 2026 18:30
Show Gist options
  • Select an option

  • Save gaborbernat/53ac95b294151395b0514ed336dabaa6 to your computer and use it in GitHub Desktop.

Select an option

Save gaborbernat/53ac95b294151395b0514ed336dabaa6 to your computer and use it in GitHub Desktop.
CPython 3.15 line changes analysis by feature (v3.14.0 → v3.15.0b1)

CPython 3.15 Changes Analysis

Range: v3.14.0 → v3.15.0b1 Overall: net +7,269,378 hand-written non-whitespace characters (excluding generated/vendored code) across 4,419 commits

Feature Breakdown

Measured in non-whitespace characters (not lines), excluding whitespace-only changes. % of Net excludes generated/vendored files (.gitattributes generated markers, _vendor/, Modules/expat, Modules/_hacl, ensurepip/_bundled/, *.min.js).

Feature Commits Net Chars Hand Net Chars % of Net Test % Gen % Top Contributors by Chars (top 3 + ≥5%) Languages
PEP 799: Profiling/Tachyon 153 +2,830,193 +1,384,581 19.05% 16% 51% Pablo Galindo Salgado (74%), László Kiss Kollár (12%), Ivona Stojanovic (4%) Py 31%, Other 30%, C/H 18%
Documentation 869 +1,511,522 +447,251 6.15% 1% 70% Adam Turner (15%), Peter Bierma (13%), Petr Viktorin (11%), Stan Ulbrych (8%), Ned Batchelder (7%) rST 51%, Other 40%, C/H 3%
Free-threading / GIL 196 +335,015 +301,408 4.15% 29% 10% Sam Gross (18%), Neil Schemenauer (17%), Alper Yoney (14%), Lysandros Nikolaou (9%), Kumar Aditya (8%) C/H 60%, Py 19%, rST 12%
JIT Compiler 237 +927,774 +289,905 3.99% 11% 69% Ken Jin (31%), Diego Russo (16%), Mark Shannon (12%), Hai Zhu (7%), Kumar Aditya (6%) C/H 93%, Py 6%
C API (general) 190 +632,897 +268,372 3.69% 16% 58% Petr Viktorin (19%), Sergey B Kirpichev (18%), Serhiy Storchaka (14%), Victor Stinner (11%), Adam Turner (10%) C/H 72%, rST 13%, Py 11%
Optimizations / Performance 131 +366,296 +230,371 3.17% 21% 37% Mark Shannon (26%), Pablo Galindo Salgado (17%), Pieter Eendebak (9%), Ken Jin (7%), Hai Zhu (6%) C/H 94%, Py 5%
PEP 803/820/793: Stable ABI 19 +170,263 +139,767 1.92% 31% 18% Petr Viktorin (99.6%), David Woods (0.4%) C/H 49%, rST 30%, Py 11%
Build System 124 +141,798 +135,212 1.86% 12% 5% Russell Keith-Magee (23%), Neil Schemenauer (14%), Pablo Galindo Salgado (9%), Steve Dower (8%) C/H 26%, Py 26%, Other 20%
PEP 810: Lazy Imports 30 +143,172 +126,804 1.74% 48% 11% Pablo Galindo Salgado (64%), Bartosz Sławecki (15%), Brett Cannon (11%) Py 59%, C/H 33%, rST 7%
asyncio 77 +96,650 +96,650 1.33% 42% 0% Pablo Galindo Salgado (25%), Kumar Aditya (24%), Alexander Nordin (11%), Bartosz Sławecki (10%) Py 60%, rST 24%, C/H 10%
Memory / Refcount / Leaks 148 +106,872 +73,946 1.02% 43% 31% Bénédikt Tran (15%), Ken Jin (9%), Serhiy Storchaka (7%), Nadeshiko Manju (6%), Hai Zhu (5%) C/H 93%, Py 5%
More Color 62 +70,881 +70,846 0.97% 47% 0% Hugo van Kemenade (31%), Sergey Miryanov (22%), Antonio Cuni (7%), Pablo Galindo Salgado (6%) Py 57%, C/H 28%, rST 10%
Improved Error Messages 50 +78,347 +68,157 0.94% 29% 13% Serhiy Storchaka (27%), Pablo Galindo Salgado (23%), Jason R. Coombs (9%), Stan Ulbrych (9%), Matt Van Horn (5%) C/H 80%, Py 18%
PEP 831: Frame Pointers 17 +73,678 +66,556 0.92% 36% 10% Diego Russo (80%), Pablo Galindo Salgado (13%), Petr Viktorin (3%) C/H 63%, Py 22%, Other 11%
Windows 123 +64,370 +66,456 0.91% 23% -3% Steve Dower (22%), Serhiy Storchaka (16%), Chris Eibl (11%), AN Long (10%), Adam Turner (7%) C/H 40%, Py 28%, Other 17%
Deprecations & Removals 70 +66,977 +61,471 0.85% 56% 8% Serhiy Storchaka (14%), Bénédikt Tran (13%), Hugo van Kemenade (12%), Rani Pinchuk (9%), Petr Viktorin (8%) Py 41%, rST 35%, C/H 20%
PEP 788: Finalization Protection 17 +54,954 +53,662 0.74% 49% 2% Peter Bierma (86%), Ken Jin (4%), Petr Viktorin (3%) C/H 57%, rST 28%, Py 14%
iOS / Android / Mobile 59 +45,845 +45,666 0.63% 25% 0% Russell Keith-Magee (71%), Malcolm Smith (24%), Łukasz Langa (1%) Py 47%, Other 16%, rST 16%
PEP 814: frozendict 59 +50,667 +44,690 0.61% 40% 12% Victor Stinner (85%), Donghee Na (8%), Pieter Eendebak (2%) C/H 58%, Py 36%, rST 5%
Emscripten / WASM 95 +73,938 +36,381 0.50% 58% 51% Brett Cannon (44%), Hood Chatham (42%), Savannah Ostrowski (5%) Py 60%, JSON 13%, Other 11%
Subinterpreters 46 +83,192 +33,283 0.46% 22% 60% Eric Snow (61%), Adam Turner (18%), Peter Bierma (8%) C/H 75%, Py 22%, rST 3%
PEP 829: Package Startup Config 2 +32,069 +32,069 0.44% 63% 0% Barry Warsaw (100%) Py 80%, rST 20%
PEP 686: UTF-8 Default 21 +24,474 +24,474 0.34% 69% 0% Serhiy Storchaka (56%), Mike Edmunds (14%), Adam Turner (13%), Victor Stinner (12%) Py 59%, C/H 27%, rST 14%
PEP 782: PyBytesWriter 56 +13,975 +14,423 0.20% 60% -3% Victor Stinner (92%), Emma Smith (5%), Maurycy Pawłowski-Wieroński (2%) C/H 90%, rST 7%, Py 3%
PEP 661: Sentinel 9 +14,082 +13,273 0.18% 36% 6% Jelle Zijlstra (84%), W. H. Wang (11%), Victor Stinner (3%) Py 37%, C/H 35%, rST 22%
PEP 798: Unpacking in Comprehensions 2 +32,237 +10,584 0.15% 9% 67% Adam J Hartz (95%) C/H 94%
PEP 728: TypedDict Extra Items 9 +8,207 +8,207 0.11% 50% 0% Jelle Zijlstra (41%), Angela Liss (35%), Bénédikt Tran (15%), Nikita Sobolev (6%) Py 68%, rST 32%
Tail-calling Interpreter 21 -3,012 +4,849 0.07% 0% Chris Eibl (45%), Ken Jin (18%), Savannah Ostrowski (15%), Victor Stinner (13%) C/H 78%, YAML 11%, rST 4%
PEP 747: TypeForm 1 +3,853 +3,853 0.05% 42% 0% Jelle Zijlstra (100%) Py 66%, rST 34%
PEP 800: Disjoint Bases 1 +2,111 +2,111 0.03% 11% 0% Jelle Zijlstra (100%) rST 66%, Py 34%

Column Legend

  • Net Chars: Total non-whitespace characters added minus removed
  • Hand Net Chars: Same, excluding generated/vendored files
  • % of Net: Share of +7,269,378 total hand-written non-whitespace chars
  • Test %: Percentage of net chars that is test code
  • Gen %: Percentage of net chars from generated or vendored files
  • Top Contributors by Chars (top 3 + ≥5%): Always shows top 3 contributors by hand-written non-whitespace chars touched, plus 4th/5th if they have ≥5%
  • Languages: Top 3 languages by chars touched, ≥3% threshold

Methodology

Each of the 4,419 commits was individually classified using a rule-based system combining:

  • GitHub issue number mapping (known tracking issues per feature)
  • Keyword pattern matching on commit messages
  • Validated through random spot-checking (3 consecutive rounds of 15 random samples with 0 misclassification errors)

Changes are measured in non-whitespace characters rather than lines, giving a more accurate picture of actual work done — a single line of minified JS or a deeply indented Python block doesn't distort the numbers. Generated/vendored detection uses .gitattributes markers plus known vendored paths (_vendor/, Modules/expat, Modules/_hacl, ensurepip/_bundled/, *.min.js).

Categories overlap (a commit can belong to multiple features). ~1,800 commits (41%) were classified as "Other" — genuine one-off stdlib fixes, test maintenance, and patches that don't belong to any tracked theme.

Historical Comparison (Last 6 Releases)

Release Commits Added Deleted Net Files Net/Commit
3.9 → 3.10 3,240 +226,951 -119,707 +107,244 2,029 33
3.10 → 3.11 4,382 +258,887 -172,864 +86,023 2,423 20
3.11 → 3.12 4,591 +383,391 -222,585 +160,806 2,569 35
3.12 → 3.13 6,067 +402,990 -269,326 +133,664 3,179 22
3.13 → 3.14 5,783 +406,548 -190,762 +215,786 2,690 37
3.14 → 3.15b1 4,419 +398,030 -148,962 +249,068 2,525 56

Note: Historical table uses line counts (the standard git metric) for comparability with prior analyses.

3.15 already has the largest net change of any release in this window, and it's still only at beta 1. At +249k net lines it's 2.3x the size of 3.11 and 1.15x the previous largest (3.14). The 56 net lines per commit is nearly double the historical average (~30), meaning commits are carrying more substance.


Generated 2026-05-17 by individually classifying all 4,419 commits in the python/cpython git history between v3.14.0 and v3.15.0b1. Non-whitespace character counting via git diff -U0.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment