इस विषय पर कुछ सामग्री पढ़ने के बाद मुझे अभी भी यकीन नहीं है कि संकलित भाषा और व्याख्या की गई भाषा के बीच अंतर क्या है। मुझे बताया गया था कि यह जावा और जावास्क्रिप्ट के बीच अंतर है। क्या कोई इसे समझने में मेरी मदद करेगा?
इस विषय पर कुछ सामग्री पढ़ने के बाद मुझे अभी भी यकीन नहीं है कि संकलित भाषा और व्याख्या की गई भाषा के बीच अंतर क्या है। मुझे बताया गया था कि यह जावा और जावास्क्रिप्ट के बीच अंतर है। क्या कोई इसे समझने में मेरी मदद करेगा?
जवाबों:
संकलित और व्याख्या की गई भाषा के बीच अंतर क्या है?
अंतर भाषा में नहीं है; यह कार्यान्वयन में है ।
मेरे सिस्टम से बाहर निकलने के बाद, यहाँ एक जवाब है:
एक संकलित कार्यान्वयन में, मूल कार्यक्रम को देशी मशीन निर्देशों में अनुवादित किया जाता है, जिन्हें सीधे हार्डवेयर द्वारा निष्पादित किया जाता है।
एक कार्यान्वित कार्यान्वयन में, मूल कार्यक्रम का अनुवाद कुछ और में किया जाता है। एक अन्य कार्यक्रम, जिसे "दुभाषिया" कहा जाता है, फिर "कुछ और" की जांच करता है और जो कुछ भी कार्यों के लिए कहा जाता है वह करता है। भाषा और इसके कार्यान्वयन के आधार पर, "कुछ और" के विभिन्न रूप हैं। अधिक लोकप्रिय से कम लोकप्रिय, "कुछ और" हो सकता है
एक वर्चुअल मशीन के लिए द्विआधारी निर्देश, जिसे अक्सर बायटेकोड कहा जाता है , जैसा कि लुआ, पायथन, रूबी, स्मॉलटाक और कई अन्य प्रणालियों में किया जाता है (दृष्टिकोण को यूसीएसडी पी-सिस्टम और यूसीएससी पास्कल द्वारा 1970 के दशक में लोकप्रिय बनाया गया था)
मूल कार्यक्रम का एक पेड़-जैसा प्रतिनिधित्व, जैसे अमूर्त-वाक्यविन्यास पेड़, जैसा कि कई प्रोटोटाइप या शैक्षिक दुभाषियों के लिए किया जाता है।
Tcl के समान स्रोत कार्यक्रम का एक टोकन निरूपण
स्रोत कार्यक्रम के पात्र, जैसा कि MINT और TRAC में किया गया था
एक बात जो इस समस्या को जटिल बनाती है वह यह है कि मूल मशीन निर्देशों में बायटेकोड का अनुवाद (संकलन) करना संभव है । इस प्रकार, एक सफल जटिल कार्यान्वयन अंततः एक कंपाइलर प्राप्त कर सकता है। यदि कंपाइलर गतिशील रूप से चलता है, तो पर्दे के पीछे, इसे अक्सर एक इन-टाइम कंपाइलर या JIT कंपाइलर कहा जाता है। JIT को जावा, जावास्क्रिप्ट, लुआ और कई अन्य भाषाओं के लिए तैयार किया गया है। उस बिंदु पर आपके पास एक हाइब्रिड कार्यान्वयन हो सकता है जिसमें कुछ कोड की व्याख्या की जाती है और कुछ कोड संकलित किए जाते हैं।
जावा और जावास्क्रिप्ट इस अंतर को प्रदर्शित करने के लिए एक बहुत बुरा उदाहरण है , क्योंकि दोनों की व्याख्या की गई भाषाएं हैं । जावा (व्याख्यायित) और सी (या सी ++) (संकलित) एक बेहतर उदाहरण हो सकता है।
धारीदार-पाठ के माध्यम से क्यों? जैसा कि यह उत्तर सही ढंग से बताता है, व्याख्या / संकलित भाषा के ठोस कार्यान्वयन के बारे में है, न कि प्रति भाषा के बारे में । जबकि "सी एक संकलित भाषा है" जैसे कथन आम तौर पर सच हैं, किसी को सी भाषा दुभाषिया लिखने से रोकने के लिए कुछ भी नहीं है। वास्तव में, C के लिए दुभाषिए मौजूद हैं ।
मूल रूप से, संकलित कोड को कंप्यूटर के सीपीयू द्वारा सीधे निष्पादित किया जा सकता है। यही है, निष्पादन योग्य कोड सीपीयू की "मूल" भाषा ( विधानसभा भाषा ) में निर्दिष्ट है ।
सीपीयू मशीन के निर्देशों के अनुसार किसी भी प्रारूप से रन-टाइम पर व्याख्या की गई भाषाओं के कोड का अनुवाद किया जाना चाहिए। यह अनुवाद दुभाषिया द्वारा किया जाता है।
डालने का एक और तरीका है कि व्याख्या की है भाषाएं हैं कोड मशीन निर्देशों के अनुवाद किया है कदम-दर-कदम जबकि कार्यक्रम क्रियान्वित किया जा रहा है, जबकि संकलित भाषाओं कोड अनुवाद किया गया है इससे पहले कि प्रोग्राम निष्पादन।
यहाँ कम्पाइलर बनाम इंटरप्रेटर भाषा के बीच बुनियादी अंतर है।
संकलक भाषा
दुभाषिया भाषा:
एक संकलक, सामान्य रूप से, उच्च स्तरीय भाषा कंप्यूटर कोड पढ़ता है और इसे पी-कोड या देशी मशीन कोड में परिवर्तित करता है। एक दुभाषिया सीधे पी-कोड या एक व्याख्या किए गए कोड जैसे कि बेसिक या लिस्प से चलता है। आमतौर पर, संकलित कोड बहुत तेजी से चलता है, अधिक कॉम्पैक्ट है, और पहले से ही सभी वाक्यविन्यास त्रुटियों और कई अवैध संदर्भ त्रुटियों को पाया है। प्रभावित कोड की व्याख्या करने के लिए आवेदन के प्रयासों के बाद व्याख्या किए गए कोड में केवल ऐसी त्रुटियां पाई जाती हैं। व्याख्या किए गए कोड अक्सर सरल अनुप्रयोगों के लिए अच्छे होते हैं जो केवल एक बार या अधिकतम एक या दो बार, या शायद प्रोटोटाइप के लिए भी उपयोग किए जाएंगे। गंभीर अनुप्रयोगों के लिए संकलित कोड बेहतर है। एक कंपाइलर पहले पूरे कार्यक्रम में लेता है, त्रुटियों की जांच करता है, उसका संकलन करता है और फिर उसे निष्पादित करता है। जबकि, एक दुभाषिया इस लाइन को लाइन से करता है, इसलिए यह एक लाइन लेता है, त्रुटियों के लिए इसकी जांच करता है,
यदि आपको अधिक जानकारी की आवश्यकता है, तो बस "कंपाइलर और दुभाषिया के बीच अंतर" के लिए Google।
यह एक बहुत ही नकली अंतर है, और वास्तव में आम तौर पर एक भाषा की संपत्ति नहीं है, लेकिन उस कार्यक्रम के बजाय आप उस भाषा में कोड निष्पादित करने के लिए उपयोग कर रहे हैं।
हालांकि, अधिकांश भाषाओं का उपयोग मुख्य रूप से एक या दूसरे रूप में किया जाता है, और हां, जावा को अनिवार्य रूप से हमेशा संकलित किया जाता है, जबकि जावास्क्रिप्ट को अनिवार्य रूप से हमेशा व्याख्या किया जाता है।
स्रोत कोड को संकलित करने के लिए उस पर एक प्रोग्राम चलाना है जो एक बाइनरी, निष्पादन योग्य फ़ाइल उत्पन्न करता है, जो जब चलता है, तो स्रोत द्वारा परिभाषित व्यवहार होता है। उदाहरण के लिए, javac मानव-रीडबेल .java फ़ाइलों को मशीन-पठनीय .class फ़ाइलों में संकलित करता है।
स्रोत कोड की व्याख्या करने के लिए उस पर एक प्रोग्राम चलाया जाता है जो एक मध्यस्थ फ़ाइल उत्पन्न किए बिना, तुरंत परिभाषित व्यवहार का उत्पादन करता है। उदाहरण के लिए, जब आपका वेब ब्राउज़र stackoverflow.com को लोड करता है, तो यह जावास्क्रिप्ट के एक समूह की व्याख्या करता है (जिसे आप पृष्ठ स्रोत को देखकर देख सकते हैं) और इन पृष्ठों के बहुत सारे अच्छे प्रभाव पैदा करते हैं - उदाहरण के लिए, अपवोटिंग, या थोड़ा नोटिफ़ायर। शीर्ष पर सलाखों।
शेल स्क्रिप्टिंग और संकलित भाषा जैसे निर्देशों के अनुसार रन समय में व्याख्या की गई भाषा को निष्पादित किया जाता है, जिसे संकलित किया जाता है (असेंबली भाषा में परिवर्तित किया जाता है, जिसे CPU समझ सकता है) और फिर c ++ की तरह निष्पादित किया जाता है।
जैसा कि अन्य ने कहा है, संकलित और व्याख्या एक प्रोग्रामिंग भाषा के कार्यान्वयन के लिए विशिष्ट है ; वे भाषा में अंतर्निहित नहीं हैं। उदाहरण के लिए, C दुभाषिए हैं।
हालाँकि, हम (और व्यवहार में हम करते हैं) प्रोग्रामिंग भाषाओं को इसके सबसे सामान्य (कभी-कभी विहित) कार्यान्वयन के आधार पर वर्गीकृत कर सकते हैं। उदाहरण के लिए, हम कहते हैं कि सी संकलित है।
सबसे पहले, हमें अस्पष्ट दुभाषियों और संकलक के बिना परिभाषित करना चाहिए:
भाषा X के लिए एक दुभाषिया एक प्रोग्राम (या एक मशीन, या सामान्य रूप से बस किसी प्रकार का तंत्र) है जो भाषा X में लिखे गए किसी भी प्रोग्राम p को निष्पादित करता है जैसे कि यह प्रभाव करता है और X के विनिर्देश द्वारा निर्धारित परिणामों का मूल्यांकन करता है ।
एक संकलक से एक्स के लिए वाई एक प्रोग्राम (या एक मशीन, या सिर्फ सामान्य रूप में तंत्र के कुछ प्रकार) है कि किसी भी कार्यक्रम के लिए अनुवाद है पी कुछ भाषा से एक्स एक शब्दार्थ बराबर कार्यक्रम में पी ' कुछ भाषा में वाई कि व्याख्या इस तरह से पी ' Y के लिए दुभाषिया के साथ समान परिणाम प्राप्त होंगे और X के लिए दुभाषिया के साथ p की व्याख्या करने के समान प्रभाव होंगे ।
ध्यान दें कि प्रोग्रामर के दृष्टिकोण से, सीपीयू अपनी संबंधित देशी मशीन भाषा के लिए मशीन दुभाषिए हैं।
अब, हम प्रोग्रामिंग भाषाओं का एक अस्थायी वर्गीकरण 3 श्रेणियों में कर सकते हैं जो इसके सबसे सामान्य कार्यान्वयन पर निर्भर करता है:
कभी-कभी, नरम और कठोर संकलित भाषाओं को केवल संकलित करने के लिए संदर्भित किया जाता है, इस प्रकार C #, Java, C, C ++ को संकलित किया जाता है।
इस वर्गीकरण के भीतर, जावास्क्रिप्ट एक व्याख्या की गई भाषा हुआ करती थी, लेकिन यह कई साल पहले थी। आजकल, यह सबसे प्रमुख जावास्क्रिप्ट कार्यान्वयन में देशी मशीन भाषा के लिए JIT- संकलित है, इसलिए मैं कहूंगा कि यह नरम संकलित भाषाओं में आता है।