पायथन (और अन्य गतिशील भाषाओं) की शब्दार्थ विशेषताएं इसकी सुस्ती में क्या योगदान देती हैं?
कोई नहीं।
भाषा कार्यान्वयन का प्रदर्शन धन, संसाधनों और पीएचडी शोधों का एक कार्य है, न कि भाषा की विशेषताएँ। स्मॉलटाकल की तुलना में स्व बहुत अधिक गतिशील है और पायथन, रूबी, ईसीएमएस्क्रिप्ट, या लुआ की तुलना में थोड़ा अधिक गतिशील है, और इसमें एक वीएम था जो सभी मौजूदा लिस्प और स्मॉलटॉक वीएम से बेहतर प्रदर्शन कर रहा था (वास्तव में, स्व में लिखे गए एक छोटे से स्मॉलटॉक दुभाषिया के साथ स्वयं को भेज दिया गया था , और यहां तक कि सबसे मौजूदा स्मॉलटॉक VMs) की तुलना में तेज़ था), और कभी-कभी सी ++ के कार्यान्वयन की तुलना में तेजी से और कभी-कभी प्रतिस्पर्धी भी था।
फिर, सन ने स्वयं के वित्तपोषण को रोक दिया, और आईबीएम, माइक्रोसॉफ्ट, इंटेल, और कंपनी ने C ++ को वित्तपोषण करना शुरू कर दिया, और प्रवृत्ति उलट गई। सेल्फ डेवलपर्स ने अपनी खुद की कंपनी शुरू करने के लिए सन को छोड़ दिया, जहाँ उन्होंने सेल्फ वीएम के लिए विकसित तकनीक का इस्तेमाल किया जो कि अब तक के सबसे तेज़ स्मॉलटॉक वीएम (एनिमोर्फिक वीएम) में से एक का निर्माण किया, और फिर सन ने उस कंपनी को वापस खरीद लिया, और थोड़ा संशोधित संस्करण उस स्मॉलटॉक वीएम को अब "हॉटस्पॉट जेवीएम" के नाम से जाना जाता है। विडंबना यह है कि जावा प्रोग्रामर गतिशील भाषाओं को "धीमी" होने के लिए नीचे देखते हैं, जब वास्तव में, जावाधीमी गति से जब तक यह गतिशील भाषा प्रौद्योगिकी को अपनाया। (हां, यह सही है: हॉटस्पॉट जेवीएम अनिवार्य रूप से एक स्मालटाक वीएम है। बायटेकोड वेरिफायर बहुत प्रकार की जाँच करता है, लेकिन एक बार बायटेकोड को वेरिफ़ायर, वीएम और विशेष रूप से ऑप्टिमाइज़र और जेआईटी द्वारा स्वीकार नहीं किया जाता है। स्थिर प्रकारों के साथ बहुत अधिक रुचि! "
CPython बस बहुत सी चीजें नहीं करता है जो गतिशील भाषाओं (या बल्कि गतिशील प्रेषण) को तेज बनाता है: गतिशील संकलन (JIT), गतिशील अनुकूलन, सट्टा inlining, अनुकूली अनुकूलन, गतिशील de- अनुकूलन, गतिशील प्रकार प्रतिक्रिया / अनुमान। वहाँ भी समस्या है कि लगभग पूरे कोर और मानक पुस्तकालय सी में लिखा है, जिसका अर्थ है कि भले ही आप अचानक से 100x तेज कर दें, यह आपकी बहुत मदद नहीं करेगा, क्योंकि 95% कोड की तरह कुछ एक द्वारा निष्पादित पायथन प्रोग्राम C है, पायथन नहीं है। यदि सब कुछ पायथन में लिखा गया था, तो भी मध्यम स्पीडअप एवाल्चे को एक प्रभाव पैदा करेगा, जहां एल्गोरिदम तेज हो जाते हैं, और कोर डेटास्ट्रक्चर तेज हो जाते हैं, लेकिन निश्चित रूप से कोर डेटा संरचनाएं एल्गोरिदम, और कोर डेटा और कोर डेटा का भी उपयोग किया जाता है। हर जगह संरचनाओं का उपयोग किया जाता है,
आज की प्रणालियों में स्मृति-प्रबंधित OO भाषाओं (डायनामिक या नहीं) के लिए बहुत कुछ खराब है। वर्चुअल मेमोरी और मेमोरी प्रोटेक्शन विशेष रूप से कचरा संग्रह प्रदर्शन और सामान्य रूप से सिस्टम प्रदर्शन के लिए एक हत्यारा हो सकता है। और यह एक मेमोरी-सुरक्षित भाषा में पूरी तरह से अनावश्यक है: जब कोई मेमोरी एक्सेस शुरू नहीं होती है, तो अवैध मेमोरी एक्सेस से सुरक्षा क्यों करें? अज़ुल ने आधुनिक शक्तिशाली MMUs (Intel Nehalem और नए, और AMD के समतुल्य) का उपयोग करके कचरा संग्रह में बाधा डालने के बजाय इसका उपयोग करने का अनुमान लगाया है , लेकिन भले ही यह CPU द्वारा समर्थित हो, लेकिन मुख्यधारा OS के वर्तमान मेमोरी सबसिस्टम पर्याप्त शक्तिशाली नहीं हैं यह अनुमति देने के लिए (यही कारण है कि अज़ुल की जेवीएम वास्तव में इसके अलावा नंगे धातु पर वर्चुअलाइज्ड चलती है ओएस, इसके भीतर नहीं)।
सिंगुलैरिटी OS प्रोजेक्ट में, Microsoft ने प्रक्रिया पृथक्करण के प्रकार के बजाय MMU सुरक्षा का उपयोग करते समय सिस्टम प्रदर्शन पर ~ 30% के प्रभाव को मापा है।
अज़ुल ने एक और चीज़ देखी जब उनके विशेष जावा सीपीयू का निर्माण किया गया था कि आधुनिक मुख्यधारा सीपीयू कैश मिस की लागत को कम करने की कोशिश करते समय पूरी तरह से गलत चीज़ पर ध्यान केंद्रित करते हैं: वे शाखा भविष्यवाणी, मेमोरी प्रीफ़ैक्शन जैसी चीजों के माध्यम से कैश मिस की संख्या को कम करने की कोशिश करते हैं। और इसी तरह। लेकिन, एक भारी बहुरूपिक OO कार्यक्रम में, उपयोग के पैटर्न मूल रूप से छद्म-यादृच्छिक होते हैं, बस भविष्यवाणी करने के लिए कुछ भी नहीं है। इसलिए, उन सभी ट्रांजिस्टर को सिर्फ बर्बाद किया जाता है, और इसके बजाय किसी को क्या करना चाहिए, प्रत्येक व्यक्तिगत कैश मिस की लागत को कम कर रहा है। (कुल लागत #misses * लागत है, मुख्यधारा पहले नीचे लाने की कोशिश करती है, दूसरे को अज़ुल।) अज़ुल के जावा कम्प्यूट एक्सलेरेटर उड़ान में 20000 समवर्ती कैश मिस हो सकते हैं और अभी भी प्रगति कर सकते हैं।
जब Azul शुरू कर दिया है, वे सोचा वे कुछ ऑफ-द-शेल्फ आई / ओ घटक लेने के लिए और अपने स्वयं के विशेष सीपीयू कोर डिजाइन होगा, लेकिन क्या वे वास्तव में समाप्त हो गया की आवश्यकता होगी, ऐसा करने के लिए ठीक विपरीत था: वे एक नहीं बल्कि मानक ऑफ मिलने वाली ले लिया शेल्फ 3-एड्रेस RISC कोर और अपने स्वयं के मेमोरी कंट्रोलर, MMU और कैश सबसिस्टम को डिज़ाइन किया।
tl; dr : पायथन की "सुस्ती" भाषा की एक संपत्ति नहीं है, लेकिन (ए) इसके भोले (प्राथमिक) कार्यान्वयन, और ख) यह तथ्य है कि आधुनिक सीपीयू और ओएस को विशेष रूप से सी रन तेज बनाने के लिए डिज़ाइन किया गया है, और वे विशेषताएँ C के लिए या तो मदद नहीं कर रहे हैं (कैश) या यहां तक कि सक्रिय रूप से (वर्चुअल मेमोरी) पायथन परफॉर्मेंस को नुकसान पहुंचा रहे हैं।
और आप गतिशील एड-हॉक बहुरूपता के साथ किसी भी स्मृति-प्रबंधित भाषा को बहुत अधिक सम्मिलित कर सकते हैं ... जब एक कुशल कार्यान्वयन की चुनौतियों की बात आती है, तो पायथन और जावा भी बहुत हद तक "समान भाषा" हैं।