प्रोग्रामिंग भाषा कार्यान्वयन: Difference between revisions
No edit summary |
No edit summary |
||
Line 12: | Line 12: | ||
===[[ आभासी मशीन | वर्चुअल मशीन]]=== | ===[[ आभासी मशीन | वर्चुअल मशीन]]=== | ||
वर्चुअल मशीन एक विशेष प्रकार का इंटरप्रेटर है जो बाइटकोड की व्याख्या करता है।<ref name="LanguageGreg" />बाइटकोड मशीन कोड के समान एक [[क्रॉस-प्लेटफ़ॉर्म सॉफ़्टवेयर|पोर्टेबल]] निम्न-स्तरीय कोड है, | वर्चुअल मशीन एक विशेष प्रकार का इंटरप्रेटर है जो बाइटकोड की व्याख्या करता है।<ref name="LanguageGreg" />बाइटकोड मशीन कोड के समान एक [[क्रॉस-प्लेटफ़ॉर्म सॉफ़्टवेयर|पोर्टेबल]] निम्न-स्तरीय कोड है, चूंकि इसे सामान्यतः भौतिक मशीन के अतिरिक्त वर्चुअल मशीन पर निष्पादित किया जाता है।<ref name="MakeUseOfVM">{{cite web |last1=Sridhar |first1=Jay |title=क्यों जावा वर्चुअल मशीन आपके कोड को बेहतर ढंग से चलाने में मदद करती है|url=https://www.makeuseof.com/tag/why-java-virtual-machine-code-run-better/ |website=MakeUseOf |access-date=22 March 2020}}</ref> अपनी दक्षता में सुधार करने के लिए, कई प्रोग्रामिंग भाषाएँ जैसे [[जावा (प्रोग्रामिंग भाषा)]],<ref name="MakeUseOfVM" />[[पायथन (प्रोग्रामिंग भाषा)]],<ref name="PythonBytecode">{{cite web |last1=Bennett |first1=James |title=पायथन बाइटकोड का परिचय|url=https://opensource.com/article/18/4/introduction-python-bytecode |website=Opensource.com |access-date=22 March 2020}}</ref> और सी शार्प (प्रोग्रामिंग भाषा)<ref name="CLR">{{cite web |last1=Ali |first1=Mirza Farrukh |title=सामान्य भाषा रनटाइम (सीएलआर) डॉटनेट|url=https://medium.com/@mirzafarrukh13/common-language-runtime-dotnet-83e0218edcae |website=Medium |access-date=22 March 2020}}</ref> व्याख्या किए जाने से पहले बाइटकोड में संकलित किया जाता है। | ||
===[[सही समय पर संकलन|जस्ट-इन-टाइम कंपाइलर]]=== | ===[[सही समय पर संकलन|जस्ट-इन-टाइम कंपाइलर]]=== | ||
कुछ वर्चुअल मशीनों में बाइटकोड निष्पादन की दक्षता में सुधार करने के लिए जस्ट-इन-टाइम (जेआईटी) कंपाइलर | कुछ वर्चुअल मशीनों में बाइटकोड निष्पादन की दक्षता में सुधार करने के लिए जस्ट-इन-टाइम (जेआईटी) कंपाइलर सम्मिलित होता है। जबकि बाइटकोड को वर्चुअल मशीन द्वारा निष्पादित किया जा रहा है, यदि जेआईटी कंपाइलर यह निर्धारित करता है कि बाइटकोड के एक हिस्से का बार-बार उपयोग किया जाएगा, तो यह उस विशेष हिस्से को मशीन कोड में संकलित करता है। JIT जेआईटी कंपाइलर फिर मशीन कोड को [[ रैंडम एक्सेस मेमोरी |रैंडम एक्सेस मेमोरी]] में संग्रहीत करता है जिससे इसका उपयोग वर्चुअल मशीन द्वारा किया जा सके। जेआईटी कंपाइलर लंबे संकलन समय और तेज़ निष्पादन समय के बीच संतुलन बनाने का प्रयास करते हैं।<ref name="LanguageGreg" /> | ||
Line 23: | Line 23: | ||
कंपाइलर एक भाषा में लिखे प्रोग्राम को दूसरी भाषा में अनुवाद करता है। अधिकांश कंपाइलर तीन चरणों में व्यवस्थित होते हैं: एक कंपाइलर फ्रंट एंड, एक ऑप्टिमाइज़र और एक बैक एंड पर व्यवस्थित होते हैं। कार्यक्रम को समझने के लिए फ्रंट एंड जिम्मेदार है। यह सुनिश्चित करता है कि प्रोग्राम वैध है और इसे एक [[मध्यवर्ती प्रतिनिधित्व]] में बदल देता है, प्रोग्राम का प्रतिनिधित्व करने के लिए कंपाइलर द्वारा उपयोग की जाने वाली डेटा संरचना का उपयोग किया जाता है। ऑप्टिमाइज़र गति बढ़ाने या [[निष्पादन]] योग्य के आकार को कम करने के लिए मध्यवर्ती प्रतिनिधित्व में सुधार करता है जो अंततः कंपाइलर द्वारा उत्पादित होता है। बैक एंड अनुकूलित मध्यवर्ती प्रतिनिधित्व को कंपाइलर की आउटपुट भाषा में परिवर्तित करता है।<ref name="EngineeringCompiler">{{cite book |last1=Cooper |first1=Keith |last2=Torczon |first2=Linda |title=एक कंपाइलर इंजीनियरिंग|url=https://archive.org/details/engineeringcompi00coop_143 |url-access=limited |date=7 February 2011 |publisher=Morgan Kaufmann |isbn=9780120884780 |pages=[https://archive.org/details/engineeringcompi00coop_143/page/n238 6]-9 |edition=2nd}}</ref> | कंपाइलर एक भाषा में लिखे प्रोग्राम को दूसरी भाषा में अनुवाद करता है। अधिकांश कंपाइलर तीन चरणों में व्यवस्थित होते हैं: एक कंपाइलर फ्रंट एंड, एक ऑप्टिमाइज़र और एक बैक एंड पर व्यवस्थित होते हैं। कार्यक्रम को समझने के लिए फ्रंट एंड जिम्मेदार है। यह सुनिश्चित करता है कि प्रोग्राम वैध है और इसे एक [[मध्यवर्ती प्रतिनिधित्व]] में बदल देता है, प्रोग्राम का प्रतिनिधित्व करने के लिए कंपाइलर द्वारा उपयोग की जाने वाली डेटा संरचना का उपयोग किया जाता है। ऑप्टिमाइज़र गति बढ़ाने या [[निष्पादन]] योग्य के आकार को कम करने के लिए मध्यवर्ती प्रतिनिधित्व में सुधार करता है जो अंततः कंपाइलर द्वारा उत्पादित होता है। बैक एंड अनुकूलित मध्यवर्ती प्रतिनिधित्व को कंपाइलर की आउटपुट भाषा में परिवर्तित करता है।<ref name="EngineeringCompiler">{{cite book |last1=Cooper |first1=Keith |last2=Torczon |first2=Linda |title=एक कंपाइलर इंजीनियरिंग|url=https://archive.org/details/engineeringcompi00coop_143 |url-access=limited |date=7 February 2011 |publisher=Morgan Kaufmann |isbn=9780120884780 |pages=[https://archive.org/details/engineeringcompi00coop_143/page/n238 6]-9 |edition=2nd}}</ref> | ||
यदि किसी दी गई [[उच्च स्तरीय भाषा]] का कंपाइलर किसी अन्य उच्च स्तरीय भाषा का निर्माण करता है, तो इसे [[स्रोत-से-स्रोत संकलक|ट्रांसपिलर]] कहा जाता है। ट्रांसपिलर का उपयोग | यदि किसी दी गई [[उच्च स्तरीय भाषा]] का कंपाइलर किसी अन्य उच्च स्तरीय भाषा का निर्माण करता है, तो इसे [[स्रोत-से-स्रोत संकलक|ट्रांसपिलर]] कहा जाता है। ट्रांसपिलर का उपयोग आधुनिक भाषाओं का विस्तार करने या अन्य भाषाओं जैसे [[सी (प्रोग्रामिंग भाषा)]]) के [[सॉफ्टवेयर पोर्टेबिलिटी|पोर्टेबल]] और अच्छी तरह से अनुकूलित कार्यान्वयन का लाभ उठाकर कंपाइलर विकास को सरल बनाने के लिए किया जा सकता है।<ref name="LanguageGreg" /> | ||
व्याख्या और संकलन के कई संयोजन संभव हैं, और कई आधुनिक प्रोग्रामिंग भाषा कार्यान्वयन में दोनों के तत्व | व्याख्या और संकलन के कई संयोजन संभव हैं, और कई आधुनिक प्रोग्रामिंग भाषा कार्यान्वयन में दोनों के तत्व सम्मिलित हैं। उदाहरण के लिए, स्मॉलटॉक प्रोग्रामिंग भाषा को पारंपरिक रूप से बायटेकोड में संकलित करके कार्यान्वित किया जाता है, जिसे बाद में वर्चुअल मशीन द्वारा व्याख्या या संकलित किया जाता है। चूँकि स्मॉलटॉक बाइटकोड एक वर्चुअल मशीन पर चलता है, यह विभिन्न हार्डवेयर प्लेटफ़ॉर्म पर पोर्टेबल है।<ref name="SmalltalkBook">{{cite book |last1=Lewis |first1=Simon |title=स्मॉलटॉक की कला और विज्ञान|date=May 11, 1995 |publisher=Prentice Hall |isbn=9780133713459 |pages=20–21 |url=http://sdmeta.gforge.inria.fr/FreeBooks/Art/artAdded174186187Final.pdf#page=32 |access-date=23 March 2020}}</ref> | ||
==एकाधिक कार्यान्वयन== | ==एकाधिक कार्यान्वयन== | ||
प्रोग्रामिंग भाषाओं में एकाधिक कार्यान्वयन हो सकते हैं। अलग-अलग कार्यान्वयन अलग-अलग भाषाओं में लिखे जा सकते हैं और कोड को संकलित या व्याख्या करने के लिए विभिन्न तरीकों का उपयोग कर सकते हैं। उदाहरण के लिए, पायथन (प्रोग्रामिंग भाषा) के कार्यान्वयन में | प्रोग्रामिंग भाषाओं में एकाधिक कार्यान्वयन हो सकते हैं। अलग-अलग कार्यान्वयन अलग-अलग भाषाओं में लिखे जा सकते हैं और कोड को संकलित या व्याख्या करने के लिए विभिन्न तरीकों का उपयोग कर सकते हैं। उदाहरण के लिए, पायथन (प्रोग्रामिंग भाषा) के कार्यान्वयन में सम्मिलित हैं:<ref name="AltPython">{{cite web |title=वैकल्पिक पायथन कार्यान्वयन|url=https://www.python.org/download/alternatives/ |website=Python.org |access-date=23 March 2020}}</ref> | ||
* [[सीपीथॉन]], पायथन का [[संदर्भ कार्यान्वयन]] है। | * [[सीपीथॉन]], पायथन का [[संदर्भ कार्यान्वयन]] है। | ||
* [[आयरनपाइथॉन]], .नेट फ्रेमवर्क को लक्षित करने वाला एक कार्यान्वयन (सी प्रोग्रामिंग भाषा में लिखा गया) है। | * [[आयरनपाइथॉन]], .नेट फ्रेमवर्क को लक्षित करने वाला एक कार्यान्वयन (सी प्रोग्रामिंग भाषा में लिखा गया) है। |
Revision as of 21:02, 2 August 2023
कंप्यूटर प्रोग्रामिंग में,प्रोग्रामिंग भाषा कार्यान्वयन कंप्यूटर प्रोग्राम निष्पादित करने की एक प्रणाली है। प्रोग्रामिंग भाषा कार्यान्वयन के लिए दो सामान्य दृष्टिकोण हैं:[1]
- स्पष्टीकरण:प्रोग्राम को एक इंटरप्रेटर द्वारा इनपुट के रूप में पढ़ा जाता है, जो प्रोग्राम में लिखी गई क्रियाओं को निष्पादित करता है।[2]
- संकलक : प्रोग्राम को एक कंपाइलर द्वारा पढ़ा जाता है, जो इसे किसी अन्य भाषा, जैसे बाईटकोड या मशीन कोड में अनुवादित करता है। अनुवादित कोड या तो सीधे हार्डवेयर द्वारा निष्पादित किया जा सकता है, या किसी अन्य इंटरप्रेटर या किसी अन्य कंपाइलर के लिए इनपुट के रूप में कार्य कर सकता है।[2]
इंटरप्रेटर
एक इंटरप्रेटर (कंप्यूटिंग) दो भागों से बना होता है: एक पार्सर और एक मूल्यांकनकर्ता उपयोग होता है। किसी प्रोग्राम को इंटरप्रेटर द्वारा इनपुट के रूप में पढ़ने के बाद, इसे पार्सर द्वारा संसाधित किया जाता है। पार्सर एक पार्स ट्री बनाने के लिए प्रोग्राम को भाषा घटकों में तोड़ता है। फिर मूल्यांकनकर्ता प्रोग्राम को निष्पादित करने के लिए पार्स ट्री का उपयोग करता है।[3]
वर्चुअल मशीन
वर्चुअल मशीन एक विशेष प्रकार का इंटरप्रेटर है जो बाइटकोड की व्याख्या करता है।[2]बाइटकोड मशीन कोड के समान एक पोर्टेबल निम्न-स्तरीय कोड है, चूंकि इसे सामान्यतः भौतिक मशीन के अतिरिक्त वर्चुअल मशीन पर निष्पादित किया जाता है।[4] अपनी दक्षता में सुधार करने के लिए, कई प्रोग्रामिंग भाषाएँ जैसे जावा (प्रोग्रामिंग भाषा),[4]पायथन (प्रोग्रामिंग भाषा),[5] और सी शार्प (प्रोग्रामिंग भाषा)[6] व्याख्या किए जाने से पहले बाइटकोड में संकलित किया जाता है।
जस्ट-इन-टाइम कंपाइलर
कुछ वर्चुअल मशीनों में बाइटकोड निष्पादन की दक्षता में सुधार करने के लिए जस्ट-इन-टाइम (जेआईटी) कंपाइलर सम्मिलित होता है। जबकि बाइटकोड को वर्चुअल मशीन द्वारा निष्पादित किया जा रहा है, यदि जेआईटी कंपाइलर यह निर्धारित करता है कि बाइटकोड के एक हिस्से का बार-बार उपयोग किया जाएगा, तो यह उस विशेष हिस्से को मशीन कोड में संकलित करता है। JIT जेआईटी कंपाइलर फिर मशीन कोड को रैंडम एक्सेस मेमोरी में संग्रहीत करता है जिससे इसका उपयोग वर्चुअल मशीन द्वारा किया जा सके। जेआईटी कंपाइलर लंबे संकलन समय और तेज़ निष्पादन समय के बीच संतुलन बनाने का प्रयास करते हैं।[2]
कम्पाइलर
कंपाइलर एक भाषा में लिखे प्रोग्राम को दूसरी भाषा में अनुवाद करता है। अधिकांश कंपाइलर तीन चरणों में व्यवस्थित होते हैं: एक कंपाइलर फ्रंट एंड, एक ऑप्टिमाइज़र और एक बैक एंड पर व्यवस्थित होते हैं। कार्यक्रम को समझने के लिए फ्रंट एंड जिम्मेदार है। यह सुनिश्चित करता है कि प्रोग्राम वैध है और इसे एक मध्यवर्ती प्रतिनिधित्व में बदल देता है, प्रोग्राम का प्रतिनिधित्व करने के लिए कंपाइलर द्वारा उपयोग की जाने वाली डेटा संरचना का उपयोग किया जाता है। ऑप्टिमाइज़र गति बढ़ाने या निष्पादन योग्य के आकार को कम करने के लिए मध्यवर्ती प्रतिनिधित्व में सुधार करता है जो अंततः कंपाइलर द्वारा उत्पादित होता है। बैक एंड अनुकूलित मध्यवर्ती प्रतिनिधित्व को कंपाइलर की आउटपुट भाषा में परिवर्तित करता है।[7]
यदि किसी दी गई उच्च स्तरीय भाषा का कंपाइलर किसी अन्य उच्च स्तरीय भाषा का निर्माण करता है, तो इसे ट्रांसपिलर कहा जाता है। ट्रांसपिलर का उपयोग आधुनिक भाषाओं का विस्तार करने या अन्य भाषाओं जैसे सी (प्रोग्रामिंग भाषा)) के पोर्टेबल और अच्छी तरह से अनुकूलित कार्यान्वयन का लाभ उठाकर कंपाइलर विकास को सरल बनाने के लिए किया जा सकता है।[2]
व्याख्या और संकलन के कई संयोजन संभव हैं, और कई आधुनिक प्रोग्रामिंग भाषा कार्यान्वयन में दोनों के तत्व सम्मिलित हैं। उदाहरण के लिए, स्मॉलटॉक प्रोग्रामिंग भाषा को पारंपरिक रूप से बायटेकोड में संकलित करके कार्यान्वित किया जाता है, जिसे बाद में वर्चुअल मशीन द्वारा व्याख्या या संकलित किया जाता है। चूँकि स्मॉलटॉक बाइटकोड एक वर्चुअल मशीन पर चलता है, यह विभिन्न हार्डवेयर प्लेटफ़ॉर्म पर पोर्टेबल है।[8]
एकाधिक कार्यान्वयन
प्रोग्रामिंग भाषाओं में एकाधिक कार्यान्वयन हो सकते हैं। अलग-अलग कार्यान्वयन अलग-अलग भाषाओं में लिखे जा सकते हैं और कोड को संकलित या व्याख्या करने के लिए विभिन्न तरीकों का उपयोग कर सकते हैं। उदाहरण के लिए, पायथन (प्रोग्रामिंग भाषा) के कार्यान्वयन में सम्मिलित हैं:[9]
- सीपीथॉन, पायथन का संदर्भ कार्यान्वयन है।
- आयरनपाइथॉन, .नेट फ्रेमवर्क को लक्षित करने वाला एक कार्यान्वयन (सी प्रोग्रामिंग भाषा में लिखा गया) है।
- ज्योथॉन, जावा वर्चुअल मशीन को लक्षित करने वाला एक कार्यान्वयन है।
- पीवाईपीवाई , गति के लिए डिज़ाइन किया गया एक कार्यान्वयन (आरपाइथन में लिखा गया) है।
संदर्भ
- ↑ Ranta, Aarne (9 May 2012). प्रोग्रामिंग भाषाओं को कार्यान्वित करना (PDF). College Publications. pp. 16–18. ISBN 9781848900646. Retrieved 22 March 2020.
- ↑ 2.0 2.1 2.2 2.3 2.4 Baker, Greg. "भाषा कार्यान्वयन". Computing Science - Simon Fraser University. Retrieved 22 March 2020.
- ↑ Evans, David (19 August 2011). कंप्यूटिंग का परिचय (PDF). University of Virginia. p. 211. Retrieved 22 March 2020.
{{cite book}}
: CS1 maint: location missing publisher (link) - ↑ 4.0 4.1 Sridhar, Jay. "क्यों जावा वर्चुअल मशीन आपके कोड को बेहतर ढंग से चलाने में मदद करती है". MakeUseOf. Retrieved 22 March 2020.
- ↑ Bennett, James. "पायथन बाइटकोड का परिचय". Opensource.com. Retrieved 22 March 2020.
- ↑ Ali, Mirza Farrukh. "सामान्य भाषा रनटाइम (सीएलआर) डॉटनेट". Medium. Retrieved 22 March 2020.
- ↑ Cooper, Keith; Torczon, Linda (7 February 2011). एक कंपाइलर इंजीनियरिंग (2nd ed.). Morgan Kaufmann. pp. 6-9. ISBN 9780120884780.
- ↑ Lewis, Simon (May 11, 1995). स्मॉलटॉक की कला और विज्ञान (PDF). Prentice Hall. pp. 20–21. ISBN 9780133713459. Retrieved 23 March 2020.
- ↑ "वैकल्पिक पायथन कार्यान्वयन". Python.org. Retrieved 23 March 2020.
बाहरी संबंध
- Media related to Compiling and linking at Wikimedia Commons