प्रोग्रामिंग भाषा कार्यान्वयन

कंप्यूटर प्रोग्रामिंग में,प्रोग्रामिंग भाषा कार्यान्वयन कंप्यूटर प्रोग्राम निष्पादित करने की एक प्रणाली है। प्रोग्रामिंग भाषा कार्यान्वयन के लिए दो सामान्य दृष्टिकोण हैं:
 * स्पष्टीकरण:प्रोग्राम को एक इंटरप्रेटर द्वारा इनपुट के रूप में पढ़ा जाता है, जो प्रोग्राम में लिखी गई क्रियाओं को निष्पादित करता है।
 * संकलक : प्रोग्राम को एक कंपाइलर द्वारा पढ़ा जाता है, जो इसे किसी अन्य भाषा, जैसे बाईटकोड या मशीन कोड में अनुवादित करता है। अनुवादित कोड या तो सीधे हार्डवेयर द्वारा निष्पादित किया जा सकता है, या किसी अन्य इंटरप्रेटर या किसी अन्य कंपाइलर के लिए इनपुट के रूप में कार्य कर सकता है।

इंटरप्रेटर
एक इंटरप्रेटर (कंप्यूटिंग) दो भागों से बना होता है: एक पार्सर और एक मूल्यांकनकर्ता उपयोग होता है। किसी प्रोग्राम को इंटरप्रेटर द्वारा इनपुट के रूप में पढ़ने के बाद, इसे पार्सर द्वारा संसाधित किया जाता है। पार्सर एक पार्स ट्री बनाने के लिए प्रोग्राम को भाषा घटकों में तोड़ता है। फिर मूल्यांकनकर्ता प्रोग्राम को निष्पादित करने के लिए पार्स ट्री का उपयोग करता है।

वर्चुअल मशीन
वर्चुअल मशीन एक विशेष प्रकार का इंटरप्रेटर है जो बाइटकोड की व्याख्या करता है। बाइटकोड मशीन कोड के समान एक पोर्टेबल निम्न-स्तरीय कोड है, चूंकि इसे सामान्यतः भौतिक मशीन के अतिरिक्त वर्चुअल मशीन पर निष्पादित किया जाता है। अपनी दक्षता में सुधार करने के लिए, कई प्रोग्रामिंग भाषाएँ जैसे जावा (प्रोग्रामिंग भाषा), पायथन (प्रोग्रामिंग भाषा), और सी शार्प (प्रोग्रामिंग भाषा) व्याख्या किए जाने से पहले बाइटकोड में संकलित किया जाता है।

जस्ट-इन-टाइम कंपाइलर
कुछ वर्चुअल मशीनों में बाइटकोड निष्पादन की दक्षता में सुधार करने के लिए जस्ट-इन-टाइम (जेआईटी) कंपाइलर सम्मिलित होता है। जबकि बाइटकोड को वर्चुअल मशीन द्वारा निष्पादित किया जा रहा है, यदि जेआईटी कंपाइलर यह निर्धारित करता है कि बाइटकोड के एक हिस्से का बार-बार उपयोग किया जाएगा, तो यह उस विशेष हिस्से को मशीन कोड में संकलित करता है। JIT जेआईटी कंपाइलर फिर मशीन कोड को रैंडम एक्सेस मेमोरी में संग्रहीत करता है जिससे इसका उपयोग वर्चुअल मशीन द्वारा किया जा सके। जेआईटी कंपाइलर लंबे संकलन समय और तेज़ निष्पादन समय के बीच संतुलन बनाने का प्रयास करते हैं।

कम्पाइलर
कंपाइलर एक भाषा में लिखे प्रोग्राम को दूसरी भाषा में अनुवाद करता है। अधिकांश कंपाइलर तीन चरणों में व्यवस्थित होते हैं: एक कंपाइलर फ्रंट एंड, एक ऑप्टिमाइज़र और एक बैक एंड पर व्यवस्थित होते हैं। कार्यक्रम को समझने के लिए फ्रंट एंड जिम्मेदार है। यह सुनिश्चित करता है कि प्रोग्राम वैध है और इसे एक मध्यवर्ती प्रतिनिधित्व में बदल देता है, प्रोग्राम का प्रतिनिधित्व करने के लिए कंपाइलर द्वारा उपयोग की जाने वाली डेटा संरचना का उपयोग किया जाता है। ऑप्टिमाइज़र गति बढ़ाने या निष्पादन योग्य के आकार को कम करने के लिए मध्यवर्ती प्रतिनिधित्व में सुधार करता है जो अंततः कंपाइलर द्वारा उत्पादित होता है। बैक एंड अनुकूलित मध्यवर्ती प्रतिनिधित्व को कंपाइलर की आउटपुट भाषा में परिवर्तित करता है।

यदि किसी दी गई उच्च स्तरीय भाषा का कंपाइलर किसी अन्य उच्च स्तरीय भाषा का निर्माण करता है, तो इसे ट्रांसपिलर कहा जाता है। ट्रांसपिलर का उपयोग आधुनिक भाषाओं का विस्तार करने या अन्य भाषाओं जैसे सी (प्रोग्रामिंग भाषा)) के पोर्टेबल और अच्छी तरह से अनुकूलित कार्यान्वयन का लाभ उठाकर कंपाइलर विकास को सरल बनाने के लिए किया जा सकता है।

व्याख्या और संकलन के कई संयोजन संभव हैं, और कई आधुनिक प्रोग्रामिंग भाषा कार्यान्वयन में दोनों के तत्व सम्मिलित हैं। उदाहरण के लिए, स्मॉलटॉक प्रोग्रामिंग भाषा को पारंपरिक रूप से बायटेकोड में संकलित करके कार्यान्वित किया जाता है, जिसे बाद में वर्चुअल मशीन द्वारा व्याख्या या संकलित किया जाता है। चूँकि स्मॉलटॉक बाइटकोड एक वर्चुअल मशीन पर चलता है, यह विभिन्न हार्डवेयर प्लेटफ़ॉर्म पर पोर्टेबल है।

एकाधिक कार्यान्वयन
प्रोग्रामिंग भाषाओं में एकाधिक कार्यान्वयन हो सकते हैं। अलग-अलग कार्यान्वयन अलग-अलग भाषाओं में लिखे जा सकते हैं और कोड को संकलित या व्याख्या करने के लिए विभिन्न तरीकों का उपयोग कर सकते हैं। उदाहरण के लिए, पायथन (प्रोग्रामिंग भाषा) के कार्यान्वयन में सम्मिलित हैं:
 * सीपीथॉन, पायथन का संदर्भ कार्यान्वयन है।
 * आयरनपाइथॉन, .नेट फ्रेमवर्क को लक्षित करने वाला एक कार्यान्वयन (सी प्रोग्रामिंग भाषा में लिखा गया) है।
 * ज्योथॉन, जावा वर्चुअल मशीन को लक्षित करने वाला एक कार्यान्वयन है।
 * पीवाईपीवाई, गति के लिए डिज़ाइन किया गया एक कार्यान्वयन (आरपाइथन में लिखा गया) है।