2013-06-12 1 views
10

मैंने विकी पेज http://en.wikipedia.org/wiki/Strong_and_weak_typing सहित कई पेज पढ़े हैं जिनमें दृढ़ता से और कमजोर टाइप की गई भाषाएं हैं। अधिकांश भाग के लिए, मुझे लगता है कि मैं अंतर समझता हूं। हालांकि, मैं दोनों को अलग करने के लिए सीधे बिंदु के जवाब देना चाहता हूं।दृढ़ता से और कमजोर टाइप की गई भाषाओं के बीच अंतर?

मेरी समझ से, कमजोर टाइप की गई भाषाओं में, डेटा प्रकारों को स्पष्ट रूप से कॉल नहीं किया जाना चाहिए। यह मैटलैब जैसी भाषा होगी जहां आप टाइपकास्ट किए बिना 4 और 2.3 जोड़ सकते हैं। मजबूत टाइप की गई भाषाओं को प्रोग्रामर को प्रत्येक चर और/या मान के लिए डेटा प्रकार घोषित करने की आवश्यकता होती है। उदाहरण के लिए सी में, आपको 4 + (int) 2.3 या (फ्लोट) 4 + 2.3 जैसे कुछ करने की आवश्यकता होगी (याद नहीं किया जा सकता है कि यह वैध सी प्रकार-कास्टिंग है)।

इन अवधारणाओं की मेरी समझ को बढ़ाने या सुधारने वाली कोई भी जानकारी बहुत सराहना की जाएगी।

+0

मुझे आश्चर्य है कि इस सवाल का कहीं लिए सही विकल्प [सैद्धांतिक कंप्यूटर की तरह हो सकता है अगर विज्ञान] (http://cstheory.stackexchange.com/) या [प्रोग्रामर] (http://programmers.stackexchange.com/) ...? – summea

+0

हाँ, मुझे यकीन नहीं था कि इसे कहां रखा जाए। मैं इसे जोड़ दूंगा। – Josh

+0

सी में एक 'फ्लोट' में 'int' जोड़ने के लिए पूरी तरह से कानूनी है। –

उत्तर

8

एरिक लिपर्ट के ब्लॉग आउट की जांच करें। here के लिए आप जो खोज रहे हैं उसके बारे में एक प्रविष्टि है।

अपने ब्लॉग के दिखने से, ये शर्तें व्यक्तिपरक हैं, इसलिए "सिस्टम सिस्टम सुविधाओं के बारे में अधिक सटीक बात करें।"

2

जैसा कि आपने कहा था ... ... कमजोर टाइप की गई भाषाओं में, डेटा प्रकारों को स्पष्ट रूप से कॉल नहीं किया जाना चाहिए।

मजबूत टाइप की गई भाषाओं को प्रोग्रामर को प्रत्येक चर और/या मान के लिए डेटा प्रकार घोषित करने की आवश्यकता होती है।

यह सही है ...

वहाँ भी प्रतिमान का एक प्रकार सी # की तरह तथाकथित "दृढ़ता से" टाइप किया भाषाओं में जिसमें प्रकार यदि आवश्यक हो तो घोषित किया जा सकता है या करना चाहता था प्रोग्रामर द्वारा है ... जैसे सी # में "var" प्रकार है, लेकिन इसमें मजबूत प्रकार भी हैं (Int32, स्ट्रिंग, बूलियन, आदि) जो इस प्रोग्राम का उपयोग करने वाले कई प्रोग्रामर पसंद करते हैं।

इस तरह एक भाषा दोनों "दृढ़ता" और "कमजोर" टाइप की जा सकती है।

मुझे आशा है कि इस मदद करता है इस अवधारणा के बारे में अपनी समझ को आगे ...

+1

ध्यान दें कि सी # में var चर के "स्ट्रिंग" टाइपिंग को बनाए रखता है। प्रकार का नाम isn – dlev

22

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

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

ध्यान दें कि हर जगह टाइप घोषणाओं की आवश्यकता के बिना दृढ़ता से टाइप की गई भाषा होना संभव है। वास्तव में, कोई दृढ़ता से टाइप की गई भाषा नहीं करता है। Java के इस बिट पर विचार करें:

String s = "hellO"; 
int l = s.getBytes().length; 

संकलक कैसे तय करता है कि .length वहाँ कानूनी है? यह कानूनी है क्योंकि इसका उपयोग byte[] पर किया जा रहा है। लेकिन यहां byte[] होने के नाते कुछ भी घोषणा नहीं है।इसके बजाय, संकलक जानता है कि s एक String है, और जब आप पर पर कॉल करते हैं, तो आपको byte[] मिलता है। यह उन तथ्यों से अनुमान लगाता है कि s.getBytes() का प्रकार byte[] है, और इसलिए length के लिए पूछना कानूनी है।

कुछ भाषा जिनके प्रकार सिस्टम जावा की तुलना में अधिक परिष्कृत हैं, संकलक को इससे अधिक अनुमान लगाने की अनुमति देते हैं। उदाहरण के लिए, स्काला में, आप कह सकते हैं:

val s = "hello" 
val l = s.getBytes().length 

और संकलक s और l के प्रकार का अनुमान लगा होगा मध्यवर्ती अभिव्यक्ति के रूप में भी,।

बोली जो मजबूत टाइपिंग लेकिन प्रकार निष्कर्ष पर कृत्रिम सीमाओं जो अनावश्यक प्रकार घोषणाओं (जावा) की तरह की आवश्यकता है, प्रकट टाइपिंग के रूप में वर्णित किया जाता है क्योंकि प्रकार जो स्पष्ट रूप से लाया कह का एक आधुनिक तरीका है प्रकट किया जाना चाहिए, अस्तित्व में, जो लिखित कहने का एक शानदार तरीका है।

+1

मजबूत/कमजोर टाइपिंग स्थिर/गतिशील टाइपिंग के लिए ऑर्थोगोनल है। उदाहरण के लिए, रूबी प्रकार प्रणाली मजबूत और गतिशील है। – ComDubh

0

एक दृढ़ता से टाइप की गई भाषा एक ऑपरेशन करने से पहले एक चर के प्रकार की जांच करती है, जबकि एक कमजोर टाइप की गई भाषा नहीं होती है।

उदाहरण के लिए: जावा (दृढ़ता से टाइप किया भाषा):

int i = 10; 
boolean b = true; 
System.out.println(i + b); //compile error. Can't add int with boolean 

सी (दुर्बलता से टाइप किया भाषा):

int i = 10; 
bool b = true; 
printf("%d" i + b); //Prints 11 
संबंधित मुद्दे