टाइप सिस्टम त्रुटियों को रोकते हैं
टाइप सिस्टम अवैध कार्यक्रमों को समाप्त करता है। निम्नलिखित पायथन कोड पर विचार करें।
a = 'foo'
b = True
c = a / b
पायथन में, यह कार्यक्रम विफल रहता है; यह एक अपवाद फेंकता है। जावा, C #, हास्केल जैसी भाषा में , जो भी हो, यह एक कानूनी कार्यक्रम भी नहीं है। आप इन त्रुटियों से पूरी तरह से बचते हैं क्योंकि वे केवल इनपुट कार्यक्रमों के सेट में संभव नहीं हैं।
इसी तरह, एक बेहतर प्रकार की प्रणाली अधिक त्रुटियों को नियंत्रित करती है। अगर हम सुपर एडवांस टाइप सिस्टम पर कूदते हैं तो हम इस तरह की बातें कह सकते हैं:
Definition divide x (y : {x : integer | x /= 0}) = x / y
अब टाइप सिस्टम गारंटी देता है कि कोई भी विभाजन-दर-० त्रुटियां नहीं हैं।
किस तरह की त्रुटियां
यहां एक संक्षिप्त सूची दी गई है कि सिस्टम किस प्रकार की त्रुटियों को रोक सकते हैं
- आउट-ऑफ-रेंज त्रुटियों
- एसक्यूएल इंजेक्षन
- 2 को सामान्य बनाना, कई सुरक्षा समस्याएं ( पर्ल में कौन सी दागी जाँच है )
- अनुक्रम की त्रुटियां
- उपयोग किए जाने वाले मूल्यों का सबसेट मजबूर करना (उदाहरण के लिए, केवल 0 से अधिक पूर्णांक)
नापाक बिल्ली के बच्चे (हां, यह एक मजाक था)
- हानि-सटीक परिशुद्धता
- सॉफ़्टवेयर ट्रांसेक्शनल मेमोरी (STM) त्रुटियां (इसके लिए शुद्धता की आवश्यकता होती है, जिसमें भी प्रकार की आवश्यकता होती है)
- 8 को सामान्य बनाना, दुष्प्रभावों को नियंत्रित करना
- डेटा संरचनाओं पर आक्रमणकारी (क्या एक द्विआधारी पेड़ संतुलित है?)
- एक अपवाद को भूल जाना या गलत को फेंक देना
और याद रखें, यह संकलन के समय भी है । केवल टाइप त्रुटियों के लिए जाँच करने के लिए 100% कोड कवरेज के साथ परीक्षण लिखने की आवश्यकता नहीं है, संकलक सिर्फ आपके लिए करता है :)
केस स्टडी: टाइप्ड लैंबडा कैलकुलस
ठीक है, चलो सभी प्रकार की सरलतम प्रणालियों की जांच करते हैं, बस टाइप किए गए लैम्ब्डा कैलकुलस ।
मूल रूप से दो प्रकार के होते हैं,
Type = Unit | Type -> Type
और सभी शब्द या तो चर, लंबदा, या अनुप्रयोग हैं। इसके आधार पर, हम यह साबित कर सकते हैं कि कोई भी अच्छी तरह से टाइप किया गया प्रोग्राम समाप्त हो गया है। ऐसी स्थिति कभी नहीं होती है जहां कार्यक्रम हमेशा के लिए अटक या लूप हो जाएगा। यह सामान्य लैम्ब्डा कैलकुलस में साबित नहीं होता क्योंकि अच्छी तरह से, यह सच नहीं है।
इस बारे में सोचें, हम ग्वारेंटी के लिए टाइप सिस्टम का उपयोग कर सकते हैं कि हमारा प्रोग्राम हमेशा के लिए लूप नहीं करता है, बल्कि सही है?
गतिशील प्रकारों में खोजें
डायनामिक टाइप सिस्टम स्थिर प्रकार के सिस्टम के रूप में समान गारंटी प्रदान कर सकते हैं, लेकिन संकलन समय के बजाय रनटाइम पर। दरअसल, चूंकि यह रनटाइम है, आप वास्तव में अधिक जानकारी दे सकते हैं। आप कुछ गारंटी खो देते हैं, विशेष रूप से स्थैतिक गुणों जैसे समाप्ति के बारे में।
इसलिए डायनामिक प्रकार कुछ कार्यक्रमों को खारिज नहीं करते हैं, बल्कि विकृत कार्यक्रमों को विकृत कार्य करते हैं, जैसे अपवादों को फेंकना।
TLDR
तो यह लंबे और छोटे, यह है कि सिस्टम कुछ कार्यक्रमों को नियंत्रित करता है। कई कार्यक्रमों को किसी तरह से तोड़ दिया जाता है, इसलिए, प्रकार सिस्टम के साथ हम इन टूटे हुए कार्यक्रमों से बचते हैं।