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

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

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

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

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

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

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

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

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