मुझे यह समझने के लिए दिया गया है कि पायथन एक व्याख्या की गई भाषा है ...
यह लोकप्रिय मेम गलत है, या, बल्कि, (प्राकृतिक) भाषा के स्तर की गलतफहमी पर बनाई गई है: एक ऐसी ही गलती "बाइबिल एक हार्डकवर किताब है" कहना होगा। मुझे समझाएं कि उपमा ...
"द बाइबल" किताबों के वर्ग (वास्तविक, भौतिक वस्तुओं के रूप में पहचानी जाने वाली) के अर्थ में "एक पुस्तक" है ; "बाइबल की प्रतियों" के रूप में पहचानी जाने वाली पुस्तकों में सामान्य रूप से कुछ मौलिक होने की संभावना है (सामग्री, हालांकि वे भी अलग-अलग भाषाओं में हो सकती हैं, विभिन्न स्वीकार्य अनुवादों के साथ, फुटनोट्स के स्तर और अन्य एनोटेशन) - हालांकि, वे पुस्तकें हैं पूरी तरह से अच्छी तरह से उन पहलुओं के असंख्य में अंतर करने की अनुमति दी जाती है जिन्हें मौलिक नहीं माना जाता है - छपाई में उपयोग किए जाने वाले बंधन, बंधन का रंग, फ़ॉन्ट (ओं) का उपयोग किया जाता है, चित्रण यदि कोई हो, विस्तृत लेखन योग्य मार्जिन या नहीं, संख्या और प्रकार के अंतर्निहित बुकमार्क , इत्यादि इत्यादि।
यह बहुत संभव है कि बाइबल का एक विशिष्ट मुद्रण वास्तव में हार्डकवर बाइंडिंग में होगा - आखिरकार, यह एक ऐसी किताब है जिसे आम तौर पर बार-बार पढ़ने के लिए माना जाता है, जिसे कई स्थानों पर बुकमार्क किया गया है, जो दिए गए अध्याय और कविता बिंदुओं की तलाश में है। , आदि, और एक अच्छा हार्डकवर बंधन इस तरह के उपयोग के तहत एक दी गई प्रतिलिपि को लंबे समय तक बना सकता है। हालाँकि, ये सांसारिक (व्यावहारिक) मुद्दे हैं जिनका उपयोग यह निर्धारित करने के लिए नहीं किया जा सकता है कि दी गई वास्तविक पुस्तक वस्तु बाइबल की एक प्रति है या नहीं: पेपरबैक मुद्रण पूरी तरह से संभव है!
इसी तरह, पायथन भाषा के कार्यान्वयन के एक वर्ग को परिभाषित करने के अर्थ में "एक भाषा" है, जो सभी कुछ बुनियादी मामलों में समान होना चाहिए (वाक्यविन्यास, अधिकांश शब्दार्थ उन हिस्सों के उन हिस्सों को छोड़कर, जहां उन्हें स्पष्ट रूप से भिन्न होने की अनुमति है) लेकिन पूरी तरह से अनुमति है हर "कार्यान्वयन" विवरण के बारे में अलग-अलग जानने के लिए - इसमें वे दिए गए स्रोत फ़ाइलों के साथ कैसे व्यवहार करते हैं, क्या वे स्रोतों को कुछ निचले स्तर के रूपों के लिए संकलित करते हैं (और, यदि हां, तो कौन सा रूप है - और क्या वे ऐसे बचाते हैं संकलित प्रपत्र, डिस्क या अन्य जगहों पर), वे कैसे कहा रूपों को निष्पादित करते हैं, और आगे।
शास्त्रीय कार्यान्वयन, CPython, को अक्सर लघु के लिए "Python" कहा जाता है - लेकिन यह कई उत्पादन-गुणवत्ता कार्यान्वयनों में से एक है, जो Microsoft के IronPython के साथ कंधे से कंधा मिलाकर चलता है (जो CLR कोडों को संकलित करता है, अर्थात ".NET .NET), Jython (जो JVM कोड के लिए संकलित करता है), PyPy (जो स्वयं Python में लिखा गया है और "जस्ट-इन-टाइम" जेनरेट की गई मशीन लैंग्वेज सहित "बैक-एंड" रूपों की एक विशाल विविधता के लिए संकलन कर सकता है)। वे सभी पायथन (== "पायथन भाषा के कार्यान्वयन" हैं) ठीक उसी तरह जैसे कई सतही अलग-अलग पुस्तक ऑब्जेक्ट्स सभी बाइबल्स (== "बाइबिल की प्रतियां") हो सकते हैं।
यदि आप विशेष रूप से CPython में रुचि रखते हैं: यह स्रोत फ़ाइलों को पायथन-विशिष्ट निचले-स्तरीय रूप (जिसे "bytecode" के रूप में जाना जाता है) में संकलित करता है, तो जरूरत पड़ने पर स्वचालित रूप से करता है (जब कोई स्रोत फ़ाइल के अनुरूप कोई बायोटेक फ़ाइल नहीं होती है, या) बाइटकोड फ़ाइल स्रोत से भिन्न होती है या एक अलग पायथन संस्करण द्वारा संकलित की जाती है), आमतौर पर बायटेकोड फ़ाइलों को डिस्क में सहेजता है (भविष्य में उन्हें पुन: स्थापित करने से बचने के लिए)। OTOH IronPython आम तौर पर CLR कोड (उन्हें डिस्क पर सहेजना या नहीं, निर्भर करता है) और Jython से JVM कोड के लिए संकलित करेगा (उन्हें डिस्क में सहेजना या नहीं करना - यह .class
एक्सटेंशन का उपयोग करेगा यदि यह उन्हें बचाता है)।
इन निचले स्तर के रूपों को तब उपयुक्त "आभासी मशीनों" द्वारा निष्पादित किया जाता है, जिन्हें "दुभाषियों" के रूप में भी जाना जाता है - सीपीथॉन वीएम, .नेट रनटाइम, जावा वीएम (उर्फ जेवीएम), उपयुक्त के रूप में।
तो, इस अर्थ में (क्या विशिष्ट कार्यान्वयन करते हैं), पायथन एक "व्याख्या की गई भाषा" है यदि और केवल अगर सी # और जावा हैं: उनमें से सभी में पहले बायटेकोड के उत्पादन की एक विशिष्ट कार्यान्वयन रणनीति है, फिर इसे वीएम या दुभाषिया के माध्यम से निष्पादित करना है। ।
अधिक संभावना यह है कि "भारी", धीमा और उच्च-समारोह संकलन प्रक्रिया पर ध्यान केंद्रित किया गया है। सीपीथॉन को जितना संभव हो उतना तेजी से संकलित करने के लिए डिज़ाइन किया गया है, संभव के रूप में हल्के समारोह के साथ संभव है - संकलक बहुत कम त्रुटि की जाँच और अनुकूलन करता है, इसलिए यह तेजी से और थोड़ी मात्रा में स्मृति को चला सकता है, जो इसे मोड़ देता है। जब भी जरूरत हो, स्वचालित रूप से और पारदर्शी तरीके से चलाएं, उपयोगकर्ता को यह जानने की आवश्यकता के बिना भी कि अधिकांश समय एक संकलन चल रहा है। जावा और C # आम तौर पर संकलन के दौरान अधिक काम स्वीकार करते हैं (और इसलिए स्वचालित संकलन नहीं करते हैं) ताकि त्रुटियों को अधिक अच्छी तरह से जांचा जा सके और अधिक अनुकूलन किया जा सके। यह एक काले या सफेद स्थिति नहीं, ग्रे तराजू की एक निरंतरता है,