क्या C दृढ़ता से टाइप किया गया है?


87

विकिपीडिया को उद्धृत करने के लिए :

दो आमतौर पर इस्तेमाल की जाने वाली भाषाएं जो कई प्रकार के निहितार्थ का समर्थन करती हैं, C और C ++ हैं, और कभी-कभी यह दावा किया जाता है कि ये कमजोर टाइप की भाषाएं हैं। हालांकि, अन्य लोगों का तर्क है कि ये भाषाएं विभिन्न प्रकार के ऑपरेंड को कैसे मिलाया जा सकता है, इस पर पर्याप्त प्रतिबंध लगाती हैं कि दोनों को दृढ़ता से टाइप की जाने वाली भाषा माना जाना चाहिए।

क्या अधिक निश्चित उत्तर है?


188
C प्रोग्रामर के लिए मजबूत टाइपिंग का मतलब है कि चाबी को जोर से दबाना।
डैन डायर

2
C टाइपिंग सातत्य में कमजोर पक्ष पर है। लेकिन दोनों तरफ पर्याप्त आइटम हैं कि आप किसी भी तरह से बहस कर सकते हैं। जब आप इस पर हो तो आप पूछ सकते हैं (vi या emacs, netbeans या ग्रहण, आदि)
Cervo

4
विकिपीडिया पर खेलने की स्थिति इतनी खराब थी कि मुझे कई विकिपीडिया पृष्ठों को संपादित करने के लिए मजबूर होना पड़ा। शायद चीजें अब थोड़ी बेहतर हैं। शायद।
नॉर्मन रैमसे

40
पुन: डैन की टिप्पणी (जहां यह देय है, इसे देने के लिए) पीटर वैन डेर लिंडेन की पुस्तक "एक्सपर्ट सी प्रोग्रामिंग" में निम्नलिखित पंक्ति है: "इस दिन के लिए, कई सी प्रोग्रामर मानते हैं कि 'मजबूत टाइपिंग का मतलब है कि कीबोर्ड पर अतिरिक्त हार्ड पाउंडिंग।"
अलेक्जेंड्रोस जिजेरलिस 6

बहुत अच्छा सवाल !!!
विध्वंसक

जवाबों:


154

"दृढ़ता से टाइप किया गया" और "कमजोर रूप से टाइप किया गया" ऐसे शब्द हैं जिनका कोई व्यापक रूप से सहमत-तकनीकी अर्थ नहीं है। ऐसे शब्द जो एक अच्छी तरह से परिभाषित अर्थ रखते हैं

  • डायनामिक रूप से टाइप करने का अर्थ है कि प्रकार रन टाइम पर मानों से जुड़े होते हैं, और विभिन्न प्रकार के मूल्यों को मिलाने का प्रयास "रन-टाइम टाइप त्रुटि" हो सकता है। उदाहरण के लिए, यदि स्कीम में आप इसे लिखकर (+ 1 #t)किसी एक को जोड़ने का प्रयास करते हैं तो यह एक त्रुटि का कारण होगा। आप त्रुटि का सामना तभी करते हैं जब आप अपमानजनक कोड को निष्पादित करने का प्रयास करते हैं।

  • स्टेटिकली टाइप्ड का मतलब है कि कंपाइल समय पर टाइप्स की जाँच की जाती है और एक प्रोग्राम जिसमें स्टैटिक टाइप नहीं होता है उसे कंपाइलर द्वारा अस्वीकार कर दिया जाता है। उदाहरण के लिए, यदि एमएल में आप लिखकर एक को जोड़ने का प्रयास करते हैं 1 + true, तो प्रोग्राम को एक (शायद गुप्त) त्रुटि संदेश के साथ खारिज कर दिया जाएगा। यदि कोड को कभी भी निष्पादित नहीं किया जा सकता है तो भी आपको हमेशा त्रुटि मिलती है।

अलग-अलग लोग भाग के अनुसार अलग-अलग प्रणालियों को पसंद करते हैं कि वे लचीलेपन को कितना महत्व देते हैं और रन-टाइम त्रुटियों के बारे में कितनी चिंता करते हैं।

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

इनमें से कोई भी शब्द किसी भी भाषा में उपलब्ध निहित रूपांतरणों की संख्या के साथ किसी भी तरह से जुड़ा नहीं है।

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

मैंने स्थैतिक और डायनामिक टाइपिंग के बारे में अधिक क्यों-व्याख्या-लैंग्स-ऐंड-डकटिपेड-ए-संकलित-पास-मजबूत-टाइपिंग के बारे में लिखा है ।


2
आपको मजबूत / कमजोर टाइपिंग (खामियों को दूर करने) के लिए आपके द्वारा सुझाई गई परिभाषाएँ कहाँ से मिलीं?
सेडियस

2
डायनामिक टाइपिंग वातावरण में आपको "लूपहोल" की आवश्यकता क्यों होगी?
क्रिस कॉनवे

4
@ साइडियस: पिछले 20 वर्षों के अधिकांश खर्चों से, प्रोग्रामिंग भाषाओं और प्रकार प्रणालियों के डिजाइन, निर्माण और विश्लेषण करने वाले लोगों के साथ घूमना। यह मेरा भुगतान किया हुआ काम है :-)
नॉर्मन रैमसे

@ क्रिस: मैंने 'लोफोल' के साथ कभी डायनामिक टाइप की गई भाषा नहीं देखी। खामियों का आम उपयोग रन-टाइम सिस्टम या ओएस के साथ काम करना है, उदाहरण के लिए, एक कच्चा पता लें और इसे सूचक को एक अच्छी तरह से व्यवहार किए गए भाषा मूल्य में परिवर्तित करें। आप इसे एक गतिशील सेटिंग में कर सकते हैं लेकिन मुझे किसी भी प्रयास का पता नहीं है।
नॉर्मन रैमसे

1
@NormanRamsey मुझे लगता है कि क्रिस अपने प्रश्न का उल्लेख कर रहे थे:whereas "weakly typed" means "there are loopholes in the type system
Nir Alfasi

23

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

लेकिन कुछ कमजोरियां हैं। एक बड़ी कमजोरी टाइपकास्ट है - वे अनिवार्य रूप से कहते हैं कि आप वस्तुओं के प्रकारों के साथ घूमने जा रहे हैं, और कंपाइलर को शांत होना चाहिए (जब यह हो सकता है)। void*एक अन्य कमजोरी भी है - यह एक अज्ञात प्रकार के लिए एक सामान्य सूचक है, और जब आप उनका उपयोग करते हैं, तो आपको अतिरिक्त सावधानी बरतनी होगी कि आप सही काम कर रहे हैं। संकलक सांख्यिकीय रूप से अधिकांश उपयोगों की जांच नहीं कर सकता void*void*किसी भी प्रकार के बिना (केवल C, C ++ में नहीं), जो कि एक और कमजोरी है, को एक सूचक में परिवर्तित किया जा सकता है।


अच्छा जवाब, हालांकि "टाइपकास्ट ... और कंपाइलर शांत होना चाहिए" मुझे परेशान करता है। टाइपकास्ट एक चेतावनी को बंद करने जैसा नहीं है, यह वास्तव में संदर्भित किए जा रहे मूल्य की व्याख्या को बदल देता है।
टॉल जेफ

15
आप टाइपिंग के संबंध में "स्थिर" और "मजबूत" भ्रमित कर रहे हैं। ये दोनों अवधारणाएं एक-दूसरे से स्वतंत्र हैं।
बेंडिन

1
डेनिस रिची (C लेखक) ने C को 'दृढ़ता से टाइप किया और कमजोर रूप से जांचा' कहा
टिमज़मैन

11

साहित्य इस बारे में स्पष्ट नहीं है। मुझे लगता है कि दृढ़ता से टाइप किया गया हां / नहीं है, मजबूत टाइपिंग की अलग-अलग डिग्री हैं।

एक प्रोग्रामिंग भाषा का एक विनिर्देश है कि यह कैसे कार्यक्रमों को निष्पादित करता है। कभी-कभी यह स्पष्ट नहीं है कि कुछ कार्यक्रमों के साथ कैसे निष्पादित किया जाए। उदाहरण के लिए, प्रोग्राम जो एक संख्या से एक स्ट्रिंग को घटाने की कोशिश करते हैं। या ऐसे कार्यक्रम जो शून्य से विभाजित होते हैं। इन स्थितियों से निपटने के कई तरीके हैं। कुछ भाषाओं में इन त्रुटियों से निपटने के लिए नियम हैं (उदाहरण के लिए वे एक अपवाद फेंकते हैं)। अन्य भाषाओं में इन स्थितियों से निपटने के लिए नियम नहीं हैं। उन भाषाओं में आमतौर पर कंपाइलिंग प्रोग्राम को रोकने के लिए टाइप सिस्टम होते हैं जो अनिर्दिष्ट व्यवहार की ओर ले जाते हैं। और ऐसी भाषाएं भी मौजूद हैं जिनके पास अनिर्दिष्ट व्यवहार है और संकलन समय पर इन त्रुटियों को रोकने के लिए एक प्रकार की प्रणाली नहीं है (यदि आप एक प्रोग्राम लिखते हैं जो अनिर्दिष्ट व्यवहार को हिट करता है तो यह मिसाइलों को लॉन्च कर सकता है)।

इसलिए:

वे भाषाएँ जो हर मामले में रनटाइम पर होती हैं (जैसे कि एक संख्या को स्ट्रिंग में जोड़ना) को गतिशील रूप से टाइप किया जाता है। संकलन समय पर त्रुटियों वाले कार्यक्रमों को निष्पादित करने से रोकने वाली भाषाएँ सांख्यिकीय रूप से टाइप की जाती हैं। ऐसी भाषाएं जो निर्दिष्ट नहीं करती हैं कि क्या होती हैं और त्रुटियों को रोकने के लिए एक प्रकार की व्यवस्था नहीं होती है, जिन्हें कमजोर रूप से टाइप किया जाता है।

तो जावा सांख्यिकीय रूप से टाइप किया गया है? हां, क्योंकि इसकी प्रकार प्रणाली एक संख्या से एक स्ट्रिंग को घटाती है। नहीं, क्योंकि यह आपको शून्य से विभाजित करने की अनुमति देता है। आप एक प्रकार की प्रणाली के साथ संकलन समय पर शून्य से विभाजन को रोक सकते हैं। उदाहरण के लिए एक संख्या प्रकार बनाकर जो शून्य नहीं हो सकता है (जैसे नॉनजेरोइंट), और केवल उन संख्याओं को विभाजित करने की अनुमति दें जिनके पास यह प्रकार है।

तो क्या C दृढ़ता से टाइप किया गया है या कमजोर टाइप किया गया है? C दृढ़ता से टाइप किया जाता है क्योंकि प्रकार प्रणाली कुछ प्रकार की त्रुटियों को रोकती है। लेकिन यह कमजोर रूप से अन्य मामलों में टाइप किया जाता है जब यह अपरिभाषित होता है (और प्रकार प्रणाली आपकी सुरक्षा नहीं करती है)।


मुझे मजबूत, बनाम कमजोर के रूपों के रूप में गतिशील और स्थिर के अपने संरेखण को पसंद है। हालाँकि, मुझे यकीन नहीं है कि मैं आपकी बात को वैधानिक रूप से टाइप की गई प्रणालियों के बारे में बताता हूँ जो शून्य से विभाजित होती हैं। अगर मेरे स्टेटिकली टाइप किए गए intयूज़र या कमांड लाइन के तर्कों या किसी फ़ाइल से कोई वैल्यू मिलती है, तो ऐसा कुछ भी नहीं है जिसे कंपाइलर शून्य होने से रोक सके!
रिक्की

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

11

सी को कमजोर रूप से टाइप करने के लिए माना जाता है, क्योंकि आप एक कंपाइलर त्रुटि के बिना किसी भी प्रकार को किसी अन्य प्रकार के कलाकारों के माध्यम से परिवर्तित कर सकते हैं। आप समस्या के बारे में अधिक पढ़ सकते हैं यहाँ


2
विकिपीडिया यहाँ गुमराह कर रहा है। सी दृढ़ता से टाइप किया गया है, प्रकार बहुत मान्य हैं और कंपाइलर आपको गलत होने पर रोक देगा, हालांकि, सी आपको इसे बायपास करने के लिए सुविधाएँ भी प्रदान करता है। बीसीपीएल जैसी भाषाओं की तुलना में केवल एक 'बाइट' प्रकार है।
gbjbaanb

12
कमजोर टाइप का मतलब यह नहीं है कि कोई भाषा किसी भी प्रकार की नहीं होती है, इसका मतलब सिर्फ इतना है कि प्रकारों को एक प्रकार से दूसरे प्रकार में निहित किया जा सकता है। पायथन से तुलना करें, एक दृढ़ता से टाइप की गई भाषा जिसमें आपको फ़ंक्शन कॉल के साथ स्पष्ट रूप से प्रकार परिवर्तित करना होगा।
mipadi

सी में एक चीज डालने में सक्षम है यह भी एक कमजोर प्रकार होने में योगदान देता है। ?? मुझे हमेशा की तरह यह संदेह है
सूरज जैन

8

C जावास्क्रिप्ट से अधिक दृढ़ता से टाइप किया जाता है और Ada की तुलना में कम दृढ़ता से टाइप किया जाता है।

मैं कहूंगा कि यह निरंतरता के दृढ़ता से टाइप किए गए पक्ष में अधिक पड़ता है। लेकिन कोई और असहमत हो सकता है (भले ही वे गलत हों)।

कैसे निश्चित के लिए है?


यह कुछ हद तक जुबान-ए-गाल का जवाब था। लेकिन गलत पर विस्तार से बताएं।
माइकल बूर

1
जावास्क्रिप्ट दृढ़ता से टाइप किया गया है। यह सिर्फ सांख्यिकीय रूप से टाइप नहीं किया गया है। सभी प्रकार के चेक रनटाइम पर होते हैं (डायनेमिक, स्थिर नहीं) लेकिन वे होते हैं और क्या आपको मेमोरी (मजबूत टाइपिंग का एक पहलू) को दूषित करने से रोकते हैं।
bendin

5
खैर, जैसा कि नॉर्म राम्से का बहुत अच्छा जवाब इंगित करता है, "दृढ़ता से टाइप किया गया" और "कमजोर रूप से टाइप किया गया" विशेष रूप से अच्छी तरह से परिभाषित शब्द नहीं हैं। साथ ही, जहाँ तक जावास्क्रिप्ट को दृढ़ता से टाइप किया जा रहा है, कुछ का मानना ​​हो सकता है कि ("4" / ​​"2") एक मान्य जावास्क्रिप्ट अभिव्यक्ति है अन्यथा संकेत हो सकता है।
माइकल बूर

5

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

लेकिन इसे कमजोर रूप से टाइप किया जाता है क्योंकि प्रकार फ्लिप फ्लॉप हो सकते हैं।

0 क्या है? '\ 0', FALSE, 0.0, आदि।

कई भाषाओं में आप IF (चर) नहीं कह सकते हैं क्योंकि स्थितियां केवल बूलियन अभिव्यक्तियों से बूलियन मान लेगी। ये अधिक दृढ़ता से टाइप किए जाते हैं। यही बात पात्रों और पूर्णांकों के बीच जाने पर भी लागू होती है।

मूल रूप से c में दो मुख्य सरल डेटा प्रकार, पूर्णांक और फ्लोटिंग पॉइंट नंबर (हालांकि विभिन्न प्रिडिक्शन) हैं। बाकी सब कुछ बूलियन, एनम (सरल नहीं है, लेकिन यह फिट बैठता है), आदि उनमें से एक के रूप में कार्यान्वित किए जाते हैं। यहां तक ​​कि वर्ण मूल रूप से पूर्णांक हैं।

अन्य भाषाओं की तुलना में जहां स्ट्रिंग प्रकार हैं, एनम प्रकार जो केवल परिभाषित मूल्यों को सौंपा जा सकता है, बूलियन प्रकार जहां केवल अभिव्यक्ति जो बूलियन या सच / गलत उत्पन्न करते हैं, उनका उपयोग किया जा सकता है।

लेकिन आप तर्क दे सकते हैं कि पर्ल सी की तुलना में दृढ़ता से टाइप किया गया है। तो यह उन प्रसिद्ध तर्कों (vi बनाम emacs, linux vs windows इत्यादि) में से एक है। C #, C. की तुलना में अधिक मजबूत है। मूल रूप से आप किसी भी तरह से बहस कर सकते हैं। और आपके उत्तर संभवतः दोनों तरीके से जाएंगे :) इसके अलावा कुछ पाठ्यपुस्तकें / वेब पेज कहेंगे कि सी कमजोर रूप से टाइप किया गया है, और कुछ कहेंगे कि सी दृढ़ता से टाइप किया गया है। यदि आप विकिपीडिया पर जाते हैं तो सी प्रविष्टि "आंशिक रूप से कमजोर टाइपिंग" कहती है। मैं कहूंगा कि पायथन सी की तुलना में कमजोर रूप से टाइप किया गया है। तो पायथन / सी #, सी, पर्ल निरंतरता पर।


कृपया अपने तर्क से स्पष्ट करें कि Perl C से कम दृढ़ता से टाइप किया गया है
उपयोगकर्ता 51568

प्रिंट "परीक्षण" + 0 # पर्ल करेगा 0; $ var = "स्ट्रिंग"; $ var = 1; $ var = 123.4; यह किस प्रकार का चर है?
Cervo

सी चार में * परीक्षण = "परीक्षण"; प्रिंटफ (परीक्षण + 0); अभी भी एक स्ट्रिंग होगा, यह सिर्फ इतना है कि यदि मैं शून्य संख्या का उपयोग करता हूं तो सी में सूचकांक बदल जाएगा। यह अभी भी बहुत कमजोर है, लेकिन थोड़ा मजबूत है तो पर्ल। char * test; परीक्षण = 0; परीक्षण = 123.4; परीक्षण = "c"; ... मेरा संकलक त्रुटियां उत्पन्न करता है
Cervo

त्रुटि का कहना है कि एक कलाकारों की आवश्यकता है। फिर भी यह पर्ल की तुलना में एक प्रकार की जाँच से थोड़ा अधिक मजबूत है, इसलिए मुझे निरंतरता पर सी को पर्ल की तुलना में अधिक दृढ़ता से टाइप करना है। आप अभी भी परीक्षण = (चार *) जा सकते हैं और फिर 0, 123.4, 'सी', आदि का उपयोग कर सकते हैं। लेकिन यह सिर्फ इसे करने के लिए एक त्रुटि है।
Cervo

4

यहाँ बहुत अच्छे उत्तर हैं। मैं रियल वर्ल्ड हास्केल से एक महत्वपूर्ण बिंदु लाना चाहता हूं :

यह ध्यान रखना उपयोगी है कि कई भाषा समुदायों के पास "मजबूत प्रकार" की अपनी परिभाषा है। फिर भी, हम संक्षेप में और व्यापक रूप से टाइप सिस्टम में ताकत की धारणा के बारे में बात करेंगे।

(स्निप)

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

इसलिए, C और C ++ के उत्तरों को देखें, लेकिन याद रखें कि 'मजबूत' और 'कमजोर' 'अच्छे' और 'बुरे' के लिए मानचित्र नहीं बनाते हैं।


4

डेनिस रिची ( सी के निर्माता ) और ब्रायन कर्निघन के अनुसार, सी एक जोरदार टाइप की हुई भाषा नहीं है। निम्नलिखित लाइनें पुस्तक सी प्रोग्रामिंग भाषा के पेज 3 पैराग्राफ 5 से हैं

सी एक दृढ़ता से टाइप की जाने वाली भाषा नहीं है, लेकिन जैसा कि यह विकसित हुआ है, इसकी प्रकार की जाँच को मजबूत किया गया है।


3

मेरी राय में, C / C ++ दृढ़ता से टाइप किया जाता है। हैक के प्रकार जो कि प्रकारों को परिवर्तित करने की अनुमति देते हैं (शून्य *) मशीन के सी की निकटता के कारण हैं। दूसरे शब्दों में, आप पास्कल से असेंबलर कमांड को कॉल कर सकते हैं और पॉइंटर्स में हेरफेर कर सकते हैं और पास्कल को अभी भी एक मजबूत टाइप की गई भाषा माना जाता है। आप जेएनआई के माध्यम से जावा से कोडांतरक और सी निष्पादनयोग्य कह सकते हैं लेकिन यह जावा को कमजोर रूप से टाइप नहीं करता है।

C के पास सिर्फ कोडर है और उसमें कच्चे पॉइंटर्स के साथ "एम्बेडेड" है।


3

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

मेरे अनुभव में, "दृढ़ता से टाइप किया गया" और "कमजोर रूप से टाइप किया गया" शब्द विशेष रूप से उपयोग किए जाते हैं से ट्रॉल्स द्वारा , क्योंकि उनकी परिभाषा की कमी ट्रोल को उनके एजेंडे के अनुरूप मध्य-तर्क को फिर से परिभाषित करने की अनुमति देती है। फ़्लेमर शुरू करने के अलावा, ये शब्द बहुत ज्यादा बेकार हैं।

आप यह भी देखना चाहेंगे कि एक जोरदार टाइप की गई भाषा के प्रमुख पहलू क्या हैं? StackOverflow पर यहाँ।


3
मैं असहमत हूं। "दृढ़ता से टाइप किया गया" का अर्थ है कि डेटा प्रकार के मूल्य को निर्धारित करना संभव है, और केवल उस प्रकार के लिए उपयुक्त संचालन की अनुमति है। "डायनामिकली" और "स्टेटिकली" पता जब कि निर्धारण किया जा सकता है।
joel.neely

2
आपको यह अहसास कराने की कोशिश करने की विडंबना का एहसास है कि अभी तक एक और परिभाषा शुरू करने से कोई सहमत-परिभाषा नहीं है, है ना?
जोर्ग डब्ल्यू मित्तग

1
@ जोर्ग: एक दूसरे को पेश करने की कोशिश नहीं कर रहा है; आमतौर पर उन हलकों में इस्तेमाल किया जाता है जिनमें मैं चलती हूं।
joel.neely

1

"कमजोर टाइप" और "दृढ़ता से टाइप किया हुआ", दो शब्दों के बीच कई समानांतर रास्ते हैं, जो दो शब्दों में परिभाषित नहीं हैं।

C सांख्यिकीय रूप से टाइप किया गया है, जिसमें कंपाइलर जानता है कि प्रत्येक स्थानीय चर और संरचना सदस्य का घोषित प्रकार क्या है।

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


0

आपकी क्वेरी का कारण क्या है? मेरे द्वारा पूछे जाने का कारण यह मामूली अंतर है और "विशेष रूप से टाइप किए गए" के आपके विशेष उपयोग में अधिक या कम स्पष्टीकरण की आवश्यकता हो सकती है। मैं निश्चित रूप से कहूंगा कि जावा और अन्य भाषाओं में निहित प्रकार की बातचीत पर सख्त प्रतिबंध हैं।


ज्यादातर उत्सुकता है, लेकिन मैं एक सी स्थिति के लिए आवेदन कर रहा हूं, और मामले में जानना चाहता हूं कि उन्होंने मुझे इसके बारे में प्रश्नोत्तरी दी।
सेडियस

फिर शायद लंबा जवाब जो "दृढ़ता से टाइप किया गया" की बारीकियों को देता है, केवल "हां या ना" कहने के बजाय सबसे अच्छा तरीका है।
बॉबीशाफ्टो

0

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


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

0

मैं कहूंगा कि सी आपके कंपाइलर / प्लेटफ़ॉर्म डिक्टेट के रूप में दृढ़ता से टाइप किया गया है। उदाहरण के लिए, यदि आप एक सख्त प्लेटफ़ॉर्म पर निर्माण कर रहे हैं, तो एक प्रकार का चेतावनियाँ इंगित करने वाले को तोड़ने की संभावना है:

void m_free(void **p)
{
        if (*p != NULL) {
                free(*p);
                *p = NULL;
        }
}

....
char *str = strdup("foo");
m_free((void **) &foo);

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

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



-1

दृढ़ता से टाइप नहीं किया गया।

विचार करें कि निम्न फ़ंक्शन प्रोटोटाइप आपको डेटा प्रकार के तर्कों के बारे में क्या बताता है:

void func (int n, char ch, ...);

कुछ भी तो नहीं। इसलिए मेरा सुझाव है कि मजबूत टाइपिंग यहां लागू नहीं होती है।


है ना? यह बताता है कि आपके पास एक int है, उसके बाद एक char है, उसके बाद किसी भी प्रकार के तर्क हैं। वह "कुछ नहीं" है।
लॉरेंस डॉल

... आपको बताता है कि पारित किए गए तर्कों के प्रकारों के बारे में कुछ भी नहीं है। यह सच है कि फ़ंक्शन का प्रकार स्वयं पता है। सॉफ्टवेयर बंदर ने यही कहा।
जोहान्स शहाब -

वे "किसी भी प्रकार के किसी भी तर्क" के बारे में बात कर रहे हैं। एक चेन केवल उतना ही मजबूत है जितना कि उसकी सबसे कमजोर कड़ी।
joel.neely

-3

मैं कहता हूं कि यह दृढ़ता से टाइप होता है क्योंकि हर अभिव्यक्ति का एक प्रकार होता है जो इसके मूल्य का कार्य नहीं है; ei इसे रनटाइम से पहले जाना जा सकता है।

OTOH मुझे यकीन नहीं है कि जोरदार टाइप का सही वर्णन है। एकमात्र मजबूत दावा मैं एक भाषा के लिए कारण देख सकता हूं यह आश्वासन होगा कि आप रनटाइम पर टाइप सिस्टम को पुनर्व्याख्या नहीं कर सकते हैं जैसे कि टाइप कास्ट, यूनियनों, अन्य भाषाओं में कॉल करना, संकेत, असेंबली भाषा, आदि। मौजूद हैं लेकिन इतने अपंग हैं कि वे उच्च आश्वासन और शिक्षाविद के बाहर प्रोग्रामर के लिए ज्यादा दिलचस्पी नहीं रखते हैं। जैसा कि किसी ने बताया है, वास्तव में उस अधिकार को करने के लिए आपको टाइप nonZeroIntऔर व्हाट्सएप की जरूरत है। छी।


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