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