जितने विविधतापूर्ण हैं, उतने ही सामान्य अवधारणाएं हैं, जो सभी गंभीर, आधुनिक प्रोग्रामिंग भाषाएं साझा करती हैं। उनमें से दो आपके सवालों के जवाब के मूल हैं।
एंटर बटन पर क्लिक करने और मेरे अजगर कोड से उत्पन्न मशीन कोड मेरे सीपीयू पर निष्पादित होने के बीच क्या कदम उठाता है?
कोड पार्स किया जाता है, विश्लेषण किया जाता है, और दुभाषिया में खिलाया जाता है। यह सब कंप्यूटर विज्ञान के एक बहुत ही महत्वपूर्ण क्षेत्र के बारे में है जिसे संकलक सिद्धांत के रूप में जाना जाता है । एक कंपाइलर एक प्रोग्राम है जो एक भाषा (आपके स्रोत कोड) से दूसरी भाषा में कोड का अनुवाद करता है (आमतौर पर मशीन कोड, हालांकि "ट्रांसपाइलर" जो एक उच्च-स्तरीय भाषा से दूसरे में मौजूद होता है)। यह एक बहुत बड़ा विषय है जिस पर आप वर्षों तक शोध कर सकते हैं, लेकिन यहाँ इसका मूल संस्करण है:
कंपाइलर एक पार्सर के साथ शुरू होता है , एक दिनचर्या जो आपके स्रोत कोड को पढ़ती है और भाषा के वाक्यविन्यास नियमों को लागू करती है यह पता लगाने के लिए कि क्या यह वैध पायथन (आपके मामले में) कोड के रूप में समझ में आता है। यदि ऐसा नहीं होता है, तो पार्सर एक त्रुटि को फेंक देगा और संकलक बाहर हो जाता है, लेकिन अगर ऐसा होता है, तो पार्सर आउटपुट सार संक्षेप ट्री या एएसटी के रूप में जाना जाता है। एएसटी एक पेड़ डेटा संरचना है, जिसके प्रत्येक नोड में सिंटैक्स का एक तत्व होता है। उदाहरण के लिए, यदि आप कहते हैं, तो आप एक मान के साथ , एक मान और के मान के x = 5
साथ समाप्त कर सकते हैं । आपके पूरे कार्यक्रम को इस तरह से एक बड़े पेड़ द्वारा दर्शाया जा सकता है।BinaryExpression
operator
=
Left
ReferenceExpression(x)
Right
IntegerLiteralExpression(5)
एक बार पार्सर एक एएसटी का उत्पादन करता है, दूसरा चरण सिमेंटिक विश्लेषण है । सादे अंग्रेजी में, इसका अर्थ है "यह पता लगाना कि यह एएसटी का अर्थ क्या है।" यह एएसटी को यह निर्धारित करने के लिए जांचता है कि क्या आपने ऐसा कुछ भी किया है जो एक वैध पार्स होने के बावजूद अवैध है, (उदाहरण के लिए, 3 तर्कों के साथ 1-तर्क फ़ंक्शन को कॉल करने की कोशिश कर रहा है), और यदि आप करते हैं तो त्रुटियों को उठाता है। अन्यथा, यह एएसटी का विश्लेषण करता है और एक मशीन को समझने के लिए इसे सरल बनाने के लिए इसे संपादित करता है।
तीसरा चरण कोड जनरेशन है। एक बार जब आपके पास पूरी तरह से विश्लेषण, सरलीकृत, वैध एएसटी होता है, तो आप इसे जनरेटर में खिलाते हैं, जो एएसटी चलता है और आउटपुट भाषा में कोड का उत्पादन करता है। यह आपका तैयार उत्पाद है।
पायथन के साथ, यह संकलक के बजाय एक दुभाषिया का उपयोग करता है। एक दुभाषिया एक कंपाइलर के समान काम करता है, एक अंतर के साथ: कोड पीढ़ी के बजाय, यह आउटपुट को इन-मेमोरी में लोड करता है और इसे सीधे आपके सिस्टम पर निष्पादित करता है। (यह कैसे होता है, इसके सटीक विवरण अलग-अलग भाषाओं और अलग-अलग व्याख्याकारों के बीच बेतहाशा भिन्न हो सकते हैं।)
और यह पायथन रनटाइम सिस्टम और / या लाइब्रेरी से कैसे संबंधित है?
सभी लेकिन बहुत सरल भाषाएं पूर्वनिर्धारित कार्यों के एक सेट के साथ आती हैं जो उपयोगकर्ताओं के एक बड़े प्रतिशत के लिए महत्वपूर्ण हैं और उपयोगकर्ताओं के लिए एक या किसी अन्य के लिए अपने दम पर लागू करना मुश्किल होगा। उनके कोड को किसी भी तीसरे पक्ष के पुस्तकालयों की आवश्यकता के बिना इन कार्यों में कॉल कर सकते हैं। (उदाहरण के लिए, आपके पास पायथन में print
, जो आउटपुट भेजता है stdout
। सौभाग्य को लागू करने के लिए अपने दम पर!) कार्यों का यह सेट आम तौर पर एक साझा पुस्तकालय में एकत्र किया जाता है जिसे कोड रन-टाइम में कॉल कर सकता है, यही कारण है कि यह ज्ञात है भाषा रनटाइम लाइब्रेरी के रूप में, या संक्षेप में "रनटाइम" के रूप में।