इस कथन को समझने के लिए, हमें पहले यह समझना होगा कि एक स्थिर प्रकार की प्रणाली हमें क्या खरीदती है। संक्षेप में, एक स्थिर प्रकार प्रणाली हमें क्या देती है, इसकी गारंटी है: यदि प्रोग्राम प्रकार की जाँच करता है, तो रनटाइम व्यवहारों की एक निश्चित श्रेणी उत्पन्न नहीं हो सकती है।
जो अशुभ लगता है। खैर, एक प्रकार का चेकर एक प्रमेय चेकर के समान है। (वास्तव में, करी-हावर्ड-इसोर्फिज्म के अनुसार, वे एक ही चीज हैं।) एक बात जो प्रमेयों के बारे में बहुत अजीब है, वह यह है कि जब आप एक प्रमेय साबित करते हैं, तो आप बिल्कुल वही सिद्ध करते हैं जो प्रमेय कहता है, अब और नहीं। (यह उदाहरण के लिए, क्यों, जब कोई कहता है कि "मैंने इस कार्यक्रम को सही साबित किया है", तो आपको हमेशा "कृपया 'सही' को परिभाषित करना चाहिए"।) टाइप सिस्टम के लिए भी यही सच है। जब हम कहते हैं कि "एक प्रोग्राम टाइप-सेफ है", तो हमारा मतलब यह नहीं है कि कोई संभावित त्रुटि नहीं हो सकती है। हम केवल यह कह सकते हैं कि त्रुटियों को रोकने के लिए टाइप सिस्टम हमसे वादा करता है।
तो, कार्यक्रमों में असीम रूप से कई अलग-अलग रनटाइम व्यवहार हो सकते हैं। उनमें से, असीम रूप से कई लोग उपयोगी हैं, लेकिन साथ ही कई लोग "गलत" हैं ("शुद्धता" की विभिन्न परिभाषाओं के लिए)। एक स्थिर प्रकार की प्रणाली हमें यह साबित करने की अनुमति देती है कि एक निश्चित परिमित, उन असीम रूप से कई गलत रनटाइम व्यवहारों का सेट नहीं हो सकता है।
विभिन्न प्रकार की प्रणालियों के बीच का अंतर मूल रूप से है, जिसमें कितने, और कितने जटिल क्रम व्यवहार हैं जो वे नहीं होने के लिए साबित हो सकते हैं। कमजोर प्रकार के सिस्टम जैसे कि जावा केवल बहुत ही बुनियादी चीजों को साबित कर सकते हैं। उदाहरण के लिए, जावा यह साबित कर सकता है कि टाइप की जाने वाली विधि String
वापस नहीं लौट सकती List
। लेकिन, उदाहरण के लिए, यह साबित नहीं हो सकता है कि विधि वापस नहीं आएगी। यह भी साबित नहीं हो सकता है कि विधि एक अपवाद नहीं फेंकेगी। और यह साबित नहीं कर सकता कि यह गलत नहीं लौटेगा String
- कोई भी String
टाइप चेकर को संतुष्ट करेगा। (और, निश्चित रूप से, यहां तक कि null
इसे भी संतुष्ट करेगा।) बहुत सरल चीजें हैं जो जावा साबित नहीं कर सकती हैं, यही कारण है कि हमारे पास अपवाद हैं ArrayStoreException
, जैसे कि ClassCastException
, या हर किसी का पसंदीदा NullPointerException
,।
एजडा की अधिक शक्तिशाली प्रकार की प्रणालियां "दो तर्कों का योग लौटाएगी" या "एक तर्क के रूप में पारित सूची के क्रमबद्ध संस्करण" जैसी चीजें भी साबित कर सकती हैं।
अब, एल्म के डिजाइनरों के इस कथन से क्या अभिप्राय है कि उनके पास कोई रनटाइम अपवाद नहीं है, एल्म के प्रकार की प्रणाली अनुपस्थिति (रनटाइम व्यवहार) का एक महत्वपूर्ण हिस्सा साबित हो सकती है कि अन्य भाषाओं में ऐसा नहीं होने के लिए साबित नहीं किया जा सकता है और इस प्रकार नेतृत्व हो सकता है रनटाइम पर गलत व्यवहार करने के लिए (जिसका सबसे अच्छा मामले में एक अपवाद है, एक बदतर स्थिति में एक दुर्घटना का मतलब है, और सभी के सबसे बुरे मामले में कोई दुर्घटना नहीं, कोई अपवाद नहीं है, और बस एक चुपचाप गलत परिणाम है)।
इसलिए, वे यह नहीं कह रहे हैं कि "हम अपवादों को लागू नहीं करते हैं"। वे कह रहे हैं "ऐसी चीजें जो विशिष्ट भाषाओं में क्रमिक अपवाद होंगी जो कि एल्म में आने वाले विशिष्ट प्रोग्रामर के पास अनुभव के साथ होती हैं, उन्हें टाइप सिस्टम द्वारा पकड़ा जाता है"। बेशक, इदरीस, एजडा, गुरु, एपिग्राम, इसाबेल / एचओएल, कोक या इसी तरह की भाषाओं से आने वाले किसी व्यक्ति को एल्म की तुलना में बहुत कमजोर दिखाई देगा। यह कथन विशिष्ट जावा, C♯, C ++, ऑब्जेक्टिव-सी, PHP, ECMAScript, पायथन, रूबी, पर्ल,… प्रोग्रामर पर अधिक लक्षित है।