क्या गतिशील टाइप की गई भाषाएं सभी आलोचनाओं के लायक हैं? [बन्द है]


35

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

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

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

हालाँकि, उद्यमों में डायनेमिक टाइपिंग के खिलाफ एक कड़ी आलोचना प्रतीत होती है, लेकिन मुझे वास्तव में ऐसा नहीं लगता कि यह इतना मजबूत क्यों है ।

वास्तव में, उद्यमों में गतिशील टाइपिंग के खिलाफ इतनी आलोचना क्यों है? क्या यह वास्तव में परियोजनाओं की लागत को बहुत प्रभावित करता है, या क्या? लेकिन शायद मैं गलत हूं।


3
मुझे लगता है कि टाइप इंफ़ेक्शन और संभव डक टाइपिंग के साथ स्थिर टाइपिंग चीजों को करने का सबसे अच्छा संभव तरीका है। यह भी बहुत जटिल है
केसबश

2
मुझे सिर्फ C # के duck टाइपिंग पर एक नज़र पड़ी (मैं भाषा का उपयोग नहीं करता), और जबकि यह duck टाइपिंग की परिभाषा को पूर्ण करने के लिए लगता है, आवश्यक क्रिया को उद्देश्य को हराने के लिए लगता है। यह कहने के लिए नहीं है कि यह कभी-कभी उपयोगी नहीं है।
चिन्मय कांची

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

2
@ChinmayKanchi: शब्दशः? आप बस कुछ घोषित करते हैं dynamicऔर इसका उपयोग करना शुरू करते हैं। यह सामान्य विधि कॉल या ऑपरेटर अधिभार से अधिक क्रिया नहीं है।
जोए

4
मैं अपनी वर्तमान कंपनी में ग्रूव्स कोड पर ग्रूवी की डिबगिंग त्रुटियों पर बर्बाद किए गए घंटों की संख्या की गणना नहीं कर सकता, जिसे कंपाइलर ने तुरंत पता लगाया होगा कि हमने जावा का उपयोग किया था।
WKS

जवाबों:


46

हां, मेरा मानना ​​है कि वे करते हैं।

कुछ कारणों से एक नई परियोजना के लिए भाषा के चयन पर विचार करने की आवश्यकता है:

  • रन-टाइम स्पीड। C / C ++ / फोरट्रान की तुलना में, पर्ल और पायथन बहुत धीमी हैं।
  • प्रारंभिक गति। उपरोक्त तेज भाषाओं की तुलना में, जावा गिरता है और रोता है क्योंकि जेवीएम लोड होता है और लोड होता रहता है और while(1)...।
  • प्रोटोटाइप-क्षमता। C ++ या Java के लिए आवश्यक घोषणा / परिभाषा कार्य के माध्यम से जाने या बाहर जाने से LOC बढ़ जाती है, जो एकमात्र ज्ञात मीट्रिक है जो मज़बूती से Bugcounts के साथ संबद्ध है। इसमें भी काफी समय लगता है। यह भी प्रकार और कनेक्शन के बारे में थोड़ा और सोच की आवश्यकता है।
  • आंतरिक फिजिबिलिटी। जब तक आप अपने आत्म-संशोधित कोड को डीबग करना शुरू नहीं करते हैं, तब तक अपने इंटर्न के साथ आस-पास गड़बड़ करना महान है । (पायथन, लिस्प, पर्ल)
  • सही सत्यापन। एक कंपाइलर C ++ में आपके कोड की अर्ध-शुद्धता का एक त्वरित ओवर-पास प्रदान कर सकता है, और यह वास्तव में अच्छा हो सकता है ।
  • स्थैतिक विश्लेषण विवरण। सी और जावा में बहुत अच्छा स्थैतिक विश्लेषण है। एक सैद्धांतिक स्तर पर पर्ल पूरी तरह से सांख्यिकीय रूप से विश्लेषण योग्य नहीं है (संभवतः पायथन भी)। मुझे पूरा यकीन है कि लिस्प या तो नहीं है।
  • अजीब प्लेटफ़ॉर्म केवल C, सामान्य रूप से लेते हैं।
  • समर्थन श्रृंखला। यदि आपके पास एक अनुबंध हो सकता है कि आप अपने कीड़े को देखेंगे और काम करेंगे, तो यह बहुत बड़ा है

आप अनुमान कर सकते हैं कि संगठन आप के साथ काम कर रहे हैं "आगे जा" के एक सिद्धांत है (इस के लिए एक लेखांकन अवधि नहीं है), और नहीं होगा सिर्फ बेतरतीब ढंग से सॉफ्टवेयर पर काम नहीं करने का फैसला, तो आप के लिए एक बेहतर मामला है सॉफ्टवेयर का उपयोग कर। वहाँ के बाद से कोई मेजर व्यापार बेच (इसे बनाए रखने की जिम्मेदारी लेने के निहितार्थ को ले जाने) पायथन / पर्ल / $ dynamic_language, यह काफी जोखिम कम करता है।

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

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


16
"यह मुफ़्त है, आप इस पर काम करते हैं!" <- सामान्य रूप से एफ / ओएसएस के साथ सबसे बड़ी समस्या, मैं +1 हूं लेकिन मैं वोटों से बाहर हूं :(
बिली ओपल

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

4
किसी भी बड़े ओपन-सोर्स प्रोजेक्ट के लिए आपको कमर्शियल सपोर्ट मिल सकता है। बड़ी कंपनियां गतिशील रूप से टाइप किए गए PL का उपयोग बड़े भागों (निश्चित रूप से उपयुक्त) के लिए करती हैं, फेसबुक PHP (UI) और एर्लैंग (चैट) का उपयोग करता है, ट्विटर रूबी (UI) का उपयोग करता है, Google पायथन का उपयोग करता है (मुझे नहीं पता कि क्या है) और लिस्प और पायथन हैं कई परिष्कृत अनुसंधान परियोजनाओं में उपयोग किया जा रहा है। नोट: मैं एक C # डेवलपर हूं (लगभग) ने कभी भी एक गतिशील रूप से टाइप की गई भाषा का उपयोग नहीं किया है; फिर भी ये बिंदु काफी विस्तार के लिए मान्य नहीं हैं।
केव शाहबाजियन

4
मुझे आपका उत्तर पसंद है लेकिन जावा गतिशील रूप से टाइप नहीं किया गया है ...
मेहरदाद

2
@PaNNathan: आप बहुत कठिन सोच रहे हैं। यह सवाल डायनामिक टाइप की गई भाषाओं के बारे में पूछ रहा था, और इस उत्तर में जावा का उल्लेख है जैसे कि यह डायनामिक रूप से टाइप किया गया है।
मेहरदाद

24

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

बहुत सारी युवा कंपनियां हैं जो अंततः कल का उद्यम बन जाएंगी और उन भाषाओं का उपयोग कर रही होंगी।

और चलो VBA में लिखे गए कोड के बगिलियन लाइनों को न भूलें!


1
+1 के लिए "... कल के उद्यम [और] उन भाषाओं का उपयोग करेंगे।"
rdmueller

6
"बहुत सारी युवा कंपनियां हैं जो अंततः कल का उद्यम बन जाएंगी और उन भाषाओं का उपयोग कर रही होंगी।" दूसरी ओर, गतिशील भाषाएं पहले से ही लंबे समय से मौजूद हैं।
जियोर्जियो

17

एंटरप्राइज़ C, C ++, C # और Java का उपयोग करते हैं क्योंकि वे वैधानिक रूप से टाइप किए जाते हैं (कम से कम सीधे नहीं)। एंटरप्राइज़ निर्णय निर्माता प्रकार सिस्टम की एक उद्देश्य तुलना के आधार पर इस तरह के विकल्प नहीं बना रहे हैं, मैं आपको आश्वासन देता हूं।

उद्यम कर के बारे में देखभाल:

  • लंबे समय तक रखरखाव की लागत : क्या आप यथोचित अपेक्षा कर सकते हैं कि 10 वर्षों में अच्छी तरह से काम करना जारी रखें? यह वास्तव में एक अच्छी बात है अगर भाषा का विकास रूढ़िवादी और पीछे की ओर संगत है (जावा के साथ)। स्थैतिक टाइपिंग यहाँ सहायक है क्योंकि यह आपके उत्पादन सिस्टम में आने से पहले संकलन समय पर एक प्रमुख प्रकार के कीड़े पकड़ता है .....
  • प्रतिभा की उपलब्धता - क्या आप अपनी चमकदार नई प्रणाली को बनाए रखने के लिए डेवलपर्स ढूंढ पाएंगे? क्या होगा यदि मूल डेवलपर छोड़ देता है, तो क्या बाकी सभी लोग कोड को समझ पाएंगे? यह किसी भी "नई" भाषा को शुरू करने पर एक उच्च बाधा रखता है (खासकर अगर यह तैनाती, निर्माण प्रणाली, परिचालन समर्थन के लिए नई आवश्यकताएं भी पैदा करता है)। यह उन भाषाओं को व्यापक रूप से लाभ देता है जो व्यापक रूप से उपयोग की जाती हैं (C, C ++, C # और Java)
  • एकीकरण लागत : क्या अन्य तकनीकों से जुड़ना / एकीकृत करना आसान है, जो आपके पास पहले से हैं या प्राप्त करने की संभावना है? यदि आपके पास पहले से ही विरासत J2EE सिस्टम का ढेर है, तो आपको उनके साथ एकीकृत करने की आवश्यकता है। उदाहरण के लिए पायथन की तुलना में एक नया जावा ईई समाधान अधिक व्यावहारिक होने की संभावना है।
  • Predicatbility / कम जोखिम : मंच / भाषा सिद्ध है, और क्या मुझे यकीन है कि यह काम करेगा? यह आमतौर पर सरल उत्पादकता से अधिक महत्वपूर्ण है। एक प्रबंधक के लिए यह बहुत आसान है कि वह अपने बॉस को मना कर सके कि उसे नई प्रणाली बनाने के लिए जनशक्ति के लिए एक बड़ा बजट दिया जाए क्योंकि यह उसके लिए बाद में वापस जाने के लिए है और कहते हैं कि यह काम नहीं किया है .....
  • एंटरप्राइज बैकिंग / सपोर्ट - क्या प्रमुख अंतर्राष्ट्रीय संगठन भाषा और प्लेटफ़ॉर्म का समर्थन करने के लिए प्रतिबद्ध हैं? क्या वे मुझे समर्थन देने के लिए एक अनुबंध पर हस्ताक्षर करेंगे, ताकि मेरे पास कोई फोन हो सके अगर चीजें गलत हो जाएं?
  • विक्रेता तटस्थता / मंच की स्वतंत्रता - क्या मैं एक एकल आपूर्तिकर्ता के लिए बंद होने जा रहा हूं? या क्या मेरे पास भविष्य के आपूर्तिकर्ता विकल्पों / संक्रमण रास्तों की एक विस्तृत श्रृंखला उपलब्ध है? आप एक वास्तुशिल्प मृत-अंत में फंसना नहीं चाहते हैं, जबकि आपके प्रतियोगी आपके दोपहर के भोजन को खाने के लिए प्रगति करने में असमर्थ हैं। यदि आप एक उद्यम वास्तुकार के रूप में अपना काम ठीक से कर रहे हैं, तो आपको इस सामान पर कम से कम 5-10 साल आगे की सोचनी होगी।

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


1
मुझे विश्वास नहीं हो रहा है कि आपके उत्तर को अभी तक किसी ने नहीं उतारा है।
सेबस्टियन एन।

11

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

मुझे लगता है कि यह केवल उनका प्राथमिक बहाना है। असली कारण यह है कि व्यवसाय वास्तव में उन सभी को गंभीरता से नहीं लेते हैं और महसूस करते हैं कि वे शायद थोड़ा बहुत शौकिया हैं। जावा और .NET "बड़े व्यावसायिक नाम" हैं, अच्छे वाणिज्यिक विपणन, वाणिज्यिक ग्राहक सहायता हैं, और इस प्रकार वास्तव में बहुत गंभीरता से लिया जाता है।

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


8
वास्तव में? अंतिम बार मैंने देखा, Google ने पायथन के पीछे काफी वजन और विकास के लिए पर्याप्त प्रयास किया था, जिसमें पायथन के निर्माता को काम पर रखना और उसे अपना 50% समय भाषा पर काम करने की अनुमति देना था। Google भी पायथन में अच्छी मात्रा में कोड का योगदान देता है, विशेषकर अब जब अनल-स्वॉलॉग को पायथन 3 स्रोत वृक्ष में मिला दिया गया है। यह मेरे लिए पायथन को एक "बड़ा व्यावसायिक नाम" बनाता है।
चिन्मय कांची

13
@ चिनमय कांची: दिलचस्प है कि कैसे आप 1 के नमूने के आकार के साथ एक आंकड़े से अपना निष्कर्ष निकालते हैं
टि्ववी

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

2
इसके अलावा, अगर आपको लगता है कि गतिशील रूप से टाइप की जाने वाली भाषाएं खुले स्रोत के वातावरण में सबसे अधिक उपयोग की जाती हैं, तो यह स्पष्ट कटौती से दूर है। आपके द्वारा चुनी गई मीट्रिक के आधार पर, यह सच हो सकता है, लेकिन यह अक्सर नहीं होता है। कोड की लाइनों को मापने, सी एक लंबे शॉट से जीतता है। यदि आप मापते हैं कि ओपन-सोर्स प्रोजेक्ट्स में कौन सी भाषाओं का उपयोग किया जाता है, जिसमें बहु-भाषा वाले भी शामिल हैं, तो सबसे लोकप्रिय भाषाएं उस क्रम में जावास्क्रिप्ट, सी, सी ++ और पीएचपी हैं। यदि आप केवल प्राथमिक भाषा को मापते हैं, तो सबसे लोकप्रिय भाषाएं पर्ल, जावा, सी # और जावास्क्रिप्ट हैं। bit.ly/C6xTB
चिन्मय कांची

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

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

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


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

17
मैं गतिशील टाइपिंग प्यार, लेकिन मैं नफरत predeclare चर के लिए होने नहीं! इसलिए कई बार मैं गलती से एक नया वेरिएबल शुरू कर देता हूं क्योंकि मुझे एक वैरिएबल नाम याद नहीं होता।
फ्रैंक शीयर सेप

1
@Frank: मुझे बहुत पसंद है कि पर्ल के पास वेरिएबल डिक्लेरेशन को मजबूर करने के लिए एक सेटिंग है। यह मेरी राय में, पर्ल के फायदों में से एक है।
पॉल नाथन

8

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

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

डायनामिक रूप से टाइप की गई भाषाएं धीमी गति से टाइप की जाने वाली भाषाएं हैं। (लेकिन हम देखेंगे कि जेआईटी परिवर्तन पर कितना अच्छा काम करता है)


2
" कुछ प्रोग्रामर द्वारा माना जाता है" । जब मेरे पास डायनामिक टाइपिंग के बारे में प्रोग्रामर्स के साथ तर्क होते हैं, तो वे आमतौर पर स्वीकार करते हैं कि उन्होंने वास्तव में उस तरह की भाषा का इस्तेमाल कभी नहीं किया है।
फ्रैंक शीयर

1
@ फ्रेंक क्या आप कह रहे हैं कि जो लोग डायनामिक टाइपिंग की हीनता के लिए तर्क देते हैं, वे आमतौर पर इसका इस्तेमाल नहीं करते हैं?
विंस्टन एवर्ट

2
@ फ्रेंक: मैंने उस तरह की भाषा का इस्तेमाल किया है, और ज्यादातर समय परिणाम अचूक गड़बड़ रहा है। (निष्पक्ष होने के लिए, यह PHP था, और PHP में डायनामिक टाइपिंग के अलावा अन्य समस्याएं हैं)
बिली ओपल

@ बिली: मुझे लगता है कि यह आम है। वीबी के साथ अपने अनुभव के कारण मैं वर्षों से डायनेमिक टाइपिंग पर था - जब अंततः मुझे महसूस हुआ कि डायनामिक टाइपिंग का यह भयानक, स्किज़ोफ्रेनिक कार्यान्वयन विशिष्ट नहीं था, तो मेरी राय नाटकीय रूप से बदल गई।
Shog9

@Winston: मैं कह रहा हूं कि जिन लोगों के साथ मैंने तर्क दिया है, वे नहीं हैं। यह एक मामला है, मेरे लिए, "डायनेमिक टाइपिंग संभवतः काम नहीं कर सकती है" ... लेकिन वे खुशी से कई तकनीकों का उपयोग करेंगे, जो पहली बार विकसित हुईं, डायनेमिक भाषाओं (आईडीई, रीफैक्टरिंग, मेरे सिर के ऊपर से) के लिए। इसके अलावा, इस तरह के सवाल: stackoverflow.com/questions/2317579 यह दर्शाता है कि शायद सार्वभौमिक नहीं है, लेकिन इसके साथ बहस करने का मेरा मामला काम नहीं कर सकता है, लेकिन मैंने-की-कोशिश की गई प्रोग्रामर को अलग नहीं किया है। (मुझे, मुझे लगता है कि दोनों दृष्टिकोणों का मूल्य है।)
फ्रैंक शियरर

8

नोट: यह ज्यादातर व्यक्तिपरक है और मेरे अनुभवों और छापों पर आधारित है।

डायनामिक रूप से टाइप की गई भाषाएँ स्टेटिकली टाइप्ड भाषाओं से बहुत अलग होती हैं। ये अंतर संभवतः अधिकांश अन्य अनुप्रयोगों की तुलना में हेवीवेट एंटरप्राइज़ सॉफ़्टवेयर में अधिक महत्वपूर्ण हो जाते हैं।

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

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

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

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

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

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

tl; dr: स्थैतिक भाषाएं नौकरशाही की तरह अधिक महसूस करती हैं, इसलिए उनके जैसे उद्यमी प्रबंधक बेहतर होते हैं।


3
शिथिल-नासमझ टाइपिंग नियमों वाली भाषाएं उन चीजों के लिए कई अवसर पैदा करती हैं जो थोड़े से थोड़े काम के लिए गलत हैं। उदाहरण के लिए, उदाहरण के लिए, एक संख्या को कोड में पास करना जो एक स्ट्रिंग की अपेक्षा करता है, अक्सर ऐसा व्यवहार करेगा जैसे कि किसी ने उस संख्या का एक स्ट्रिंग प्रतिनिधित्व पारित किया था, लेकिन हमेशा नहीं। उदाहरण के लिए 456 से 123 को जोड़ने की कोशिश करने से 123456 नहीं निकलेगा, बल्कि इसकी उपज 579 होगी। जब तक यह स्पष्ट नहीं हो जाता कि नंबर-टू-स्ट्रिंग रूपांतरण के लिए कौन जिम्मेदार है, यह या तो पूरी तरह से किया जा सकता है या बिल्कुल भी असफल हो सकता है।
सुपरकैट

1
@supercat, मुझे लगता है कि PHP और जावास्क्रिप्ट उस मुद्दे से निपटने के दो तरीकों के लिए अच्छे उदाहरण हैं (ऑपरेटरों के संबंध में): PHP में ऑपरेटर असंदिग्ध हैं - +संख्या लेते हैं और उन्हें जोड़ते हैं, यदि आप चाहते हैं कि आपको उपयोग करने की आवश्यकता है .; जेएस में दोनों ऑपरेशन एक ही ऑपरेटर को साझा करते हैं - अगर आपको नहीं पता कि आपके मूल्य कैसे व्यवहार करेंगे, तो आपसे स्पष्ट रूप से उन्हें बदलने की अपेक्षा की जाती है। बेशक, यह भी ढीली टाइपिंग बनाम सख्त टाइपिंग के साथ करना है (अजगर भी सख्त है), लेकिन मूल रूप से आपको या तो यह सुनिश्चित करना होगा कि आपके मूल्यों का सही प्रकार है या अपने संचालन को अपेक्षित प्रकार लागू करें।
एलन प्लम

1
मैं PHP से बहुत परिचित नहीं हूं, लेकिन ऐसा लगता है कि यह "सही" दृष्टिकोण का उपयोग करता है। जावास्क्रिप्ट कई मायनों में IMHO है, लेकिन मुझे लगता है कि "+" का व्यवहार सबसे खराब है। वास्तव में, मुझे विश्वास नहीं है कि शिथिल-नासमझ गतिशील टाइपिंग का एक मजबूत प्रकार की प्रणाली पर बहुत अधिक लाभ होगा, जिसने एक इंटरफ़ेस को यह घोषित करने की अनुमति दी थी कि कुछ अन्य वर्ग या इंटरफ़ेस प्रकार की चीजों को विशिष्ट नियमों के साथ इसे लागू या व्युत्पन्न माना जाना चाहिए। इस बारे में कि कैसे दावों को प्राथमिकता दी जाएगी। बड़ी संरचना जिसे मैं वर्तमान संरचनात्मक रूप से टाइप किए गए ढांचे के साथ जानता हूं, वह है ...
सुपरकैट

1
... अगर दो लोग स्वतंत्र रूप से समान इंटरफेस विकसित करते हैं, तो तीसरे पक्ष के पास कोड लिखने का कोई रास्ता नहीं है जो उन्हें परस्पर उपयोग कर सकते हैं। यदि कोई तीसरा पक्ष एक नया इंटरफ़ेस परिभाषित कर सकता है और घोषणा कर सकता है कि मौजूदा दोनों में से किसी एक के कार्यान्वयन को नए को ऑटो-कार्यान्वित करना चाहिए (यदि आवश्यक हो तो नए इंटरफ़ेस में आपूर्ति की गई रैपर का उपयोग करके) मुझे लगता है कि 99% को क्या शब्दार्थ होगा। गतिशील टाइपिंग के बारे में अच्छा है।
सुपरकैट

3

नहीं, मुझे नहीं लगता है कि गतिशील रूप से टाइप की गई भाषाएं सभी आलोचनाओं के लायक हैं। (या यदि आप पसंद करते हैं, तो वे वैधानिक रूप से टाइप की जाने वाली भाषाओं की जितनी आलोचना करते हैं।)

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

केवल एक चीज जो वास्तव में मुझे जकड़ती है, जब कोई दावा करता है कि तकनीक फू को संभवतः गतिशील रूप से टाइप की गई भाषा में नहीं किया जा सकता है (या करना बहुत कठिन हो सकता है) ... जब उस तकनीक का आविष्कार किया गया था, उसके द्वारा और गतिशील रूप से टाइप किया गया था। भाषा। IDEs? छोटी बात। स्वचालित रीफैक्टरिंग? छोटी बात। कॉलर्स-के / कार्यान्वयन-की? छोटी बात।


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

6
जब अन्य प्रोग्रामर हास्केल से आता है, तो वह / वह पहले से ही जानती है कि यह जावा और गतिशील भाषाओं दोनों में सबसे अच्छी भाषा है।)
एंड्रेस एफ।

0

उद्यम अभी नई भाषाओं और उपकरणों को तेजी से नहीं अपना रहे हैं और इसके अच्छे कारण हैं। लेकिन, जब C # जैसे मुख्य धारा के उपकरणों में से कोई एक इन विशेषताओं को लागू करता है, तो वे मुख्यधारा के उद्यमों में घुस जाएंगे।


मुझे नहीं पता कि यह क्यों अस्वीकृत किया गया था, लेकिन यह एक अपमानजनक बयान है। उद्यम धीमे और रूढ़िवादी हैं। लोग भी क्रमिक परिवर्तन पसंद करते हैं (जैसे C # में डायनामिक कीवर्ड जो आपको कभी-कभी गतिशील रूप से टाइप की गई भाषा में डायनामिक टाइपिंग का उपयोग करने देता है) अचानक परिवर्तन (जैसे रूबी)।
वदादी कार्तिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.