बहस के आसपास कई मजबूत राय हैं लेकिन जाहिर है कि यह वास्तव में राय का विषय नहीं है, यह तथ्यों की बात है । इसलिए हमें अनुभवजन्य शोध पर ध्यान देना चाहिए । और उस से सबूत स्पष्ट है:
हाँ वास्तव में न सिर्फ एक बिट से और है, लेकिन -, स्थिर टाइपिंग व्यापार गत लायक है काफी हद तक । वास्तव में, ठोस सबूत से पता चलता है कि स्थिर टाइपिंग से कोड में कीड़े की संख्या कम से कम 15% कम हो सकती है (और यह एक कम अनुमान है, वास्तविक प्रतिशत लगभग निश्चित रूप से बड़ा है)। यह एक चौंकाने वाली उच्च संख्या है: मुझे लगता है कि स्थैतिक टाइपिंग के अधिकांश समर्थकों ने भी नहीं सोचा होगा कि यह इतना बड़ा अंतर है।
इस पर विचार करें: यदि किसी ने आपको बताया कि आपकी परियोजना में कीड़े को कम करने का एक सरल तरीका था रात भर में 15%, तो यह एक बिना दिमाग वाला होना चाहिए। 1 यह लगभग लौकिक चांदी की गोली है।
साक्ष्य को कागज में प्रस्तुत करने के लिए टाइप या नॉट टू टाइप: क्वॉन्टिफाइंग डिटेक्टेबल बग्स इन जावास्क्रिप्ट , ज़िंगा गाओ, क्रिश्चियन बर्ड और अर्ल टी। बर्र द्वारा। मैं हर किसी को इसे पढ़ने के लिए प्रोत्साहित करता हूं, यह एक अच्छा लिखित पेपर है जो अनुकरणीय शोध प्रस्तुत करता है।
यह संक्षिप्त रूप से संक्षेप में बताना मुश्किल है कि लेखकों ने कितनी दृढ़ता से अपने विश्लेषण का प्रदर्शन किया है, लेकिन यहाँ (बहुत मोटा) रूपरेखा है:
टाइपस्क्रिप्ट और फ़्लो जावास्क्रिप्ट पर आधारित दो प्रोग्रामिंग भाषाएं हैं, जो अन्यथा संगत रहने पर, टाइपिंग और स्थिर प्रकार की जाँच को जोड़ते हैं। यह मौजूदा कोड को प्रकारों के अनुसार बढ़ाने की अनुमति देता है, और फिर इसे जांचने के लिए टाइप करता है।
शोधकर्ताओं ने GitHub से जावास्क्रिप्ट में लिखी ओपन सोर्स परियोजनाओं को एकत्र किया, हल की गई बग रिपोर्ट को देखा और प्रत्येक रिपोर्ट किए गए बग को कोड के एक टुकड़े तक कम करने का प्रयास किया, जो टाइपस्क्रिप्ट या फ्लो के स्थिर प्रकार चेकर द्वारा पकड़ा जाएगा। इसने उन्हें स्थैतिक टाइपिंग का उपयोग करके कीड़े के प्रतिशत के निचले हिस्से का अनुमान लगाने की अनुमति दी।
शोधकर्ताओं ने यह सुनिश्चित करने के लिए कड़े कदम उठाए कि उनका विश्लेषण गैर-प्रकार से संबंधित बग को प्रकार से संबंधित नहीं माना जाएगा। 2
पिछले अध्ययनों की तुलना में, इस नए अध्ययन में विशेष ताकत है:
- एक भी नहीं है प्रत्यक्ष स्थिर की तुलना बनाम गतिशील टाइपिंग, कुछ (यदि हो तो) कारकों के साथ, के बाद से जावास्क्रिप्ट और टाइपप्रति / प्रवाह के बीच फर्क सिर्फ इतना है टाइपिंग है।
- वे टाइपस्क्रिप्ट और फ्लो (यानी विभिन्न प्रकार के सिस्टम) दोनों की जांच करके कई आयामों में प्रतिकृति का प्रदर्शन करते हैं, और अलग-अलग लोगों द्वारा बग को ठीक करने के लिए (मैन्युअल) प्रकार एनोटेशन को पुन: उत्पन्न करते हैं। और वे विभिन्न परियोजनाओं से बड़ी संख्या में कोड बेस का प्रदर्शन करते हैं।
- पेपर फिक्स्ड बग (कुछ अधिक अस्पष्ट गुणवत्ता के बजाय) पर स्थिर टाइपिंग के प्रत्यक्ष प्रभाव को मापता है ।
- लेखक क्या मापना है और कैसे, ऊपर-सामने एक कठोर मॉडल को परिभाषित करता है। इसके अलावा, उनका विवरण अविश्वसनीय रूप से स्पष्ट है और खामियों के लिए विश्लेषण करना आसान बनाता है (यह हमेशा अच्छा होता है जब एक शोध पत्र खुद को हमलों के लिए खोलता है: यदि कोई हमला इसके तर्कों को सेंध लगाने का प्रबंधन नहीं करता है, तो यह और भी मजबूत होता है)। 3
- वे उचित शक्ति विश्लेषण करते हैं ताकि उनका नमूना आकार पर्याप्त हो, और उनका बाद का सांख्यिकीय विश्लेषण वायुरोधी हो।
- वे अत्यधिक स्पष्टीकरण को बाहर करने के लिए अत्यधिक रूढ़िवादी हैं, और केवल एक ही चलती भाग को मापते हैं। इसके अलावा, वे अपने विश्लेषण को उन बगों तक सीमित कर देते हैं जो प्रकारों के द्वारा तुरंत ठीक करने योग्य होते हैं, और ऐसी किसी भी चीज़ को बाहर कर देते हैं जिन्हें टाइपिंग को समायोजित करने के लिए अधिक उन्नत रिफैक्टिंग की आवश्यकता हो सकती है। इसलिए वास्तव में, प्रभाव बहुत बड़ा है, लेकिन निश्चित रूप से जितना उन्होंने रिपोर्ट किया है उससे छोटा नहीं है।
- और अंत में, वे एक मामूली प्रभाव लेकिन एक चौंका देने वाला अंतर नहीं पाते हैं । अपनी अत्यधिक रूढ़िवादी प्रक्रिया के बावजूद, यहां तक कि 95% विश्वास अंतराल के कम अंत में भी वे पाते हैं कि कम से कम 10% कीड़े हैं जो बस न्यूनतम जोड़ा प्रकार की जांच के साथ गायब हो जाएंगे।
जब तक कागज में कोई मूलभूत दोष न हो जिसे किसी ने अभी तक नहीं खोजा है, तो कागज को लगभग किसी भी कीमत पर स्थैतिक टाइपिंग का एक बड़ा लाभ दिखाई देता है। 4
एक ऐतिहासिक नोट पर, प्रोग्रामिंग में टाइपिंग डिसिप्लिन पर किए गए शोध ने एक चट्टानी शुरुआत की है, क्योंकि लंबे समय से, सबूत बिल्कुल स्पष्ट नहीं थे। इसका कारण यह है कि स्थिर बनाम गतिशील टाइपिंग के प्रभाव की जांच करने के लिए व्यवस्थित प्रयोग करना आसान नहीं है: एक व्यवस्थित प्रयोग को उस प्रभाव को अलग करना चाहिए जिसकी हम जांच कर रहे हैं। और दुर्भाग्य से हम टाइपिंग अनुशासन के प्रभाव को अलग नहीं कर सकते, क्योंकि यह प्रोग्रामिंग भाषाओं से जुड़ा हुआ है।
वहाँ वास्तव में थे प्रोग्रामिंग भाषाओं कि (के साथ जैसे वीबी विभिन्न बोलियों में दोनों स्थिर और गतिशील टाइपिंग की अनुमति Option Strict
On
या Off
, या स्थिर लिस्प टाइप किया)। हालांकि, ये प्रत्यक्ष तुलना के लिए अच्छी तरह से अनुकूल नहीं थे, सबसे महत्वपूर्ण बात यह है कि कोई मौजूदा, पर्याप्त रूप से बड़े कोड आधार नहीं थे जो प्रत्यक्ष तुलना की अनुमति देते हैं। सर्वोत्तम रूप से हम उनकी तुलना "प्रयोगशाला सेटिंग्स" में कर सकते हैं, जहां परीक्षण विषय यादृच्छिक रूप से भाषा के सांख्यिकीय या गतिशील रूप से टाइप किए गए कार्य को हल करते हैं।
दुर्भाग्य से ये कृत्रिम प्रोग्रामिंग असाइनमेंट वास्तविक दुनिया के उपयोग को अच्छी तरह से प्रदर्शित नहीं करते हैं। विशेष रूप से, उनमें से कई गुंजाइश में छोटे हैं और एक अच्छी तरह से परिभाषित समस्या को हल करते हैं जिसे पाठ के आधे पृष्ठ पर संक्षेप में प्रस्तुत किया जा सकता है।
सौभाग्य से वह अतीत में है, क्योंकि टाइपस्क्रिप्ट, फ्लो और जावास्क्रिप्ट वास्तव में स्थिर टाइपिंग को छोड़कर समान भाषाएं हैं, और क्योंकि कोड और बग से नमूना करने के लिए एक व्यापक वास्तविक दुनिया डेटासेट है।
1 मूल पेपर के एक उद्धरण से प्रेरित।
2 मैं इससे पूरी तरह से खुश नहीं हूं: सांख्यिकीय रूप से टाइप की जाने वाली भाषाओं की मुख्य ताकत में से एक यह है कि अस्थिर रूप से टाइप-असंबद्ध समस्याओं को उन तरीकों से हल किया जा सकता है, जो सांख्यिकीय रूप से टाइप-चेक किए जा सकते हैं। यह कई तर्क त्रुटियों को टाइप त्रुटियों में बदल देता है, जो स्थैतिक टाइपिंग द्वारा पकड़े जाने वाले कीड़े की दर में काफी वृद्धि करता है। वास्तव में, कागज मोटे तौर पर टाइप-असंबद्ध बग्स को वर्गीकृत करता है और मैं मानता हूं कि वास्तव में उन लोगों का एक बड़ा प्रतिशत स्थिर टाइपिंग के साथ पकड़ा जा सकता है।
3 मैं किसी को भी आमंत्रित करता हूं, विशेष रूप से गतिशील टाइपिंग के समर्थकों को, विश्लेषण में अनपेक्षित खामियों को खोजने की कोशिश करता हूं। मुझे नहीं लगता कि कई (यदि कोई हो) हैं, और मुझे विश्वास है कि कोई संभावित दोष भौतिक रूप से परिणाम को बदल नहीं सकता है।
4 मुझे संदेह है कि वास्तविक, बड़े पैमाने पर परियोजनाओं में स्थिर टाइपिंग की वास्तविक लागत कोई भी नहीं है, क्योंकि यह तब वास्तुकला का एक स्वाभाविक हिस्सा बन जाता है और योजना को सरल भी बना सकता है । स्थैतिक प्रकार की त्रुटियों को ठीक करने में समय लगता है, लेकिन बाद में खोज की गई त्रुटियों से बहुत कम। यह बड़े पैमाने पर अनुभवजन्य रूप से अध्ययन किया गया है और दशकों से जाना जाता है (उदाहरण के लिए कोड पूरा देखें )।