मैंने हमेशा इसे एक सुविधा के रूप में अधिक देखा है, इस बारे में कि क्या एल्गोरिथ्म बिल्कुल भी व्यक्त नहीं किया जा सकता है। अगर मैं वास्तव में मिशेल के वंचित होने जैसे कार्यक्रमों को चलाना चाहता था, तो मैं अपनी सांख्यिकीय टाइपिंग भाषा में उचित ट्यूरिंग मशीन सिम्युलेटर लिखूंगा।
स्थैतिक प्रकार प्रणाली के साथ चाल सिर्फ उन मामलों के लिए सही प्रकार के लचीलेपन की पेशकश करने के लिए है जहां लचीलापन आपको कोड लिखने की अनुमति देता है जो अधिक आसानी से संभव है।
यहां प्रोग्राम स्ट्रक्चरिंग तकनीकों के कुछ उदाहरण दिए गए हैं, जिन्हें कभी-कभी सांख्यिकीय रूप से टाइप की गई भाषाओं की तुलना में गतिशील रूप से प्रबंधित करना आसान माना जाता है।
जेनरिक और कंटेनर
एमएल (सी। 1973) और सीएलयू (सी। 1974) से पहले सांख्यिकीय रूप से टाइप की गई भाषाओं में , स्ट्रिंग्स का लाल-काला पेड़, पूर्णांक का लाल-काला पेड़, तैरने का लाल-काला पेड़, या विशिष्ट प्रकार के तत्वों का लाल-काला पेड़ Foo
। हालाँकि, यह मुश्किल था (शायद असंभव) कि लाल-काले पेड़ का एक भी क्रियान्वयन बनाया जा सके, जो कि सांख्यिकीय रूप से जाँच किया गया था और जो इन डेटा प्रकारों में से किसी एक को संभाल सकता था। समस्या के आसपास के तरीके (1) प्रकार की प्रणाली से पूरी तरह से बाहर निकलने के लिए थे (उदाहरण के लिए: उपयोग करकेvoid *
सी में), (2) अपने आप को किसी प्रकार के मैक्रो प्रीप्रोसेसर लिखने के लिए और फिर मैक्रोज़ लिखें जो आपके द्वारा वांछित प्रत्येक विशिष्ट प्रकार के लिए कोड का उत्पादन करता है या (3) निकाले गए प्रकार की जांच के लिए लिस्प / स्मॉलटाक (और जावा) दृष्टिकोण का उपयोग करता है। गतिशील रूप से वस्तु।
ML और CLU ने क्रमशः, अनुमानित और स्पष्ट रूप से घोषित (स्थिर) पैरामीटर प्रकारों की धारणा पेश की, जो आपको सामान्य, स्टेटिक रूप से टाइप किए गए, कंटेनर प्रकार लिखने की अनुमति देते हैं।
उप-प्रकार बहुरूपता
Simula67 (c। 1967) और होप (c। 1977) से पहले सांख्यिकीय रूप से टाइप की गई भाषाओं में, यह संभव नहीं है कि दोनों डायनामिक प्रेषण करें और स्टेटिकली चेक करें कि आपने हर उपप्रकार के लिए केस कवर किया था। कई भाषाओं में टैग की गई यूनियनों के कुछ रूप थे , लेकिन यह प्रोग्रामर की जिम्मेदारी थी कि वे यह सुनिश्चित करें कि उनके case
या switch
बयानों, या उनके जंप टेबल, हर संभव टैग को कवर करें।
सिमूला मॉडल (C ++, जावा, C #, एफिल) के बाद की भाषाएं उपवर्ग के साथ सार कक्षाएं प्रदान करती हैं, जहां कंपाइलर यह जांच सकता है कि प्रत्येक उपवर्ग ने मूल वर्ग द्वारा घोषित सभी विधियों को लागू किया है। होप मॉडल (सभी एमएल वेरिएंट, एसएमएल / एनजे से हास्केल के माध्यम से) के बाद की भाषाओं में बीजीय उपप्रकार हैं, जहां कंपाइलर जांच कर सकता है कि हर typecase
बयान में सभी उपप्रकार शामिल हैं।
बंदर पैचिंग और पहलू ओरिएंटेड प्रोग्रामिंग
डायनामिक टाइप सिस्टम विभिन्न प्रकार की प्रोटोटाइप तकनीकों को बहुत आसान बनाते हैं। उन भाषाओं में जहाँ प्रकारों को स्ट्रिंग से फंक्शन्स के लिए हैश मैप्स द्वारा दर्शाया जाता है (जैसे, पायथन, जावास्क्रिप्ट, रूबी) विश्व स्तर पर हर मॉड्यूल के व्यवहार को बदलना काफी आसान है, जो एक विशेष प्रकार पर निर्भर करता है, बस गतिशील रूप से हैश मैप को संशोधित करके प्रतिनिधित्व करता है। प्रकार।
हालांकि बंदर के पेटिंग के कार्यक्रमों को बनाए रखने के लिए कठिन तरीके का उपयोग किया जा सकता है, लेकिन ऐसे तरीके भी हैं, जिनका उपयोग वास्तव में "बुराई" के बजाय "अच्छे" के लिए किया जा सकता है। विशेष रूप से पहलू उन्मुख प्रोग्रामिंग के साथ बंदर-पैचिंग का उपयोग तकनीकों की तरह कर सकते हैं जैसे कि वर्चुअलाइज्ड फाइल सिस्टम को इंगित करने के लिए फ़ाइल प्रकार को संशोधित करने के लिए, "फ्री" के लिए यूनिट-टेस्टिंग इन्फ्रास्ट्रक्चर के निर्माण की अनुमति देना, या सरल अपवाद प्रकारों को संशोधित करना ताकि वे हर बार बेहतर डिबगैबिलिटी के लिए पकड़े गए लॉग संदेश को प्रिंट करें।
1970 के दशक में जेनेरिक और सबटाइप पॉलीमॉर्फिज्म के विपरीत, जहाँ प्रमुख स्थैतिक जाँच विचार उपलब्ध थे, पहलू उन्मुख प्रोग्रामिंग के लिए स्थैतिक जाँच एक सक्रिय शोध क्षेत्र है। मैं इसके बारे में ज्यादा नहीं जानता, सिवाय इसके कि 2001 के बाद से एस्पेक्टज नामक एक भाषा है ।