Python 3.15 का Windows x86-64 इंटरप्रिटर लगभग 15% तेज़ होने की उम्मीद
(fidget-spinner.github.io)- CPython का tail-calling interpreter Windows x86-64 वातावरण में मौजूदा तरीके की तुलना में लगभग 15% बेहतर प्रदर्शन दिखाता है
- macOS AArch64(XCode Clang) पर भी लगभग 5% का performance improvement देखा गया है, और Windows में MSVC 2026 की experimental functionality का उपयोग किया गया है
- pyperformance benchmark में ज़्यादातर tests में speed improvement देखा गया, और कुछ में अधिकतम 78% तक सुधार
- performance improvement का मुख्य कारण compiler optimization heuristics reset और inlining improvement माना गया है
- Python 3.15 की आधिकारिक रिलीज़ पर, Visual Studio 2026 आधारित build में इसे डिफ़ॉल्ट रूप से लागू किया जाएगा
tail-calling interpreter का performance improvement
- CPython का tail-calling interpreter, मौजूदा switch-case interpreter की तुलना में Windows x86-64 पर लगभग 15% तेज़ मापा गया
- pyperformance के अनुसार, geometric mean में 15~16% सुधार
- कुछ benchmarks में अधिकतम 78% speed improvement, जबकि बहुत कम मामलों में 60% धीमापन
- macOS AArch64(XCode Clang) पर लगभग 5% performance improvement की पुष्टि हुई
- यह परिणाम इस शर्त पर मान्य है कि Python 3.15 development cycle के दौरान इसमें कोई बदलाव न हो
interpreter संरचना की तुलना
- C-आधारित interpreter implementation को तीन तरीकों में बाँटा जाता है: switch-case, computed goto, tail-call threaded
- switch-case: हर instruction के लिए branch handling
- computed goto: GCC/Clang extension, जिसमें branch address पर सीधे jump किया जाता है
- tail-call threaded: हर bytecode handler को function में अलग करना और अगले function को tail call करना
- पहले C compiler tail call optimization की गारंटी नहीं देते थे, इसलिए stack overflow का जोखिम था
- Clang के
__attribute__((musttail))और MSVC के[[msvc::musttail]]attribute से forced tail call संभव हो गया
Windows के लिए MSVC 2026 build results
- MSVC की experimental functionality का उपयोग करने वाले CPython build में ज़्यादातर benchmarks तेज़ हुए
- उदाहरण परिणाम:
spectralnorm: 1.48xnbody: 1.35xbm_django_template: 1.18xxdsl: 1.14x
- उदाहरण परिणाम:
- इसे Python 3.15 के “What’s New” दस्तावेज़ में आधिकारिक रूप से शामिल किया गया
- Visual Studio 2026(MSVC 18) build में tail-calling interpreter उपलब्ध
- pure Python libraries में लगभग 15%, और छोटे scripts में अधिकतम 40% speed improvement
performance improvement के कारण
- tail calling, compiler की optimization heuristics को reset करके अधिक efficient code generation को बढ़ावा देता है
- मौजूदा CPython interpreter loop लगभग 12,000 lines के एक single function से बना है, जिससे inlining optimization failure अक्सर होती है
- compiler code size बढ़ने से बचने के लिए कई बार inlining से इनकार करता है
- tail-calling approach में functions अलग हो जाते हैं, जिससे simple functions inline किए जा सकते हैं
- उदाहरण के तौर पर
PyStackRef_CLOSE_SPECIALIZEDजैसे simple function inline हो जाते हैं
- उदाहरण के तौर पर
- PGO(profile-guided optimization) build में भी यही phenomenon रिपोर्ट किया गया
build और उपयोग का तरीका
- फिलहाल केवल source build संभव है
- Visual Studio 2026 वातावरण में निम्न command से build करें
$env:PlatformToolset = "v145" ./PCbuild/build.bat --tail-call-interp -c Release -p x64 --pgo
- Visual Studio 2026 वातावरण में निम्न command से build करें
- आगे Python 3.15 development स्थिर होने पर official binary distribution जारी की जाएगी
1 टिप्पणियां
Hacker News की टिप्पणियाँ
यह MSVC और Clang में
musttailतथाpreserve_noneattributes की परिभाषा के अंतर को दिखाने वाला उदाहरण हैइन attributes को function declarator पर लगाना चाहिए, function specifier की स्थिति में यह काम नहीं करते
संबंधित code link
इससे ऐसा आभास मिलता है कि Microsoft ऐसी गैर-प्रकाशित सुविधाएँ केवल उन्हीं projects को बताता है जिन्हें वह महत्वपूर्ण मानता है
[[msvc::musttail]]वास्तव में एक आधिकारिक रूप से documented attribute थाइसे दर्शाने के लिए ब्लॉग पोस्ट को अपडेट करने वाला हूँ
संबंधित HN टिप्पणी
पोस्ट पढ़ने पर यह ठीक लगा कि इसमें transparency और तेज feedback को प्राथमिकता दी गई है
cross-compiler validation या independent audit होता तो और अच्छा रहता, लेकिन लेखक की पूर्ण पारदर्शिता के कारण इसे भरोसेमंद माना गया
जल्दी सार्वजनिक कर देने से Nelson ने Clang 19 bug पकड़ लिया, और उसकी वजह से आधिकारिक release से पहले उसे ठीक किया जा सका
इस बार dispatch logic और inlining दोनों तरह के सुधार हैं, इसलिए उन्हें अधिक भरोसा है
MSVC कुछ शर्तों में switch-case interpreter को threaded code में बदल सकता है, लेकिन CPython इतना जटिल है कि वह optimization वहाँ लागू नहीं होती
इसके बजाय tail call approach में C code लिखने वाले के पास अधिक नियंत्रण होता है
संबंधित संदर्भ: MSVC threaded code conditions, forceinline related issue
पहले tail duplication जैसी optimizations compiler के निर्णय पर निर्भर थीं, लेकिन अब interpreter सीधे उस machine code के रूप को व्यक्त कर सकता है जो वह चाहता है
पिछली चर्चा का link
C#/MAUI की तुलना में VS ecosystem बहुत भारी होने के कारण Python चुना गया
Tkinter असुविधाजनक लगा, Qt का learning curve बड़ा था, इसलिए wxGlade + wxPython का संयोजन इस्तेमाल किया गया
सिर्फ़ एक dependency चाहिए जो pip से install हो सके, और इसका Pythonic अनुभव पसंद आया
Windows runtime improvements देखकर अच्छा लगा
QtCreator में जल्दी UI बनाकर Python से logic जोड़ दें तो development speed बहुत तेज़ हो जाती है
Tkinter या Qt की तरह retained mode नहीं, बल्कि immediate mode तरीका है, इसलिए internal tooling में यह खास तौर पर उपयोगी है
imgui_bundle project
कहा गया कि प्रमुख ISA के लिए इसे assembly में लिखा हुआ होना चाहिए था
[[msvc::musttail]]MSVC 14.50 (पिछले महीने जारी) में जोड़ा गया एक नया attribute है, और CPython टीम ने कुछ ही हफ्तों में इसका उपयोग करके performance improvement हासिल कर लीMSVC musttail docs
Guido ने code simplicity को प्राथमिकता दी, इसलिए JIT अपनाने में देर हुई, और बाद में PEP 744 (JIT Compilation) जैसे प्रयास सामने आए
assembly optimization एक maintenance nightmare है, और Python की असली bottleneck packaging system है
PyPy, JIT की वजह से तेज़ है, लेकिन C extensions के साथ compatible नहीं है
Python का threading model भी optimization को कठिन बनाता है
दूसरी ओर JS single-threaded है, इसलिए अपेक्षाकृत सरल है
Python में C extensions के ज़रिए रास्ता निकाला जा सकता था, इसलिए CPython को optimize करने का दबाव कम था
साथ ही CPython विशाल C extension ecosystem के कारण compatibility नहीं तोड़ सकता
जबकि V8 अपनी internal structure को अपेक्षाकृत स्वतंत्र रूप से बदल सकता था
साथ ही stable C ABI बनाए रखना पड़ता है, इसलिए JIT के लिए code analysis को स्वतंत्र रूप से करना कठिन हो जाता है
इस संबंध में PyPy को इन बंधनों से जूझना पड़ा, इसका भी उल्लेख किया गया
साथ ही JS को सिर्फ़ pure JS support करना होता है, लेकिन Python को external extension ecosystem भी बनाए रखना पड़ता है, इसलिए optimization पर कई सीमाएँ हैं
साथ ही साझा किया गया कि उन्होंने
mitataसे JS library performance नापी हैImmer JS optimization PR
Wikipedia explanation, Matplotlib example
यह distribution को symmetric रूप में दिखाता है, लेकिन smoothing वास्तविक distribution को विकृत कर सकती है, और इसे space waste भी कहा जाता है
HN discussion में half-violin plot को बेहतर बताने वाली राय भी थी
example image
और AI-लिखित लेखों की सामान्य विशेषताओं (छोटे paragraphs, ज़रूरत से ज़्यादा सकारात्मक लहजा, गहराई की कमी आदि) पर व्यंग्य किया