जावास्क्रिप्ट का उपयोग शास्त्रीय अनुप्रयोग विकास (संकलित सॉफ़्टवेयर) के लिए क्यों नहीं किया जाता है? [बन्द है]


14

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

यह सुविधाओं का एक समृद्ध सेट प्रदान करता है, जैसे:

  • गतिशील टाइपिंग
  • प्रथम श्रेणी के कार्य
  • निहित कार्य
  • बंद
  • विधियों के रूप में कार्य
  • ऑब्जेक्ट कंस्ट्रक्टर के रूप में कार्य
  • प्रोटोटाइप आधारित
  • वस्तु-आधारित (लगभग सब कुछ एक वस्तु है)
  • regex
  • सरणी और वस्तु शाब्दिक

यह मुझे लगता है कि इस तरह की भाषा के साथ लगभग सब कुछ हासिल किया जा सकता है, आप ओओ प्रोग्रामिंग का अनुकरण भी कर सकते हैं, क्योंकि यह महान स्वतंत्रता और कई अलग-अलग कोडिंग शैली प्रदान करता है।

अधिक सॉफ्टवेयर-उन्मुख कस्टम फ़ंक्शंस के साथ (I / O, FileSystem, इनपुट डिवाइस, आदि) मुझे लगता है कि इसके साथ एप्लिकेशन विकसित करना बहुत अच्छा होगा।

हालाँकि, जहाँ तक मुझे पता है, इसका इस्तेमाल केवल वेब डेवलपमेंट में या मौजूदा सॉफ्टवेयर्स में केवल स्क्रिप्टिंग भाषा के रूप में किया जाता है।

केवल हाल ही में, शायद V8 इंजन के लिए धन्यवाद, इसका उपयोग अन्य प्रकार के कार्यों के लिए अधिक किया गया है (उदाहरण के लिए नोड.जेएस देखें)।

अब तक इसे केवल वेब विकास के लिए ही क्यों बदला गया? क्या यह सॉफ्टवेयर विकास से दूर रख रहा है?


8
अगर वेब डेवलपमेंट सॉफ्टवेयर डेवलपमेंट का (कोई विशेष मामला) नहीं है, तो यह वास्तव में क्या है? ...
Péter Török

@ Péter Török: मुझे लगता है कि आपको बात मिल जाएगी। मेरा अभिप्राय यह है कि अब तक इसे केवल सॉफ्टवेयर्स द्वारा स्क्रिप्टिंग भाषा के रूप में इस्तेमाल किया गया है, ताकि सुविधाओं को बढ़ाया जा सके। यह वास्तव में ओएस के लिए एक सॉफ्टवेयर एप्लिकेशन को प्रोग्राम करने के लिए उपयोग नहीं किया गया है।
जोस फेटी

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

2
आपका मतलब है "शास्त्रीय अनुप्रयोग विकास", "सॉफ्टवेयर विकास" नहीं, सही? अपने अनुसार बेहतर तरीके से अपनी हेडिंग बदलें।
Doc Brown

2
रिकॉर्ड विंडो 8 के लिए @JoseFaet आपको HTML5 और JS में कुछ विकास करने की अनुमति देता है
Raynos

जवाबों:


14

हाल ही में node.js ने सर्वर-साइड विकास को आगे लाया है। इसलिए, अब विकास के लिए जावास्क्रिप्ट लिखना संभव है।

यह सच है। इतिहास में, इसका उपयोग एक विकास भाषा के रूप में नहीं किया गया है। लेकिन, हे, क्लाइंट वातावरण में स्क्रिप्टिंग (उपयोगकर्ता एजेंट) भी एक प्रकार का विकास है। है ना?

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


ऐसा होना चाहिए, और मुझे ऐसा लग रहा है कि वास्तव में अब कुछ चल रहा है :)
जोस फ़ेट्टी

15

से यहाँ :

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

a) मैजिक 'this ’। यह यह है, सिवाय इसके कि जब यह है। जावास्क्रिप्ट आपको सभी जगहों पर अनाम कार्यों का उपयोग करने के लिए धक्का देती है, सिवाय इसके कि वे हमेशा 'इस' चर के लिए उचित संदर्भ खो देते हैं, इसलिए आप अंत में जगह पर "var _this = this" जैसे नासमझ कोड रखते हैं और फिर उसका उपयोग करते हैं आपके कॉलबैक या अन्य कार्यों के अंदर। कुछ दिन मैं यह शपथ लेता हूं कि मैं जिन कार्यों को लिखने का प्रबंधन करता हूं, वे नाम का उपयोग नहीं करते हैं, यह वास्तव में उस संख्या से छोटा होता है जो करते हैं।

b) 1 + "1" - 1 = 10. इसके अलावा, "1" + 0 = "10"। हां, इससे वास्तव में हमारे अनुप्रयोगों के लिए बग पैदा हो गए हैं, जहां एक संख्या के होने की उम्मीद करने वाला डेटा एक अन्य एप्लिकेशन में बग के कारण स्ट्रिंग के रूप में JSON फ़ाइल से लोड किया गया था, और परिणाम अच्छा नहीं था। हमारे सभी लोडिंग कोड को एक स्थान पर सभी प्रकार के रूपांतरणों को जोड़ने के लिए अपडेट किया जाना था। जब मुझे एक नंबर की आवश्यकता होती है, तो मैं वास्तव में पूरी तरह से पागल हो जाना चाहता हूं कि यह एक नंबर होना चाहिए, न कि एक स्ट्रिंग या एक वस्तु या अशक्त या कुछ और। लुआ, जो कि ज्यादातर मामलों में जावास्क्रिप्ट के समान है, ने इस समस्या को ठीक कर दिया है कि इसके अलावा और स्ट्रिंग संयोजन के लिए एक ही ऑपरेटर का उपयोग करने के लिए पर्याप्त मंद नहीं है।

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

d) कक्षाओं के बजाय प्रोटोटाइप। अस्तित्व में बहुत कम बड़े पैमाने पर वास्तविक विश्व जावास्क्रिप्ट अनुप्रयोग हैं जो बड़े अनुप्रयोग आर्किटेक्चर में प्रोटोटाइप की अंतर्निहित बेकारता के आसपास काम करने के लिए अपने स्वयं के वर्ग प्रणाली में प्लग नहीं करते हैं। उन्हीं ऐप्स को जावास्क्रिप्ट प्रकारों का विस्तार करने के लिए प्रोटोटाइप का कम से कम उपयोग किया जाता है, और केवल इसलिए कि जेएस को इतनी खराब तरीके से डिज़ाइन किया गया था कि यहां तक ​​कि दो दिलचस्प निर्मित प्रकार जो इसके साथ आते हैं, उनमें उन आधी विशेषताओं का अभाव है जिनकी आप उनसे अपेक्षा करते हैं।

ई) पास-दर-मूल्य प्रकार बनाने में असमर्थता। यह वास्तव में C ++ / D से अलग हर भाषा के बारे में एक वास्तविक समस्या है। वेबलॉग एप्लिकेशन लिखने के लिए जावास्क्रिप्ट का उपयोग करने वालों के लिए, जावास्क्रिप्ट के लिए सभी रैखिक बीजगणित पुस्तकालयों पर एक नज़र डालें। 3D एप्लिकेशन में, आप लगभग स्केलर का उपयोग करने की तुलना में अधिक बार वैक्टर का उपयोग करते हैं। कल्पना करें कि क्या आपके ऐप का प्रत्येक पूर्णांक संदर्भ द्वारा पारित किया गया था, ताकि "a = 1; b = a; b ++" दोनों एक और b दोनों के बराबर बने। प्रत्येक तीन छोटे घटक वेक्टर पूर्ण पूर्ण वस्तु है। वे संदर्भ द्वारा पारित किए जाते हैं (हमारे WebGL गेम में अब तक, वास्तव में लगभग आधे कीड़े का स्रोत)। वे बड़ी मात्रा में मौजूद हैं, ढेर-आवंटित हैं, और कचरा-एकत्र किया जाता है, जो जीसी पर एक तीव्र मात्रा में दबाव डालता है जो कि सरल वेबगेल गेम में भी जीसी ठहराव का परिणाम दे सकता है, और जब तक डेवलपर सभी स्थानों पर नए वैक्टर बनाने से बचने के लिए हास्यास्पद रूप से जटिल हुप्स से नहीं कूदता है, जहां नए वैक्टर बनाने के लिए तर्कसंगत है। आपके पास ऑपरेटर ओवरलोडिंग नहीं हो सकता है, इसलिए आपके पास बुनियादी संचालन करने के लिए बहुत बड़े और बदसूरत अभिव्यक्ति हैं। व्यक्तिगत घटकों तक पहुँच धीमी है। ऑब्जेक्ट्स को मूल रूप से पैक नहीं किया जाता है और इसलिए वे वर्टेक्स बफर में पुश करने के लिए अविश्वसनीय रूप से धीमा होते हैं, जब तक कि आप उन्हें फ्लोट 32 एरे इंस्टेंस के रूप में लागू नहीं करते हैं, जो वर्तमान में वी 8 और स्पाइडरमोंकी दोनों के ऑप्टिमाइज़र्स से बकवास को भ्रमित करता है। क्या मैंने उल्लेख किया कि वे संदर्भ से गुज़रे हैं? व्यक्तिगत घटकों तक पहुँच धीमी है। ऑब्जेक्ट्स को मूल रूप से पैक नहीं किया जाता है और इसलिए वे वर्टेक्स बफर में पुश करने के लिए अविश्वसनीय रूप से धीमा होते हैं, जब तक कि आप उन्हें फ्लोट 32 एरे इंस्टेंस के रूप में लागू नहीं करते हैं, जो वर्तमान में वी 8 और स्पाइडरमोंकी दोनों के ऑप्टिमाइज़र्स से बकवास को भ्रमित करता है। क्या मैंने उल्लेख किया कि वे संदर्भ से गुज़रे हैं? व्यक्तिगत घटकों तक पहुँच धीमी है। ऑब्जेक्ट्स को मूल रूप से पैक नहीं किया जाता है और इसलिए वे वर्टेक्स बफर में पुश करने के लिए अविश्वसनीय रूप से धीमा होते हैं, जब तक कि आप उन्हें फ्लोट 32 एरे इंस्टेंस के रूप में लागू नहीं करते हैं, जो वर्तमान में वी 8 और स्पाइडरमोंकी दोनों के ऑप्टिमाइज़र्स से बकवास को भ्रमित करता है। क्या मैंने उल्लेख किया कि वे संदर्भ से गुज़रे हैं?

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

छ) गतिशील टाइपिंग। हां, मैं वह तर्क शुरू करने को तैयार हूं। आप इसे सबसे अधिक नोटिस करना शुरू कर देते हैं दूसरा आप छोटे वेब ऐप या वेब पेज लिखना बंद कर देते हैं और बड़े ऐप लिखना शुरू कर देते हैं जहां आपके पास वास्तव में डेटा होता है जो एक माउस क्लिक या रिक्वेस्ट / रिस्पॉन्स साइकल से अधिक समय तक बना रहता है: गलत प्रकार की ऑब्जेक्ट को एक में जोड़ें सरणी को बाद में संसाधित करना और एक लापता विधि से बाद में एक दुर्घटना प्राप्त करना या वास्तविक गलती थी जहां की तुलना में पूरी तरह से अलग कोड में सदस्य। मनोरंजन समय। हां, जावा स्थैतिक टाइपिंग को बुरा लगता है। नहीं, Java / C # / C ++ स्थिर टाइपिंग करने का एकमात्र और एकमात्र तरीका नहीं है। सभी बग के बिना डायनेमिक टाइपिंग के फायदों के प्रकार, इनफैक्शन इंटरफ़ेस बाइंडिंग, इत्यादि आपको "सभी से निपटने के लिए आसान और बहुत सारे कीस्ट्रोक्स से नहीं" लाभ देते हैं। दूसरी सबसे लोकप्रिय वेब भाषा - एक्शनस्क्रिप्ट 3 - वास्तव में जेएस / ईसीएमएस्क्रिप्ट के समान होने के बावजूद, सांख्यिकीय रूप से टाइप की गई है। एक तरफ के रूप में, मैं अपने फेडोरा डेस्कटॉप पर पायथन ऐप्स से अधिक क्रैश प्राप्त करता हूं, जैसा कि मैं सी / सी ++ ऐप से करता हूं (वास्तव में, मेरे डेस्कटॉप क्रैश पर सी / सी ++ ऐप में से कोई भी नहीं है, अब मैं इसके बारे में सोचता हूं)। अनुपलब्ध सदस्य अपवाद == एप्लिकेशन विकसित करने और बनाए रखने के लिए इतना आसान है, है ना?

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

i) कोई IntelliSense भी संभव नहीं है। यह देखना चाहते हैं कि आपके पाठ संपादक में foo.js की लाइन 187 पर आपको वहां पर कौन-सी विधियाँ मौजूद हैं? बहुत बुरा। कोड के माध्यम से ट्रेस करें जब तक आप यह पता नहीं लगाते हैं कि यह कहां से आरंभ किया गया था, तब कोड के माध्यम से ट्रेस करें ताकि यह पता चल सके कि इसका प्रोटोटाइप इस पर क्या है। और फिर उम्मीद है कि आपकी पीठ के पीछे प्रोटोटाइप को बदलते हुए कोई कोड नहीं है। वास्तव में, बस इसे एक ब्राउज़र में चलाएं और ब्रेकप्वाइंट सेट करें, क्योंकि मूल्य के बारे में किसी भी तरह से उपयोगी कुछ भी पता लगाना मूल रूप से Toy_web_app.html साइटों की तुलना में किसी भी कोडबेस के लिए असंभव है जो जावास्क्रिप्ट एपोलॉजिस्ट जावास्क्रिप्ट की सहजता और सरलता को महिमा देने के लिए उपयोग करते हैं। कुछ कोड संपादक बेहतर करने के लिए वास्तव में कठिन प्रयास करते हैं, और वास्तव में सरल मामलों के लिए लगभग थोड़े थोड़े सफल होते हैं, कभी-कभी, एक बार।

j) कोई फायदा नहीं हुआ। अन्य गतिशील भाषा की तुलना में जावास्क्रिप्ट भी विशेष नहीं है। यह सब कुछ दिलचस्प करने में सक्षम नहीं है, जो लुआ, पायथन, रूबी, आदि द्वारा भी नहीं किया जा सकता है। जेएस कार्यान्वयन में से कोई भी LuaJIT या PyPy या अन्य गतिशील की JIT-ing कार्यान्वयन से तेज नहीं है भाषाओं। अन्य सामान्य रूप से उपलब्ध भाषाओं की तुलना में JS का कोई प्लस पक्ष नहीं है। ओह, सिवाय यह एक प्लगइन के बिना वेब ब्राउज़र में मूल रूप से चलता है। जो दुनिया में एकमात्र कारण है कि यह इतना लोकप्रिय क्यों है। वास्तव में, यह एकमात्र कारण है कि यह घटना मौजूद है। अगर 10 साल पहले किसी ने सोचा था, "बिल्ली, चलो एक अच्छी तरह से डिज़ाइन की गई और अच्छी तरह से स्थापित भाषा को अपने ब्राउज़र में छोड़ दें और दूसरे लोगों को ऐसा करने के बजाय सभी को इस नासमझ छोटे हैकजॉब का उपयोग करने दें, जो नेटस्केप के साथ आया था। , "वेब आज बहुत अलग (बेहतर) दिखेगा। यदि क्रोम एक समर्थित भाषा के रूप में क्रोम में क्रोम को गिरा देता है, तो बस भविष्य की कल्पना करें। या वास्तव में, यह कल्पना करें: Google एक समर्थित भाषा (http://code.google.com/p/nativeclient/) के रूप में क्रोम में C / C ++ गिराता है।


यह एक बहुत ही रोचक पोस्ट है। मैं उनके उपयोग-मामलों को देखने के लिए उत्सुक हूँ जो उनके तर्कों की नींव बनाते हैं। मैं उनकी बातों से असहमत नहीं हूं, लेकिन मैं लगभग 10 वर्षों से कॉर्पोरेट आकार के जेएस एप्लिकेशन विकसित कर रहा हूं और उनमें से कुछ चीजों का अनुभव नहीं किया है (विशेष रूप से, "जादू इस" के बारे में उनका पहला बिंदु)। अपने स्वयं के अनुभव के आधार पर, इस पोस्ट में लोगों के जैसे जावास्क्रिप्ट के खिलाफ तर्क भारी पारंपरिक ऊप पृष्ठभूमि वाले लोगों द्वारा किए जाते हैं ... जिस स्थिति में, मैं उनकी उलझन को समझूंगा।
श्री जावास्क्रिप्ट

यह देखना काफी दिलचस्प है कि 2016 में, उत्तर अब भाषा के विकास से पूरी तरह से अप्रचलित है।
Stephan Bijzitter

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

12

क्यों?

जावास्क्रिप्ट सबसे गलत भाषा है

हम अंधेरे युग में थे और अभी भी सामान्य विकास समुदाय के लिए स्वीकार करते हैं कि जावास्क्रिप्ट एक शक्तिशाली और बहुमुखी भाषा है। यह मुख्य धारा नहीं है।

हाल ही की अग्रिम यह है कि नोड.जेएस की चर्चा हो गई है और लोग यह स्वीकार करना शुरू कर रहे हैं कि जावास्क्रिप्ट के अन्य संस्करण हैं।

मैं विंडोज़ 8 के लिए जेएस और एचटीएमएल 5 के विकास पर नज़र रख रहा हूं और .NET समुदाय की प्रतिक्रिया "प्रिय भगवान क्यों?"।

यह केवल तथ्य है कि अधिकांश गैर-वेब डेवलपर्स अभी भी जावास्क्रिप्ट को उस खिलौना भाषा के रूप में देखते हैं जिसका उपयोग आप अपने ब्राउज़र में मेनू पर स्क्रॉल करने के लिए करते हैं।

बेशक जावास्क्रिप्ट "आधुनिक विकास प्रथाओं" के साथ संरेखित नहीं करता है। मेरे लिए जावास्क्रिप्ट अभी भी एक हैकिंग भाषा है जिसे मैंने विम के साथ क्रैक किया है और इंटरनेट मेरा प्रलेखन है। कोई आईडीई नहीं है, कोई विकास उपकरण नहीं हैं, कोई ऑटो-पूर्ण या "इंटैलिजेंस" नहीं है, कोई क्लिक और ड्रैग GUI नहीं हैं।

जावा और .NET डेवलपर्स की दुनिया में वे अपने GUIs और IDEs के लिए wedded हैं और vim में प्रोग्राम करने में सक्षम नहीं होंगे।


1
मैं आपसे सहमत हूं कि "कोई आईडीई नहीं है, कोई विकास उपकरण नहीं हैं, कोई ऑटो-पूर्ण या" इंटेलीजेंस "नहीं है, कोई क्लिक और ड्रैग GUIs नहीं हैं।" वास्तव में आप यह सब प्राप्त कर सकते हैं कि कई विभिन्न आईडीई का उपयोग करके, मैं उदाहरण के लिए विज़ुअल स्टूडियो का उपयोग करता हूं और यह बस बहुत अच्छा है।
जोस फेटी

1
@JoseFaeti क्षमा करें, विजुअल स्टूडियो एक जावास्क्रिप्ट आईडीई नहीं है। मैं तेजी से vs2010 में तो हूँ। इसका मतलब है कि VS2010 एक टपका हुआ JS IDE है।
रेयनोस

2
@ रेयानोस, "मैं तेजी से फिर वीएस2010 में तेज हूं। इसका मतलब वीएस2010 एक लीक जेएस आईडीई है।" - या शायद इसका सीधा सा मतलब है कि आप वीएस के साथ-साथ विम को भी नहीं जानते हैं।
Péter Török

2
बिल्कुल नहीं, लेकिन Im सिल्वरलाइट में RIA फ्रंटेंड का निर्माण नहीं करने जा रहा, क्योंकि मुझे Resharper और LINQ, या ASP.Net MVC ऐप एक पतली jQuery परत के साथ पसंद है, क्योंकि फिर से इसकी .Net फ्रेंडली, जब समृद्ध क्लाइंट साइड हैंस्क्रिप्ट भाषाओं में हैं। जो नौकरी के लिए बेहतर अनुकूल हैं।
sa93

1
जावास्क्रिप्ट आईडीई कर रहे हैं कि बताते हुए बस लोगों की कोरस में मेरी आवाज को जोड़ने। यह स्पष्ट रूप से अन्यथा दावा करने के लिए मूर्खतापूर्ण है। आपको आईडीई पसंद नहीं हो सकता है और वे पूर्ण नहीं हो सकते हैं, लेकिन वे अभी भी आईडीई हैं। या मैं JS के साथ काम करते समय VS के अंतर्मुखी और कोड को पूरा करने की कल्पना कर रहा हूं?
इयान न्यूजन

10

आपकी सूची में सिस्टम में फाइल लिखने के बारे में कुछ भी नहीं है, जो सॉफ्टवेयर विकास का एक बड़ा हिस्सा है।

लोग जेएस को एक एप्लिकेशन बनाने के लिए उपयोग करने के बारे में नहीं सोचेंगे क्योंकि यह वेब के लिए वास्तविक स्क्रिप्टिंग भाषा है, और आप हमेशा नौकरी के लिए सही उपकरण का उपयोग करेंगे।

जब यह जावा / .NET / C / C ++ में एक तुच्छ ऑपरेशन है, तो फ़ाइल लिखने के लिए JS की एकड़ जमीन क्यों लिखें?

उस के साथ, जैसा कि दूसरों ने उल्लेख किया है, नोड.जेएस और उसके पुस्तकालयों ने सर्वर साइड ऑपरेशन को तुच्छ बना दिया है और नोड के साथ। लोकप्रिय हो रहे हैं, यह सीखना एक सीवी के लिए एक कौशल बन जाएगा, क्योंकि आप बनाए रखने / बढ़ाने / बनाने में सक्षम होंगे। इसके साथ आवेदन।


1
+1 पूरी तरह से भूल गया कि कैसे एक stdio पुस्तकालय महत्वपूर्ण है।
रेयनोस

1
फाइलसिस्टम के लिए जैसा कि आप कहते हैं कि हमारे पास अभी स्थानीय भंडारण एपीआई हैं, हालांकि आप गंभीर स्थायित्व के लिए उन पर भरोसा नहीं करेंगे। हालाँकि, फाइल सिस्टम के लिए लेखन को प्रत्यक्ष होने की आवश्यकता नहीं है, आपकी जावास्क्रिप्ट को एक सर्वर पर आराम से कॉल किया जा सकता है जो (LOLCode या C या JS स्वयं में लिखा है) जो किसी प्रकार के स्टोरेज को लिखता है।
sa93

1
सर्वर की तरफ। NodeJS फ़ाइल API, C आदि के रूप में केवल एक तुच्छ है ... <- यदि आपका IO सही ढंग से C (गैर अवरुद्ध) में कर रहा है। साथ ही किसी भी एनी रैपर के साथ एक अजाक्स कॉल 2-3 लाइनें हो सकती हैं। MyLib.Ajax.post ('/ दृढ़ता / कुछ', {डेटा: blahObj})
sa93

@ sa93 कृपया जावास्क्रिप्ट के साथ ब्राउज़र होस्ट वातावरण को भ्रमित न करें। लोकलस्टोरेज ब्राउज़र में एक होस्ट एपीआई है। यह ईएस 5 विनिर्देश में परिभाषित नहीं है।
रेयनोस

1
@reinierpost Writing files to the file system has been replaced with HTTP POST.नहीं अगर आप उन एपीआई को लिख रहे हैं जो पदों को संभाल रहे हैं।
स्टुपेरयूजर

5

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

मैं इसे जावास्क्रिप्ट को भंग करने के लिए नहीं कह रहा हूं। मुझे वेब के विकास के दौरान JS के साथ काम करने में काफी मजा आता है। लेकिन इसे निष्पक्ष रूप से देखें, तो अन्य भाषाओं की तुलना में JS में कई कमियां हैं:

  • असंख्य अक्षम्य दोष। जेएस को शुरू में विकसित करते समय कई गलतियां की गईं। यहां उन्हें किसी तरह की गणना करने की आवश्यकता नहीं है, वे अच्छी तरह से प्रलेखित हैं। सभी भाषाओं में प्रारंभिक डिजाइन में गलतियां हैं जो बाद में तय की गई हैं। जेएस के साथ अंतर यह है कि भाषा को विकसित किया गया था और जल्दी से जारी किया गया था और इन गलतियों को ब्राउज़रों में बैकवर्ड संगतता की आवश्यकता के कारण कभी भी तय नहीं किया जा सकता है।
  • सुधार और नई सुविधाओं को पेश करने के लिए अत्यधिक धीमी प्रक्रिया। चूंकि सभी ब्राउज़र विक्रेताओं को सहमत होना पड़ता है और यहां तक ​​कि विभिन्न राजनीतिक कारणों से भाषा के विकास को धीमा करना चाहते हैं। सी # देखें जो वास्तव में जेएस की तुलना में एक नई भाषा है। जब C # पेश किया गया था, तो यह उदा नहीं था। जेएस की तरह क्लोजर या उच्चतर आदेश कार्य करता है, लेकिन कई पुनरावृत्तियों के बाद अब इसमें वह सब है और इसके अलावा Linq और async वाक्यविन्यास जैसी विशेषताएं हैं जो जावास्क्रिप्ट डेवलपर्स केवल ईर्ष्या कर सकते हैं।
  • मानक पुस्तकालय प्रभावित। पायथन, रूबी या जावा या .net पर आधारित कुछ भी आधुनिक भाषाओं में लगभग किसी भी चीज के लिए व्यापक मानक पुस्तकालय हैं जिनकी आपको आवश्यकता हो सकती है। जेएस में आप 3 पार्टी पुस्तकालयों के बिना एक फ़ाइल भी नहीं पढ़ सकते हैं। आप रेगेक्स का उल्लेख करते हैं, लेकिन सभी आधुनिक भाषाओं में वह और एक हजार चीजें अधिक हैं।
  • अन्य भाषाओं ने कुछ जावास्क्रिप्ट लाभ के साथ पकड़ा है। दस साल पहले जावा की तरह क्लूनी स्थिर भाषाओं की तुलना में क्लोजर और प्रथम श्रेणी के फ़ंक्शन शक्तिशाली थे, लेकिन गतिशील और कार्यात्मक भाषाओं में लंबे समय से ये विशेषताएं हैं, और यहां तक ​​कि जावा, एक सुंदर रूढ़िवादी भाषा, ने इसे जावा 8 में जोड़ा है।

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

यदि आपके पास एक और आधुनिक भाषा चुनने का विकल्प है, तो जावास्क्रिप्ट चुनने का कोई कारण नहीं है। केवल कारण यह होगा कि यह एकमात्र ऐसी भाषा है जिसे आप जानते हैं।

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