हां और ना। हां, शास्त्रीय परिदृश्य स्रोत कोड से मशीन कोड उत्पन्न करने के लिए एक कंपाइलर का उपयोग करने वाला एक डेवलपर है, और मशीन कोड को फिर उपयोगकर्ताओं को वितरित किया जाता है।
वहाँ रहे हैं हालांकि इस के लिए कुछ अपवादों को छोड़कर। सबसे पहले, कई ओपन सोर्स प्रोजेक्ट्स मुख्य रूप से (या विशेष रूप से) सोर्स कोड फॉर्म में वितरित किए जाते हैं, और अंतिम उपयोगकर्ता से यह उम्मीद करते हैं कि वे जैसे make
और फिर कुछ कमांड में टाइप करके इंस्टॉल करें।make intall
। यह कंपाइलर, लिंकर इत्यादि को इनवॉइस कंप्यूटर के लिए सोर्स कोड से मशीन कोड जनरेट करेगा। इन मामलों में, हालांकि, निर्माण और स्थापित करने की प्रक्रिया इस बिंदु पर स्वचालित है (कम से कम करने का इरादा है) कि उपयोगकर्ता को शायद ही कभी इस तथ्य से परे बहुत ज्ञान की आवश्यकता होती है कि क्या उन्होंने कभी स्रोत कोड-केवल पैकेज स्थापित नहीं किया है , उनके पैकेज मैनेजर आम तौर पर कुछ "विकास" पैकेज की सूची देंगे, जो वास्तव में उनकी देखभाल करने वाले एप्लिकेशन को स्थापित करने के लिए एक शर्त के रूप में है (हालांकि कुछ अभी भी इसे उपयोगकर्ताओं को समाप्त करने के लिए अनफ्री के रूप में देखते हैं)।
एक और अपवाद (जिसे मैंने देखा है, लेकिन मेरे द्वारा देखे गए अन्य उत्तरों में बहुत अच्छी तरह से समझाया नहीं गया है) सिर्फ-इन-टाइम (JIT) कंपाइलर हैं। JIT संकलक के कुछ स्पष्ट उदाहरण Microsoft कॉमन लैंग्वेज रनटाइम (CLR) और जावा वर्चुअल मशीन (JVM) हैं। इन मामलों में, स्रोत कोड को मशीन कोड में अनुवाद करने में आम तौर पर दो पूरी तरह से अलग संकलक शामिल होते हैं । एक डेवलपर द्वारा उपयोग किया जाता है। हालांकि, मशीन कोड को सीधे जनरेट करने के बजाय, यह मशीन-स्वतंत्र बाइट कोड उत्पन्न करता है। सीएलआर / जेवीएम में एक दूसरा संकलक शामिल होता है , जो पहले से पूरी तरह से अलग है, जो उन बाइट कोड को लक्ष्य कंप्यूटर के लिए मशीन कोड में परिवर्तित करता है।
मुझे यह जोड़ना चाहिए कि दूसरा संकलक कड़ाई से आवश्यक नहीं है। जेवीएम (एक उदाहरण के लिए) के शुरुआती संस्करणों ने केवल संकलन करने के बजाय बाइट कोड की व्याख्या की। यह अक्सर एक काफी गंभीर प्रदर्शन का दंड वहन करता है, इसलिए उत्पादन के उपयोग के लिए हाल ही के जेवीएम में सबसे महत्वपूर्ण जेआईटी संकलक शामिल हैं।