2015-03-13 7 views
26

के बीच क्या अंतर है मुझे थोड़ा उलझन में लग रहा है, क्या कोई वर्णन करने में मदद कर सकता है जावास्क्रिप्ट इंजन और जावास्क्रिप्ट रनटाइम पर्यावरण के बीच क्या अंतर है। बीटीडब्ल्यू, इवेंट लूप इंजन या रनटाइम में लागू किया गया था?जावास्क्रिप्ट इंजन और जावास्क्रिप्ट रनटाइम पर्यावरण

उत्तर

68

सी और अन्य संकलित भाषाओं के विपरीत, जावास्क्रिप्ट एक कंटेनर में चलता है - एक प्रोग्राम जो आपके जेएस कोड पढ़ता है और उन्हें चलाता है। इस कार्यक्रम runnable आदेशों को दो बातें

  • अपने कोड को पार्स करने और परिवर्तित करना चाहिए
  • इतना है कि यह बाहरी दुनिया के साथ बातचीत कर सकते हैं जावास्क्रिप्ट को कुछ वस्तुओं प्रदान करते हैं।

पहला भाग इंजन कहा जाता है और दूसरा रनटाइम है।

उदाहरण के लिए, Chrome ब्राउज़र Node.js एक ही इंजन का उपयोग करें - वी 8, लेकिन उनके Runtimes अलग हैं: क्रोम में आप जबकि नोड आप require, बफ़र और प्रक्रियाओं देता है, window, डोम वस्तुओं आदि की है।

+0

आपके उत्तर के लिए बहुत बहुत धन्यवाद, यह संक्षिप्त और समझदार है। – clark

+0

@georg आप कुछ लिंक प्रदान कर सकते हैं, ताकि मुझे इसके बारे में बेहतर जानकारी मिल सके। – refactor

+0

यह अच्छा और सरल है, लेकिन कंपाइलर और इंजन के बीच क्या अंतर है? –

12

आइए पहली बार जावास्क्रिप्ट के आगे संकलित कार्यान्वयन की कल्पना करें।

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

चलो इन चीजों को रनटाइम सपोर्ट सर्विसेज पर कॉल करें।

एक दूसरी बात यह है कि कार्यक्रम के लिए उपलब्ध होने की जरूरत है, वस्तुओं रहे हैं इस तरह के Array, Function, Object, आदि और कार्यों जैसे forEach के रूप में। ऑब्जेक्ट्स और फ़ंक्शंस का संग्रह जो प्रोग्राम को गेट-गो से उपलब्ध होने की आवश्यकता है, को आमतौर पर कोर लाइब्रेरी या बेस लाइब्रेरी कहा जाता है। जावास्क्रिप्ट जैसी भाषा के लिए, जिसे एम्बेडेड करने के लिए डिज़ाइन किया गया है, संदर्भ के आधार पर अतिरिक्त पुस्तकालय भी मौजूद हैं। उदाहरण के लिए, ब्राउज़र में एम्बेडेड जावास्क्रिप्ट के लिए, हम उम्मीद करते हैं कि डीओएम ऑब्जेक्ट्स और फ़ंक्शंस और वैश्विक window और document ऑब्जेक्ट्स और अन्य मौजूद हैं। इन्हें कोर लाइब्रेरी का भी हिस्सा माना जा सकता है।

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

शब्दावली 100% स्पष्ट नहीं है: कभी कभी, केवल रनटाइम सहायता सेवा के रूप में रनटाइम वातावरण में भेजा जाता है, कभी-कभी, कोर लाइब्रेरी भी शामिल है।

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

इवेंट लूप होस्ट वातावरण का हिस्सा है, जावास्क्रिप्ट कार्यान्वयन नहीं।

+0

आपके धैर्यपूर्वक उत्तर के लिए धन्यवाद। – clark

9

कल्पना कीजिए एक रोबोट एक संगीत खेल रहा है:

  • जावा स्क्रिप्ट कोड रोबोट के लिए संगीत नोट्स होगा।
  • जावास्क्रिप्ट इंजन रोबोट होगा जो नोट्स को समझ सकता है और उस पर कार्य कर सकता है।
  • जावास्क्रिप्ट रनटाइम वह उपकरण होगा जो संगीत चलाने के लिए रोबोट का उपयोग कर सकता है।

कल्पना कीजिए एक रोबोट एक आग बाहर डाल रहा है:

  • जावा स्क्रिप्ट कोड रोबोट के लिए निर्देशों का एक आग बुझाने के लिए किया जाएगा।
  • जावास्क्रिप्ट इंजन रोबोट होगा जो निर्देशों को समझ सकता है और उस पर कार्य कर सकता है।
  • जावास्क्रिप्ट रनटाइम आग ट्रक, और पानी की बंदूक होगी।
संबंधित मुद्दे