Strong and weak typing
कंप्यूटर प्रोग्रामिंग में, प्रोग्रामिंग भाषाओं को बोलचाल की भाषा में वर्गीकृत करने के कई तरीकों में से एक यह है कि क्या भाषा की प्रकार प्रणाली इसे दृढ़ता से टाइप करती है या कमजोर टाइप (शिथिल रूप से टाइप) करती है। हालांकि, शब्दों का क्या अर्थ है, इसकी कोई सटीक तकनीकी परिभाषा नहीं है और विभिन्न लेखक शब्दों के निहित अर्थ और मुख्यधारा की प्रोग्रामिंग भाषाओं की प्रकार प्रणालियों की "ताकत" की सापेक्ष रैंकिंग के बारे में असहमत हैं। इस कारण से, जो लेखक प्रकार प्रणालियों के बारे में स्पष्ट रूप से लिखना चाहते हैं, वे अक्सर "प्रकार सुरक्षा" जैसे विशिष्ट अभिव्यक्तियों के पक्ष में "मजबूत टाइपिंग" और "कमजोर टाइपिंग" शब्दों को छोड़ देते हैं। आम तौर पर, एक दृढ़ता से टाइप की गई भाषा में संकलन समय पर टाइपिंग के सख्त नियम होते हैं, जिसका अर्थ है कि संकलन के दौरान त्रुटियां और अपवाद होने की अधिक संभावना होती है। इनमें से अधिकांश नियम वेरिएबल असाइनमेंट, फंक्शन रिटर्न वैल्यू, प्रोसीजर आर्ग्यूमेंट्स और फंक्शन कॉलिंग को प्रभावित करते हैं। गतिशील रूप से टाइप की गई भाषाओं (जहां टाइप चेकिंग रन टाइम पर होती है) को भी दृढ़ता से टाइप किया जा सकता है। गतिशील रूप से टाइप की गई भाषाओं में, चर के बजाय मूल्यों के प्रकार होते हैं। एक कमजोर टाइप की गई भाषा में टाइपिंग के नियम कम होते हैं और यह अप्रत्याशित या यहां तक कि गलत परिणाम भी दे सकती है या रनटाइम पर अंतर्निहित प्रकार परिवर्तन कर सकती है। गतिशील रूप से टाइप की गई (आम तौर पर "कमजोर रूप से टाइप की गई") भाषाओं के समर्थक इस तरह की चिंताओं को अतिरंजित पाते हैं और मानते हैं कि स्थिर टाइपिंग वास्तव में समस्याओं और अक्षमताओं के एक बड़े समूह का परिचय देती है। एक अलग लेकिन संबंधित अवधारणा अव्यक्त टाइपिंग है। 1974 में, बी. लिस्कोव और एस. ज़िल्स ने एक दृढ़ता से टाइप की गई भाषा को परिभाषित किया जिसमें "जब भी किसी वस्तु को कॉलिंग फ़ंक्शन से कॉल किए गए फ़ंक्शन में पारित किया जाता है, तो उसका प्रकार कॉल किए गए फ़ंक्शन में घोषित प्रकार के साथ संगत होना चाहिए"। 1977 में, के. जैक्सन ने लिखा, "दृढ़ता से टाइप की गई भाषा में प्रत्येक डेटा क्षेत्र का एक अलग प्रकार होगा और प्रत्येक प्रक्रिया इस प्रकार के संदर्भ में अपनी संचार आवश्यकताओं को बताएगी।" "मजबूत" या "कमजोर" की परिभाषाएँ कई अलग-अलग भाषा डिजाइन निर्णयों को "मजबूत" या "कमजोर" टाइपिंग के प्रमाण के रूप में संदर्भित किया गया है। इनमें से कई को प्रकार सुरक्षा, स्मृति सुरक्षा, स्थिर प्रकार-जाँच, या गतिशील प्रकार-जाँच की उपस्थिति या अनुपस्थिति के रूप में अधिक सटीक रूप से समझा जाता है। "स्ट्रांग टाइपिंग" आम तौर पर प्रोग्रामिंग भाषा के प्रकारों के उपयोग को संदर्भित करता है ताकि कोड के अपरिवर्तकों को पकड़ा जा सके, और इसकी शुद्धता सुनिश्चित की जा सके, और निश्चित रूप से प्रोग्रामिंग त्रुटियों के कुछ वर्गों को बाहर किया जा सके। इस प्रकार इन लक्ष्यों को प्राप्त करने के लिए कई "मजबूत टाइपिंग" विषयों का उपयोग किया जाता है। अंतर्निहित प्रकार रूपांतरण और "टाइप पन्निंग" कुछ प्रोग्रामिंग भाषाओं में एक प्रकार के मान का उपयोग करना आसान हो जाता है जैसे कि यह दूसरे प्रकार का मान हो। इसे कभी-कभी "कमजोर टाइपिंग" के रूप में वर्णित किया जाता है। उदाहरण के लिए, आहज़ मारुच का मानना है कि "जबरदस्ती तब होती है जब आपके पास एक स्थिर रूप से टाइप की गई भाषा होती है और आप एक प्रकार के उपयोग को मजबूर करने के लिए भाषा की वाक्यात्मक विशेषताओं का उपयोग करते हैं जैसे कि यह एक अलग प्रकार था (सी में शून्य * के सामान्य उपयोग पर विचार करें)। जबरदस्ती आमतौर पर कमजोर टाइपिंग का एक लक्षण है। दूसरी ओर, रूपांतरण उपयुक्त प्रकार की एक बिल्कुल नई वस्तु बनाता है। एक अन्य उदाहरण के रूप में, जी. सी. सी. इसे टाइप-पन्निंग के रूप में वर्णित करता है और चेतावनी देता है कि यह सख्त उपनाम को तोड़ देगा। थियागो मैसिएरा कई समस्याओं पर चर्चा करता है जो तब उत्पन्न हो सकती हैं जब टाइप-पन्निंग संकलक को अनुचित अनुकूलन करने का कारण बनती है। ऐसी भाषाओं के कई उदाहरण हैं जो अंतर्निहित प्रकार के रूपांतरण की अनुमति देते हैं, लेकिन एक प्रकार-सुरक्षित तरीके से। उदाहरण के लिए, सी + + और सी #दोनों ही कार्यक्रमों को अच्छी तरह से परिभाषित शब्दार्थ के साथ एक प्रकार से दूसरे प्रकार में मूल्य को बदलने के लिए प्रचालक को परिभाषित करने की अनुमति देते हैं। जब एक सी + + संकलक इस तरह के रूपांतरण का सामना करता है, तो यह ऑपरेशन को एक फ़ंक्शन कॉल की तरह मानता है। इसके विपरीत, एक मान को सी प्रकार में परिवर्तित करना एक असुरक्षित कार्य है जो संकलक के लिए अदृश्य है। संकेत कुछ प्रोग्रामिंग भाषाएँ संकेतों को ऐसे उजागर करती हैं जैसे कि वे संख्यात्मक मान हों, और उपयोगकर्ताओं को उन पर अंकगणितीय प्रदर्शन करने की अनुमति देती हैं। इन भाषाओं को कभी-कभी "कमजोर टाइप" के रूप में संदर्भित किया जाता है, क्योंकि सूचक अंकगणित का उपयोग भाषा की प्रकार प्रणाली को दरकिनार करने के लिए किया जा सकता है। अनटैग्ड यूनियन कुछ प्रोग्रामिंग भाषाएँ अनटैग्ड यूनियनों का समर्थन करती हैं, जो एक प्रकार के मूल्य को दूसरे प्रकार के मूल्य के रूप में देखने की अनुमति देती हैं। लुका कार्डेली के लेख टाइपफुल प्रोग्रामिंग में, एक "मजबूत प्रकार प्रणाली" को ऐसे के रूप में वर्णित किया गया है जिसमें अनियंत्रित रनटाइम प्रकार त्रुटि की कोई संभावना नहीं है। अन्य लेखन में, अनियंत्रित रन-टाइम त्रुटियों की अनुपस्थिति को सुरक्षा या प्रकार सुरक्षा के रूप में संदर्भित किया जाता है; टोनी होरे के शुरुआती कागजात इसे संपत्ति सुरक्षा कहते हैं। प्रोग्रामिंग भाषाओं में भिन्नता इनमें से कुछ परिभाषाएँ विरोधाभासी हैं, अन्य केवल वैचारिक रूप से स्वतंत्र हैं, और फिर भी अन्य अन्य, अधिक "उदार" (कम मजबूत) परिभाषाओं के विशेष मामले (अतिरिक्त बाधाओं के साथ) हैं। इन परिभाषाओं के बीच व्यापक विचलन के कारण, अधिकांश प्रोग्रामिंग भाषाओं के बारे में दावों का बचाव करना संभव है कि वे या तो दृढ़ता से या कमजोर रूप से टाइप की गई हैं। उदाहरण के लिएः जावा, पास्कल, अदा और सी को एक घोषित प्रकार के लिए चर की आवश्यकता होती है, और अन्य अंकगणितीय प्रकारों के लिए अंकगणितीय मूल्यों के स्पष्ट कास्ट के उपयोग का समर्थन करते हैं। जावा, सी #, अदा और पास्कल को कभी-कभी सी की तुलना में अधिक दृढ़ता से टाइप किया जाता है, एक ऐसा दावा जो शायद इसलिए है क्योंकि सी अधिक प्रकार के अंतर्निहित रूपांतरणों का समर्थन करता है, और सूचक मूल्यों को स्पष्ट रूप से कास्ट करने की अनुमति देता है जबकि जावा और पास्कल नहीं करते हैं। जावा को पास्कल की तुलना में अधिक दृढ़ता से टाइप किया गया माना जा सकता है क्योंकि जावा में स्थिर प्रकार प्रणाली से बचने के तरीके जावा आभासी मशीन के प्रकार प्रणाली द्वारा नियंत्रित किए जाते हैं। सी #और VB.NET इस संबंध में जावा के समान हैं, हालांकि वे स्पष्ट रूप से कोड खंडों को "असुरक्षित संदर्भ" में रखकर गतिशील प्रकार की जाँच को अक्षम करने की अनुमति देते हैं। पास्कल की प्रकार प्रणाली को "बहुत मजबूत" के रूप में वर्णित किया गया है, क्योंकि एक सरणी या स्ट्रिंग का आकार अपने प्रकार का हिस्सा है, जिससे कुछ प्रोग्रामिंग कार्य बहुत कठिन हो जाते हैं। हालांकि, डेल्फी इस समस्या को ठीक करता है। स्मॉलटॉक, रूबी, पायथन और सेल्फ सभी इस अर्थ में "दृढ़ता से टाइप किए गए" हैं कि टाइप करने की त्रुटियों को रनटाइम पर रोका जाता है और वे बहुत कम अंतर्निहित प्रकार परिवर्तन करते हैं, लेकिन ये भाषाएँ स्थिर प्रकार की जाँच का कोई उपयोग नहीं करती हैंः संकलक प्रकार बाधा नियमों की जाँच या उन्हें लागू नहीं करता है। बतख टाइपिंग शब्द का उपयोग अब इस समूह की भाषाओं द्वारा उपयोग किए जाने वाले गतिशील टाइपिंग प्रतिमान का वर्णन करने के लिए किया जाता है। भाषाओं के लिस्प परिवार को इस अर्थ में "दृढ़ता से टाइप" किया जाता है कि रनटाइम पर टाइपिंग त्रुटियों को रोका जाता है। कुछ लिस्प बोलियाँ जैसे कॉमन लिस्प या क्लोजर प्रकार घोषणाओं के विभिन्न रूपों का समर्थन करती हैं और कुछ संकलक (सीएमयू कॉमन लिस्प (सीएमयूसीएल) और संबंधित) विभिन्न अनुकूलन और संकलन समय प्रकार जांच के सीमित रूपों को सक्षम करने के लिए प्रकार अनुमान के साथ इन घोषणाओं का उपयोग करते हैं। मानक एमएल, एफ #, ओसीएएमएल, हास्केल, गो और रस्ट को स्थिर रूप से टाइप-चेक किया जाता है, लेकिन संकलक स्वचालित रूप से अधिकांश मूल्यों के लिए एक सटीक प्रकार का अनुमान लगाता है। विधानसभा भाषा और फोर्थ को अप्रचलित के रूप में वर्णित किया जा सकता है। कोई प्रकार जाँच नहीं है; यह सुनिश्चित करना प्रोग्रामर पर निर्भर करता है कि कार्यों को दिया गया डेटा उपयुक्त प्रकार का है। किसी भी प्रकार के रूपांतरण की आवश्यकता स्पष्ट है। प्रोग्रामिंग भाषाओं की तुलना भी देखें डेटा प्रकार में टाइपिंग मुद्दों की अधिक गहन चर्चा शामिल है अनुबंध द्वारा डिजाइन (अंतर्निहित अनुबंध रूप के रूप में मजबूत टाइपिंग) अव्यक्त टाइपिंग स्मृति सुरक्षा प्रकार सुरक्षा प्रकार प्रणाली मजबूत-टाइप पहचानकर्ता संदर्भ प्रकार प्रणाली