क्यों कमजोर-टाइप की गई भाषाओं को अभी भी सक्रिय रूप से विकसित किया जा रहा है?


17

मुझे आश्चर्य है कि क्यों कमजोर-टाइप की गई भाषाएँ अभी भी सक्रिय रूप से विकसित हो रही हैं। उदाहरण के लिए, किसी को लिखने में सक्षम होने से क्या लाभ हो सकता है

$someVar = 1;
(...)  // Some piece of code
$someVar = 'SomeText';

इसके बजाय बहुत अलग, stongly- टाइप संस्करण का उपयोग कर

int someInt = 1;
(...)
string SomeString = 'SomeText';

यह सच है कि आपको दूसरे उदाहरण में एक अवशिष्ट चर घोषित करने की आवश्यकता है, लेकिन क्या इससे वास्तव में चोट लगी है? सभी भाषाओं को दृढ़ता से टाइप करने का प्रयास नहीं करना चाहिए क्योंकि यह संकलन के समय टाइप-सेफ्टी को लागू करता है, इस प्रकार टाइप-कास्टिंग में कुछ नुकसान से बचता है?


9
"दृढ़ता से टाइप किया गया" एक अच्छी तरह से परिभाषित शब्द नहीं है। अधिकतर इसका मतलब है कि "आप टाइप सिस्टम को हटा नहीं सकते हैं"। यह वही है जो आप ऊपर वर्णित करते हैं जो अव्यक्त बनाम प्रकट टाइपिंग, या स्थिर बनाम डायनामिक टाइपिंग हो सकता है।
फ्रैंक शीयर

10
मुझे क्या याद आ रहा है जो इसे वैधता से कई निकट से संबंधित है, यकीनन डुप्लिकेट, प्रश्नों (सिर्फ अपने टैग में स्थैतिक और गतिशील टाइपिंग का उल्लेख करने वाले प्रश्नों के लिए खोज) के साथ लौकिक प्रश्न करने के लिए?

1
सांख्यिकीय रूप से और गतिशील रूप से टाइप की गई भाषाओं दोनों के लिए फायदे और कमियां हैं। गतिशील रूप से टाइप की गई भाषाएं तेजी से विकास या प्रोटोटाइप के लिए खुद को अच्छी तरह से उधार देती हैं (इसलिए कारण "स्क्रिप्टिंग भाषाएं आमतौर पर गतिशील रूप से टाइप की जाती हैं), जबकि सांख्यिकीय रूप से टाइप की गई भाषाएं (यकीनन) बड़े, जटिल प्रोजेक्ट्स में बढ़ने और बनाए रखने में आसान होती हैं।
चार्ल्स साल्विया

6
पहला उदाहरण पायथन जैसा है, जहां चर का कोई घोषित प्रकार नहीं है। हालाँकि, पायथन एक बहुत ही दृढ़ता से टाइप की जाने वाली भाषा है क्योंकि वस्तुएं - अपने आप में - एक ऐसा प्रकार है जिसे बदलना या बदलना लगभग असंभव है। मुझे लगता है कि शब्दावली का दुरुपयोग इस सवाल का जवाब देने के लिए बहुत कठिन बनाता है।
S.Lott

1
@delnan तथ्य यह है कि यह प्रश्न दो उचित उत्तर देता है और एक लौ युद्ध में मदद नहीं करता है।
एडम लेअर

जवाबों:


25

मजबूत / कमजोर टाइपिंग और स्टैटिक / डायनामिक टाइपिंग ऑर्थोगोनल है।

मजबूत / कमजोर इस बारे में है कि क्या मूल्य का प्रकार मायने रखता है, कार्यात्मक रूप से बोल रहा है। एक कमजोर टाइप की गई भाषा में, आप दो तार ले सकते हैं जो अंकों से भरे जाते हैं और उन पर पूर्णांक जोड़ते हैं; एक जोरदार टाइप की गई भाषा में, यह एक त्रुटि है (जब तक कि आप मूल्यों को पहले प्रकारों में नहीं डालते या परिवर्तित नहीं करते हैं)। मजबूत / कमजोर टाइपिंग एक काली और सफेद चीज नहीं है; अधिकांश भाषाएं न तो 100% सख्त हैं और न ही 100% कमजोर हैं।

स्टैटिक / डायनेमिक टाइपिंग के बारे में है कि क्या प्रकार मानों या पहचानकर्ताओं से बंधते हैं। गतिशील रूप से टाइप की गई भाषा में, आप किसी भी चर के लिए किसी भी मूल्य को निर्दिष्ट कर सकते हैं, चाहे वह किसी भी प्रकार का हो; स्टैटिक टाइपिंग हर पहचानकर्ता के लिए एक प्रकार को परिभाषित करता है, और एक अलग प्रकार से असाइन करना या तो एक त्रुटि है, या इसका परिणाम निहितार्थ होता है। कुछ भाषाएं एक हाइब्रिड दृष्टिकोण लेती हैं, जो सांख्यिकीय रूप से घोषित प्रकारों के साथ-साथ अनछुए पहचानकर्ताओं ('संस्करण') के लिए अनुमति देता है। टाइप इंट्रेंस भी है, एक ऐसा मैकेनिज्म जिसमें स्टैटिक टाइपिंग हर चीज के प्रकार को स्पष्ट रूप से घोषित किए बिना संभव है, कंपाइलर के प्रकारों का पता लगाकर (हास्केल इस का बड़े पैमाने पर उपयोग करता है, C # varकीवर्ड के माध्यम से इसे उजागर करता है )।

कमजोर गतिशील प्रोग्रामिंग एक व्यावहारिक दृष्टिकोण के लिए अनुमति देता है; भाषा ज्यादातर समय आपके रास्ते में नहीं आती है, लेकिन जब आप पैर में अपने आप को शूट कर रहे होते हैं तो यह कदम नहीं उठाएगा। इसके विपरीत, मजबूत स्थैतिक टाइपिंग, प्रोग्रामर को कोड में मूल्यों के बारे में कुछ उम्मीदों को स्पष्ट रूप से व्यक्त करने के लिए धक्का देती है, इस तरह से कंपाइलर या दुभाषिया को त्रुटियों की एक श्रेणी का पता लगाने की अनुमति देता है। एक अच्छी प्रकार की प्रणाली के साथ, एक प्रोग्रामर वास्तव में परिभाषित कर सकता है कि एक मूल्य के लिए क्या किया जा सकता है और क्या नहीं किया जा सकता है, और यदि दुर्घटना से, कोई व्यक्ति किसी चीज़ को अवांछित रूप से आज़माता है, तो टाइप सिस्टम अक्सर इसे रोक सकता है और यह दिखा सकता है कि चीजें कहाँ और क्यों गलत हैं।


हाइपरटेक की तरह एक उचित रूप से कमजोर टाइप की गई भाषा में, स्ट्रिंग समंजन और परिवर्धन के लिए अलग-अलग संचालकों के साथ (जैसे समवर्ती के लिए मान &), कोई अस्पष्टता जैसे ऑपरेशन "12"+3या 45 & "6"पोज़ (वे क्रमशः 15 और "456" की गणना करते हैं)। अधिक दृढ़ता से टाइप की जाने वाली भाषा में, "+" ऑपरेटर को अस्पष्टता पैदा किए बिना दोनों स्ट्रिंग संयोजन और संख्यात्मक जोड़ के लिए सुरक्षित रूप से अतिभारित किया जा सकता है क्योंकि स्ट्रिंग्स और संख्याओं पर संचालन निषिद्ध होगा। समस्या तब उत्पन्न होती है जब भाषा नाखूनों को न तो नीचे टाइप करती है और न ही संचालन करने के लिए।
सुपरकैट

4

कमजोर टाइपिंग की तर्ज पर अधिक है 1 == "TRUE"विकिपीडिया पर यह खंड अंतर को स्पष्ट करता है।

कृपया ध्यान दें कि विकिपीडिया से कोई भी उदाहरण सांख्यिकीय रूप से टाइप नहीं किया गया है, जिसे आप अपने दूसरे उदाहरण में संदर्भित करते हैं।

इसलिए यदि प्रश्न यह है कि लोग गतिशील रूप से टाइप की जाने वाली भाषाओं का उपयोग क्यों करते हैं, तो इसका उत्तर है: स्थैतिक प्रकार सिस्टम आप पर सीमाएं लगाते हैं। बहुत से लोगों ने कभी भी एक अभिव्यंजक स्थिर प्रकार की प्रणाली के साथ काम नहीं किया है, जो उन्हें इस निष्कर्ष पर पहुंचाता है कि स्थैतिक टाइपिंग के नुकसान लाभों से आगे निकल जाते हैं।


0

कमजोर प्रकार की भाषाओं को अभी भी विकसित किया जा रहा है क्योंकि लोग उनका उपयोग करते हैं और उन्हें पसंद करते हैं। यदि आपको कमजोर टाइपिंग पसंद नहीं है, तो कमजोर टाइप की भाषाओं का उपयोग न करें। यह घोषणा करते हुए कि द वन ट्रू वे है और हर किसी को यह करना चाहिए, यह एक सच्चा तरीका है, जो दुनिया की जटिलता को नजरअंदाज करता है।


0

सभी भाषाओं को दृढ़ता से टाइप करने का प्रयास नहीं करना चाहिए क्योंकि यह संकलन के समय टाइप-सेफ्टी को लागू करता है, इस प्रकार टाइप-कास्टिंग में कुछ नुकसान से बचता है?

जरुरी नहीं। लर्निंग ऑब्जेक्टिव-सी: एक प्राइमर एड्रेस करता है जो सीधे ऑब्जेक्टिव-सी के संदर्भ में प्रश्न करता है:

कमजोर टाइप किए गए चर को अक्सर संग्रह कक्षाओं जैसी चीजों के लिए उपयोग किया जाता है, जहां किसी संग्रह में सटीक प्रकार की वस्तुएं अज्ञात हो सकती हैं। यदि आप दृढ़ता से टाइप की गई भाषाओं का उपयोग करने के लिए उपयोग किए जाते हैं, तो आप सोच सकते हैं कि कमजोर टाइप किए गए चर का उपयोग समस्याओं का कारण होगा, लेकिन वे वास्तव में जबरदस्त लचीलापन प्रदान करते हैं और उद्देश्य-सी कार्यक्रमों में बहुत अधिक गतिशीलता के लिए अनुमति देते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.