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

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

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

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

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

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

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

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