क्या Node.js एक ढांचा है? [बन्द है]


35

मैं भर्तीकर्ताओं, डेवलपर्स आदि को देखता रहता हूं, एक रूपरेखा के रूप में Node.js को देखें। मेरी राय में, यह वास्तव में Node.js के लिए अज्ञानता से बाहर है।

अक्सर, नौकरी के विवरण में, Node.js को AngularJS , React , आदि के बीच एक पुस्तकालय के रूप में वर्गीकृत किया जाता है । आमतौर पर, मैं इसे किसी ऐसे व्यक्ति द्वारा दर्ज किया जाता हूं जिसे अंतर नहीं पता है (HR, a recruiter, आदि)।

मेरी राय में, Node.js एक मंच , या एक रनटाइम वातावरण है; यह फ़ाइल सिस्टम की तरह (क्योंकि यह सर्वर के रूप में चलता है, और ब्राउज़र में नहीं) विभिन्न एपीआई के लिए डोम एपीआई (ब्राउज़र में जावास्क्रिप्ट) को स्विच करता है।

ऐसा क्यों है कि लोग सोचते हैं कि Node.js एक ढांचा है; क्या मै गलत हु? क्या यह वास्तव में एक ढांचा है?



5
विशेष रूप से नहीं, लेकिन मैं भ्रम देख सकता था।
ndugger

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

ध्यान दें कि नोड DOM API को स्विच नहीं करता है और आप जो कुछ भी जावास्क्रिप्ट के साथ चला सकते हैं, वह अभी भी नोड के साथ या बिना आपके लिए उपलब्ध है।
रोब

@slebetman दुभाषिया का "अन्य" अर्थ क्या है? मुझे एहसास नहीं था कि वहाँ भी एक बहस थी! : एस
जे। अब्राहमसन

जवाबों:


44

यह कहना थोड़ा कठिन है क्योंकि ये शब्द अच्छी तरह से परिभाषित नहीं हैं। आम बोलचाल में, मुझे लगता है कि Node.js को एक ढांचा कहना थोड़ा सा असामान्य है, निश्चित रूप से, लेकिन मेरे पास एक कठिन समय होगा क्योंकि यह वास्तव में ऐसा नहीं है।

यह सब पासा जाता है, और मैं अक्सर भाषा के बहुत खराब उपयोग देखता हूं, इसलिए मैं स्पष्ट और नीचे से शुरू करूंगा


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

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

अब, चलो निष्पादन शब्दार्थ में थोड़ा खुदाई करते हैं। आम तौर पर, निष्पादन शब्दार्थ में भाषा पाठ को पढ़ने और एक अमूर्त मशीन के विवरण पर पहुंचने या अवलोकन साइड इफेक्ट्स का वर्णन शामिल होता है । मैं जो सुझाव देना चाहता हूं, वह यह है कि इन दोनों को मशीन के संचालन के लिए या निम्न प्रभाव दिखाने के लिए किसी प्रकार की "निम्न-स्तरीय एपीआई" होने की आवश्यकता है। इन्हें आमतौर पर रनटाइम पर्यावरण का हिस्सा माना जाता है

  • क्रम पर्यावरण या क्रम ग्रहण पुरातन का एक सेट है कि भाषा सम्मेलन को संचालित करने के अस्तित्व के लिए की आवश्यकता है। जहाँ तक भाषा जाती है, उनके व्यवहार के बारे में कुछ धारणा हो सकती है, लेकिन वे अप्राप्य हैं। ऊपर दुभाषिया की कल्पना में, "अंदर आदमी" सिर्फ रनटाइम के स्विच को फ्लिक करता है --- वह व्यक्तिगत रूप से निरीक्षण नहीं कर सकता कि वे क्या कर रहे हैं।

रनटाइम शब्द का आमतौर पर दुरुपयोग किया जाता है, जिसका अर्थ है कि खुद को मानने वाले प्राइमेटिव्स का सेट और उनमें से एक वास्तविक तात्कालिकता।


तो, अब हम कुछ बालों के लिए मिलता है। एक भाषा सम्मेलनों का एक समूह है जो अपने निष्पादन शब्दार्थों को अर्थ प्रदान करने के लिए एक रनटाइम के अस्तित्व को मानता है। यह कभी भी "जांच नहीं करता है" क्योंकि वे दायरे से बाहर हैं।

वास्तव में एक भाषा का उपयोग करने के लिए आप एक रनर कार्यान्वयन के साथ एक कंपाइलर या दुभाषिया जैसा कुछ चाहते हैं। संकलक / दुभाषिया और यह रनटाइम वास्तव में आपके कोड को निष्पादित करने में हाथ से जाता है ।

  • Chrome का V8 , जिसे अक्सर एक इंजन कहा जाता है , एक पैकेज डील है जिसमें ECMA मानक जावास्क्रिप्ट सम्मेलनों द्वारा मांग की गई रनटाइम इंटरफ़ेस के साथ एक दुभाषिया, कंपाइलर, रनटाइम कार्यान्वयन संगत है।

तो Node.js इस में कहाँ फिट होता है?

हमें इसे भागों में तोड़ना होगा:

  1. Node.js जावास्क्रिप्ट भाषा का विस्तार करता है जो रनटाइम एनवायरनमेंट प्राइमेटिव का एक बड़ा सेट प्रदान करता है - जो ECMA के मानकों के दायरे से बाहर हैं। इनमें फ़ाइल I / O जैसी चीजें शामिल हैं । इसका मतलब है कि Node.js भाषा को बदलता है और कुछ मायने में एक नई भाषा है: "Node.js जावास्क्रिप्ट"
  2. Node.js, एक पैकेज के रूप में, एक दुभाषिया और एक संकलक होता है। यह सिर्फ V8 से चोरी करता है।
  3. Node.js Node.js रनटाइम वातावरण का कार्यान्वयन प्रदान करता है जो "Node.js जावास्क्रिप्ट" को निष्पादित करने की अनुमति देता है।
  4. Node.js नई प्राथमिकताओं के साथ निर्मित मानक पुस्तकालयों का एक सेट प्रदान करता है जो उन्हें "Node.js जावास्क्रिप्ट" के अंतिम उपयोगकर्ताओं के लिए अधिक सुलभ बनाता है।

तो Node.js बहुत सी चीजें हैं!

लेकिन क्या यह एक ढांचा है?


यह वह जगह है जहाँ शब्दावली पूरी तरह से अलग हो जाती है - किसी के पास वास्तव में एक अच्छी, सुसंगत, सार्थक परिभाषा नहीं है कि वास्तव में एक रूपरेखा क्या है।

इस बात पर बहस होती है कि हंगामा: "एक पुस्तकालय बनाम एक ढांचा क्या है" और वे असंतोषजनक चीजों पर समाप्त होते हैं जैसे "एक पुस्तकालय कुछ है जिसे आप कहते हैं और एक ढांचा ऐसा है जो आपको बुलाता है"। मैं वास्तव में इस तरह की एक दुखद व्याख्या को दिन की रोशनी नहीं देना चाहता हूं - लेकिन जावास्क्रिप्ट, और विशेष रूप से जावास्क्रिप्ट, एनडीएस। जावास्क्रिप्ट इस परिभाषा के लिए एक बहुत बड़ा झटका है क्योंकि पूरी कॉलबैक-पासिंग तकनीक का मतलब है कि आप लगातार कॉलिंग के बीच स्विच कर रहे हैं और कहा जा रहा है।

मेरी व्यक्तिगत राय में, यहाँ कुछ महत्वपूर्ण है। मैं एक उज्ज्वल रेखा नहीं खींचना चाहता, लेकिन मैं केवल इतना कहूंगा

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

यह सुनिश्चित करने के लिए एक हाथ-लहरदार रेखा है, लेकिन मैं रूपरेखाओं के बारे में एक बहुत दिलचस्प बिंदु निकालना चाहता हूं:

फ्रेमवर्क कोड की व्याख्या करने के तरीके का एक सेट प्रदान करता है; इसलिए वे अपने आप में एक भाषा हैं।

यह कुछ ऐसा हो सकता है, जिसके बारे में लोग बहस करना चाहते हैं, लेकिन अगर आपने मेरी पूर्व परिभाषा खरीदी है कि एक भाषा सिर्फ सम्मेलनों का एक सेट है, जो जीवन को एक खंड के रूप में देती है, तो जब भी आप सम्मेलनों की एक नई परत बनाते हैं ' एक नई भाषा बनाई है शायद रूपरेखा के साथ कच्चे माल कच्चे पाठ फ़ाइलों के बजाय उनकी मेजबान भाषा की शब्दार्थ व्याख्याएं हैं, लेकिन विचार एक ही है!


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

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

मुझे यह सुझाव देते हुए खुशी हो रही है कि Node.js का डोमेन छोटा और तंग है और इस प्रकार इसमें जो कन्वेंशन जोड़े जाते हैं, वे कारण के बारे में सरल और सही बनाने में अपेक्षाकृत आसान हैं। ओटोह, रूबी ऑन रेल्स "व्यापार वेब अनुप्रयोगों" के एक जटिल, खराब परिभाषित डोमेन में रहता है, जिसका अर्थ है कि यह जो कन्वेंशन देता है वह निश्चित रूप से फजी और टूटा हुआ है।


लेकिन यह सब कहने का एक लंबा तरीका है, हाँ, नियोक्ताओं को शायद यह पता नहीं है कि जब वे कहते हैं तो उनका क्या मतलब है। मैं अनुमान लगा रहा हूं कि "रनटाइम" या "इंजन" की तुलना में "फ्रेमवर्क" सिर्फ एक बेहतर, अधिक ग्रैकेबल शब्द लगता है।


हे, उल्लेखनीय रूप से संतुलित! इसलिए probably have no idea: 'फ्रेमवर्क' एक ऐसा शब्द है, जिसे आप प्रोग्रामर होने के बिना समझ सकते हैं, एक उपयोगी फीचर, अगर इसके लिए बख्शा जाए तो वास्तव में फर्क पड़ेगा।
n611x007

"Node.js भाषा के विस्तार के तरीके में कच्चे जावास्क्रिप्ट में कार्यक्षमता जोड़ता है।" सच नहीं है, यह कार्यक्षमता का विस्तार कर रहा है और भाषा का नहीं, यह उस तरह से बदलाव नहीं करता है जैसे आपको कोड लिखने की आवश्यकता होती है जैसे कई रूपरेखाओं की आवश्यकता होती है। इसमें अन्य कार्य या वस्तुएं शामिल हैं जैसे कि एक सम्मिलित पुस्तकालय जोड़ सकता है। आप इसे कॉल कर सकते हैं या किसी नए फ़ंक्शन या ऑब्जेक्ट की तरह उपयोग कर सकते हैं। प्रोग्रामिंग की शैली में बदलाव नहीं होता है, भाषा की मूल बातें समान होती हैं और केवल कुछ कार्यक्षमता जोड़ते हैं। तो यह एक ढांचा या भाषा का विस्तार नहीं है, जोड़ा डिफ़ॉल्ट प्लेटफॉर्म पुस्तकालयों और इस प्रकार कार्यक्षमता के साथ जावास्क्रिप्ट।
कोडबीट

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

20

Node.js® क्रोम के V8 जावास्क्रिप्ट इंजन पर निर्मित एक जावास्क्रिप्ट रनटाइम है

स्रोत

नोड एक रनटाइम या पर्यावरण है। यह कोई ढांचा नहीं है। लोग (मुझे लगता है) अक्सर यह गलत हो जाता है क्योंकि फ्रेम जैसे एक्सप्रेस नोड के साथ सर्वव्यापी हैं।

रूटिंग्स बनाम फ्रेमवर्क पर अधिक पढ़ना यदि आप रुचि रखते हैं।


inb4 "लेकिन पृष्ठ के बारे में कहता है 'एक अतुल्यकालिक घटना संचालित फ्रेमवर्क के रूप में" "मुझे पता है।
रेलेमन

3
एम्बेडेड v8 रनटाइम नहीं है? ;-)
जोहान्स

@johannes मैं इस पर आपसे सहमत होना चाह रहा हूँ। V8 रनटाइम और नोड बस डेवलपर (http सर्वर, उपयोग, आदि) के लिए उपलब्ध उपकरणों का विस्तार करता है इस प्रकार मुझे लगता है कि फ्रेमवर्क लेबल काम करता है। फिर भी, यह एक संशोधित v8 वातावरण है; नोड कुछ ऐसा नहीं है जिसे आप अपने प्रोजेक्ट में सिर्फ "शामिल" करते हैं। मुझे लगता है कि यह सब परिप्रेक्ष्य की बात है।
निक

@ क्रॉल, पार्ट फ्रेम को हटा दिया गया है।
ईब्रम खलील
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.