आपने अपने प्रश्न को पुन: प्रकाशित करने में गुइडो के कथन की देखरेख की। समस्या डायनामिक-टाइप की गई भाषा के लिए कंपाइलर नहीं लिख रही है। समस्या एक है जो लिख रही है (मानदंड 1) हमेशा सही होता है, (मापदंड 2) गतिशील टाइपिंग रखता है, और (मापदंड 3) कोड की एक महत्वपूर्ण राशि के लिए काफी तेज है।
पायथन के 90% (मानदंड 1) को लागू करना आसान है और इस पर लगातार तेज़ रहना चाहिए। इसी तरह, स्टैटिक टाइपिंग (फेलिंग मानदंड 2) के साथ तेज़ पायथन वेरिएंट बनाना आसान है। 100% को लागू करना भी आसान है (एक भाषा को लागू करना जो जटिल है कि आसान है), लेकिन अभी तक इसे लागू करने का हर आसान तरीका अपेक्षाकृत धीमी गति से निकलता है (मानदंड 3 विफल हो रहा है)।
एक दुभाषिया प्लस JIT को लागू करना जो सही है, पूरी भाषा को लागू करता है, और कुछ कोड के लिए तेज़ होता है संभव है, हालांकि काफी कठिन (cf. PyPy) और केवल इसलिए यदि आप JIT संकलक के निर्माण को स्वचालित करते हैं (साइको इसके बिना किया था) , लेकिन यह बहुत ही सीमित था कि यह किस कोड में तेजी ला सकता है)। लेकिन ध्यान दें कि यह स्पष्ट रूप से दायरे से बाहर है, क्योंकि हम स्थैतिक के बारे में बात कर रहे हैं(उर्फ आगे-आगे) संकलनकर्ता। मैं केवल यह बताने के लिए इसका उल्लेख करता हूं कि इसका दृष्टिकोण स्थिर संकलक के लिए काम क्यों नहीं करता (या कम से कम कोई मौजूदा प्रतिसाद नहीं है): इसे पहले प्रोग्राम की व्याख्या और निरीक्षण करना होगा, फिर लूप के विशिष्ट पुनरावृत्ति (या किसी अन्य रैखिक कोड) के लिए कोड उत्पन्न करना होगा। पथ), फिर उस विशिष्ट पुनरावृत्ति (या कम से कम, सभी संभावित पुनरावृत्तियों के लिए नहीं) के लिए मान्यताओं के आधार पर उस नरक से बाहर का अनुकूलन करें। उम्मीद यह है कि उस कोड के कई बाद के निष्पादन भी अपेक्षा से मेल खाएंगे और इस प्रकार अनुकूलन से लाभान्वित होंगे। शुद्धता सुनिश्चित करने के लिए कुछ (अपेक्षाकृत सस्ते) चेक जोड़े जाते हैं। यह सब करने के लिए, आपको इस बात का अंदाजा होना चाहिए कि किस चीज के लिए विशेषज्ञ होना चाहिए, और वापस आने के लिए एक धीमी लेकिन सामान्य कार्यान्वयन। एओटी संकलक के पास न तो है। वे विशेषज्ञ नहीं कर सकते सब परकोड के आधार पर वे नहीं देख सकते हैं (उदाहरण के लिए गतिशील रूप से लोड किया गया कोड), और लापरवाही से विशेषज्ञता का अर्थ है अधिक कोड उत्पन्न करना, जिसमें कई समस्याएं हैं (आईकैश उपयोग, बाइनरी आकार, संकलन समय, अतिरिक्त शाखाएं)।
एओटी कंपाइलर को लागू करना जो पूरी भाषा को सही ढंग से लागू करता है वह भी अपेक्षाकृत आसान है: इस कोड के साथ खिलाए जाने पर इंटरप्रेटर क्या करेगा इसके लिए रनटाइम में कॉल करने वाला कोड जनरेट करें। Nuitka (ज्यादातर) ऐसा करता है। हालाँकि, इससे बहुत अधिक प्रदर्शन लाभ नहीं मिलता है (मानदंड 3 को विफल करना), जैसा कि आपको अभी भी एक दुभाषिया के रूप में उतना ही अनावश्यक काम करना है, सी कोड के ब्लॉक को बायटेकोड भेजने के लिए बचाएं जो आपको संकलित करता है, लेकिन क्या। यह केवल एक छोटी सी लागत है - काफी महत्वपूर्ण एक मौजूदा दुभाषिया में अनुकूलन के लायक है, लेकिन अपनी समस्याओं के साथ एक पूरी नई कार्यान्वयन का औचित्य साबित करने के लिए पर्याप्त महत्वपूर्ण नहीं है।
तीनों मानदंडों को पूरा करने के लिए क्या आवश्यक होगा? हमें कोई पता नहीं है। कुछ स्थिर विश्लेषण योजनाएं हैं जो पाइथन कार्यक्रमों से ठोस प्रकार, नियंत्रण प्रवाह आदि के बारे में कुछ जानकारी निकाल सकती हैं। जो एकल बुनियादी ब्लॉक के दायरे से परे सटीक डेटा प्राप्त करते हैं, वे बहुत धीमी गति से होते हैं और पूरे कार्यक्रम को देखने की जरूरत होती है, या कम से कम अधिकांश। फिर भी, आप उस जानकारी के साथ बहुत कुछ नहीं कर सकते हैं, शायद अन्य के अलावा बिलिन प्रकारों पर कुछ संचालन का अनुकूलन करते हैं।
यही कारण है कि? इसे स्पष्ट रूप से रखने के लिए, एक संकलक या तो रनटाइम पर लोड किए गए पायथन कोड को निष्पादित करने की क्षमता को हटा देता है (मानदंड 1), या यह कोई भी धारणा नहीं बनाता है जिसे किसी भी पायथन कोड द्वारा अमान्य किया जा सकता है। दुर्भाग्य से, कि कार्यक्रमों के अनुकूलन के लिए काफी सब कुछ उपयोगी में शामिल हैं: कार्यों पलटाव हो सकता है, कक्षाओं उत्परिवर्तित किया जा सकता है या पूरी तरह से बदल दिया, मॉड्यूल मनमाने ढंग से भी संशोधित किया जा सकता सहित वैश्विक, आयात करने में कई तरह से अपहरण कर लिया जा सकता है, आदि एक एकल स्ट्रिंग के लिए पारित कर दिया eval
, exec
, __import__
या कई अन्य कार्य, उनमें से कोई भी कर सकता है। प्रभाव में, इसका मतलब है कि लगभग कोई बड़ी अनुकूलन लागू नहीं किया जा सकता है, थोड़ा प्रदर्शन लाभ प्राप्त करना (मानदंड 3 को विफल करना)। ऊपर के पैराग्राफ पर वापस।