गतिशील प्रकार की भाषाएँ बनाम स्थिर प्रकार की भाषाएँ


205

स्थिर प्रकार की भाषाओं की तुलना में गतिशील प्रकार की भाषाओं के फायदे और सीमाएं क्या हैं?

इसे भी देखें : व्हाट्सएप विथ डायनमिक लैंग्वेजेज (एक कहीं अधिक तर्कशील सूत्र ...)


10
यह प्रश्न बहुत व्यक्तिपरक है।
जेसन डगिट

7
मैं इसे व्यक्तिपरक नहीं कहूंगा, लेकिन लौ फेट। लेकिन इसके संबंध में कुछ वस्तुनिष्ठ तथ्य हैं।
विंको वर्सालोविक

2
सहमत: बहुत व्यक्तिपरक। दो दृष्टिकोणों की तुलना करना और इसके विपरीत करना दिलचस्प है, लेकिन यह मंच के सर्वनाश के कगार पर खतरनाक रूप से पेश आता है।
डैनियल स्पाइवेक

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

4
इस तरह की त्रुटि आमतौर पर जावास्क्रिप्ट को एक डरावने पड़ाव में लाती है, जिसे मैं एक बहुत अच्छी बात मानता हूं। बहुत कम से कम यह त्रुटियों को फेंक देगा जो मुझे भी मूल्यवान लगता है। किसी कारण से यह हमेशा एक स्थिर टाइपिंग प्रतिमान से एक आदमी है जो खाली कोशिश / बयानों के साथ अपनी जावास्क्रिप्ट त्रुटियों को दफन करना चाहता है। यह मेरे अनुभव की एक घटना है। वो क्या है? इसके बावजूद, जब हम अपना कोड चलाते हैं, तो हमें ऐसा फीडबैक नहीं मिलता।
एरिक रेपेन

जवाबों:


139

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

इस मुद्दे पर एक अच्छी बात यह है कि स्टेटिक टाइपिंग से जहां संभव हो, गतिशील टाइपिंग की आवश्यकता है: माइक्रोसॉफ्ट पर एरिक मीजर और पीटर ड्रेटन द्वारा प्रोग्रामिंग भाषाओं के बीच शीत युद्ध की समाप्ति :

स्टैटिक टाइपिंग के पैरोकारों का तर्क है कि स्टैटिक टाइपिंग के फायदों में प्रोग्रामिंग गलतियों का पहले पता लगाना शामिल है (जैसे कि बूलियन में पूर्णांक जोड़ने से रोकना), प्रकार के हस्ताक्षर के रूप में बेहतर प्रलेखन (जैसे नाम बदलने पर संख्या और प्रकार के तर्क शामिल करना), अधिक कंपाइलर ऑप्टिमाइज़ेशन के अवसर (उदाहरण के लिए रिसीवर के सटीक प्रकार को स्टेटिक रूप से ज्ञात करने पर वर्चुअल कॉल की जगह), रनटाइम दक्षता में वृद्धि (उदाहरण के लिए सभी मानों को एक गतिशील प्रकार को ले जाने की आवश्यकता नहीं है), और एक बेहतर डिज़ाइन टाइम डेवलपर अनुभव (जैसे कि जानना) रिसीवर का प्रकार, आईडीई सभी लागू सदस्यों के ड्रॉप-डाउन मेनू को प्रस्तुत कर सकता है)। स्टेटिक टाइपिंग कट्टरपंथी हमें यह विश्वास दिलाने की कोशिश करते हैं कि "अच्छी तरह से टाइप किए गए प्रोग्राम गलत नहीं हो सकते"। हालांकि यह निश्चित रूप से प्रभावशाली लगता है, यह एक जगह खाली बयान है। स्टेटिक टाइप चेकिंग आपके प्रोग्राम के रनटाइम बिहेवियर का एक कंपाइल-टाइम एब्स्ट्रैक्शन है, और इसलिए यह केवल आंशिक रूप से ध्वनि और अपूर्ण है। इसका मतलब यह है कि प्रोग्राम्स अभी भी गलत हो सकते हैं क्योंकि ऐसे गुण जो टाइप-चेकर द्वारा ट्रैक नहीं किए जाते हैं, और यह भी कि ऐसे प्रोग्राम हैं जो गलत नहीं हो सकते, उन्हें टाइप-चेक नहीं किया जा सकता है। स्टैटिक टाइपिंग को आंशिक और अधिक पूर्ण बनाने के लिए आवेग "फैंटम टाइप" [11] और "वॉबल्ली टाइप्स" [10] जैसी अवधारणाओं के गवाह के रूप में सिस्टम को अत्यधिक जटिल और विदेशी बनाने का कारण बनता है। यह एक बॉल और चेन के साथ एक मैराथन दौड़ने की कोशिश करने जैसा है, जो आपके पैर में बंधी हुई है और विजयी रूप से चिल्लाते हुए कि आपने लगभग इसे बनाया है, भले ही आप पहले मील के बाद बाहर निकल गए हों। स्टेटिक टाइप चेकिंग आपके प्रोग्राम के रनटाइम बिहेवियर का एक कंपाइल-टाइम एब्स्ट्रैक्शन है, और इसलिए यह केवल आंशिक रूप से ध्वनि और अपूर्ण है। इसका मतलब यह है कि प्रोग्राम्स अभी भी गलत हो सकते हैं क्योंकि ऐसे गुण जो टाइप-चेकर द्वारा ट्रैक नहीं किए जाते हैं, और यह भी कि ऐसे प्रोग्राम हैं जो गलत नहीं हो सकते, उन्हें टाइप-चेक नहीं किया जा सकता है। स्टैटिक टाइपिंग को आंशिक और अधिक पूर्ण बनाने के लिए आवेग "फैंटम टाइप" [11] और "वॉबल्ली टाइप्स" [10] जैसी अवधारणाओं के गवाह के रूप में सिस्टम को अत्यधिक जटिल और विदेशी बनाने का कारण बनता है। यह एक बॉल और चेन के साथ एक मैराथन दौड़ने की कोशिश करने जैसा है, जो आपके पैर में बंधी हुई है और विजयी रूप से चिल्लाते हुए कि आपने लगभग इसे बनाया है, भले ही आप पहले मील के बाद बाहर निकल गए हों। स्टेटिक टाइप चेकिंग आपके प्रोग्राम के रनटाइम बिहेवियर का एक कंपाइल-टाइम एब्स्ट्रैक्शन है, और इसलिए यह केवल आंशिक रूप से ध्वनि और अपूर्ण है। इसका मतलब यह है कि प्रोग्राम्स अभी भी गलत हो सकते हैं क्योंकि ऐसे गुण जो टाइप-चेकर द्वारा ट्रैक नहीं किए जाते हैं, और यह भी कि ऐसे प्रोग्राम हैं जो गलत नहीं हो सकते, उन्हें टाइप-चेक नहीं किया जा सकता है। स्टैटिक टाइपिंग को आंशिक और अधिक पूर्ण बनाने के लिए आवेग "फैंटम टाइप" [11] और "वॉबल्ली टाइप्स" [10] जैसी अवधारणाओं के गवाह के रूप में सिस्टम को अत्यधिक जटिल और विदेशी बनाने का कारण बनता है। यह एक बॉल और चेन के साथ एक मैराथन दौड़ने की कोशिश करने जैसा है, जो आपके पैर में बंधी हुई है और विजयी रूप से चिल्लाते हुए कि आपने लगभग इसे बनाया है, भले ही आप पहले मील के बाद बाहर निकल गए हों। और इसलिए यह आवश्यक रूप से केवल आंशिक रूप से ध्वनि और अपूर्ण है। इसका मतलब यह है कि प्रोग्राम्स अभी भी गलत हो सकते हैं क्योंकि ऐसे गुण जो टाइप-चेकर द्वारा ट्रैक नहीं किए जाते हैं, और यह भी कि ऐसे प्रोग्राम हैं जो गलत नहीं हो सकते, उन्हें टाइप-चेक नहीं किया जा सकता है। स्टैटिक टाइपिंग को आंशिक और अधिक पूर्ण बनाने के लिए आवेग "फैंटम टाइप" [11] और "वॉबल्ली टाइप्स" [10] जैसी अवधारणाओं के गवाह के रूप में सिस्टम को अत्यधिक जटिल और विदेशी बनाने का कारण बनता है। यह एक बॉल और चेन के साथ एक मैराथन दौड़ने की कोशिश करने जैसा है, जो आपके पैर में बंधी हुई है और विजयी रूप से चिल्लाते हुए कि आपने लगभग इसे बनाया है, भले ही आप पहले मील के बाद बाहर निकल गए हों। और इसलिए यह आवश्यक रूप से केवल आंशिक रूप से ध्वनि और अपूर्ण है। इसका मतलब यह है कि प्रोग्राम्स अभी भी गलत हो सकते हैं क्योंकि ऐसे गुण जो टाइप-चेकर द्वारा ट्रैक नहीं किए जाते हैं, और यह भी कि ऐसे प्रोग्राम हैं जो गलत नहीं हो सकते, उन्हें टाइप-चेक नहीं किया जा सकता है। स्टैटिक टाइपिंग को आंशिक और अधिक पूर्ण बनाने के लिए आवेग "फैंटम टाइप" [11] और "वॉबल्ली टाइप्स" [10] जैसी अवधारणाओं के गवाह के रूप में सिस्टम को अत्यधिक जटिल और विदेशी बनाने का कारण बनता है। यह एक बॉल और चेन के साथ एक मैराथन दौड़ने की कोशिश करने जैसा है, जो आपके पैर में बंधी हुई है और विजयी रूप से चिल्लाते हुए कि आपने लगभग इसे बनाया है, भले ही आप पहले मील के बाद बाहर निकल गए हों। और यह कि ऐसे कार्यक्रम हैं जो गलत नहीं हो सकते, उन्हें टाइप-चेक नहीं किया जा सकता है। स्टैटिक टाइपिंग को आंशिक और अधिक पूर्ण बनाने के लिए आवेग "फैंटम टाइप" [11] और "वॉबल्ली टाइप्स" [10] जैसी अवधारणाओं के गवाह के रूप में सिस्टम को अत्यधिक जटिल और विदेशी बनाने का कारण बनता है। यह एक बॉल और चेन के साथ एक मैराथन दौड़ने की कोशिश करने जैसा है, जो आपके पैर में बंधी हुई है और विजयी रूप से चिल्लाते हुए कि आपने लगभग इसे बनाया है, भले ही आप पहले मील के बाद बाहर निकल गए हों। और यह कि ऐसे कार्यक्रम हैं जो गलत नहीं हो सकते, उन्हें टाइप-चेक नहीं किया जा सकता है। स्टैटिक टाइपिंग को आंशिक और अधिक पूर्ण बनाने के लिए आवेग "फैंटम टाइप" [11] और "वॉबल्ली टाइप्स" [10] जैसी अवधारणाओं के गवाह के रूप में सिस्टम को अत्यधिक जटिल और विदेशी बनाने का कारण बनता है। यह एक बॉल और चेन के साथ एक मैराथन दौड़ने की कोशिश करने जैसा है, जो आपके पैर में बंधी हुई है और विजयी रूप से चिल्लाते हुए कि आपने लगभग इसे बनाया है, भले ही आप पहले मील के बाद बाहर निकल गए हों।

गतिशील रूप से टाइप की जाने वाली भाषाओं के अधिवक्ताओं का तर्क है कि स्थैतिक टाइपिंग बहुत कठोर है, और डायनामिक भाषाओं की कोमलता उन्हें आदर्श रूप से बदलती या अज्ञात आवश्यकताओं के साथ प्रोटोटाइप सिस्टम के लिए अनुकूल बनाती है, या जो अन्य प्रणालियों के साथ बातचीत करती है जो अप्रत्याशित रूप से बदलते हैं (डेटा और एप्लिकेशन एकीकरण)। बेशक, डायनेमिक रूप से टाइप की गई भाषाएं वास्तव में डायनेमिक प्रोग्राम व्यवहार से निपटने के लिए अपरिहार्य हैं जैसे कि विधि अवरोधन, डायनेमिक लोडिंग, मोबाइल कोड, रनटाइम रिफ्लेक्शन आदि। स्क्रिप्टिंग पर सभी पत्रों की मां में [16], जॉन ऑस्टरहॉट ने कहा कि स्टेटिकली टाइप सिस्टम प्रोग्रामिंग भाषाएं कोड को पुन: प्रयोज्य, अधिक क्रियाशील, अधिक सुरक्षित नहीं, और गतिशील रूप से टाइप की गई स्क्रिप्टिंग भाषाओं की तुलना में कम अभिव्यंजक बनाती हैं। इस तर्क का शाब्दिक रूप से टाइप किए गए स्क्रिप्टिंग भाषाओं के कई समर्थकों द्वारा तोता है। हम तर्क देते हैं कि यह एक गिरावट है और एक ही श्रेणी में आता है यह तर्क देते हुए कि घोषणात्मक प्रोग्रामिंग का सार असाइनमेंट को समाप्त कर रहा है। या जैसा कि जॉन ह्यूजेस कहते हैं [8], सुविधाओं को छोड़ कर किसी भाषा को अधिक शक्तिशाली बनाना एक तार्किक अक्षमता है। इस तथ्य का बचाव करते हुए कि रन-टाइम में सभी प्रकार की जाँच में देरी करना एक अच्छी बात है, इस तथ्य के साथ शुतुरमुर्ग रणनीति खेल रहा है कि त्रुटियों को जल्द से जल्द विकास प्रक्रिया में पकड़ा जाना चाहिए। सुविधाओं को छोड़ कर किसी भाषा को अधिक शक्तिशाली बनाना एक तार्किक अक्षमता है। इस तथ्य का बचाव करते हुए कि रन-टाइम में सभी प्रकार की जाँच में देरी करना एक अच्छी बात है, इस तथ्य के साथ शुतुरमुर्ग रणनीति खेल रहा है कि त्रुटियों को जल्द से जल्द विकास प्रक्रिया में पकड़ा जाना चाहिए। सुविधाओं को छोड़ कर किसी भाषा को अधिक शक्तिशाली बनाना एक तार्किक अक्षमता है। इस तथ्य का बचाव करते हुए कि रन-टाइम में सभी प्रकार की जाँच में देरी करना एक अच्छी बात है, इस तथ्य के साथ शुतुरमुर्ग रणनीति खेल रहा है कि त्रुटियों को विकास प्रक्रिया में जल्द से जल्द पकड़ा जाना चाहिए।


37
"विधि अवरोधन, डायनेमिक लोडिंग, मोबाइल कोड, रनटाइम रिफ्लेक्शन" यह सब जावा में रिकॉर्ड के लिए किया जा सकता है।
विल हार्टुंग

13
प्रेत प्रकार "अति जटिल" नहीं हैं।
जॉन हैरोप

12
Meijer पेपर का लिंक 5/16/2010 के रूप में टूटा हुआ है।
jchadhowell

5
@jchadhowell, आप यहां देख सकते हैं कि यहां research.microsoft.com/en-us/um/people/emeijer/Papers/…
श्रीनिवास रेड्डी थाटीपर्थी

4
@VinkoVrsalovic स्टैटिक भाषाएं टाइप इंट्रेंस और पॉलीमॉर्फिज्म रैपिड प्रोटोटाइप के लिए काफी अच्छे हैं। वे गतिशील भाषा और स्थिर भाषाओं की सुरक्षा के समान आराम प्रदान करते हैं।
एडगर क्लेर्क्स

119

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

हालांकि, कोई भी प्रकार प्रणाली सही नहीं है। त्रुटियों के एक विशेष वर्ग को खत्म करने के लिए, उन्हें कुछ पूरी तरह से मान्य कार्यक्रमों को भी अस्वीकार करना चाहिए जो नियमों का उल्लंघन करते हैं। यही कारण है कि ट्वेल वास्तव में हॉल्टिंग समस्या को हल नहीं करता है, यह सिर्फ बड़ी संख्या में पूरी तरह से वैध सबूतों को फेंकने से बचता है जो विषम तरीकों से समाप्त करने के लिए होता है। इसी तरह, जावा का प्रकार प्रणाली PersistentVectorविषम सरणियों के उपयोग के कारण क्लीजुर के कार्यान्वयन को अस्वीकार करता है । यह रनटाइम पर काम करता है, लेकिन टाइप सिस्टम इसे सत्यापित नहीं कर सकता है।

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

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

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

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


5
प्रदर्शन के बारे में। सामान्य मामलों में यह इतना अंतर नहीं लाएगा, लेकिन उच्च तनाव गणित और ऐसे में, वास्तविक अंतर है। टेस्ट के फेक की एक कॉल साबित हुई है, ipy बनाम C # के मामले में, एक हजार चक्रों के साथ भिन्न होता है। सिर्फ इसलिए कि पूर्व को सुनिश्चित करना है कि कोई विधि मौजूद है।
दयक्कम

29
बिंदु पर विस्तृत रूप से कहा जा सकता है "C # ठीक से उपयोग किए जाने पर अशक्त सूचक अपवादों को समाप्त कर सकता है, जबकि जावा में ऐसी कोई शक्ति नहीं है।" ? एक उदाहरण या उद्धरण की बहुत सराहना की जाएगी।
श्रीनिवास रेड्डी थातीपर्थी

13
"जावा में कुछ अधिक जटिल जेनेरिक प्रकार की परिभाषाएं अधिकांश डेवलपर्स को आंखों के
अंधों के लिए खुरचने के

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

" जावा एक अंतर्निहित गतिशील मध्यवर्ती के लिए संकलित करता है " - जो बिंदु को याद करता है। स्टैटिक चेक अग्रिम में किए गए हैं और इसलिए कोई अतिरिक्त रन टाइम चेक उन के लिए आवश्यक नहीं है क्योंकि कंपाइलर निर्देश चुनता है daddक्योंकि वह पहले से जानता है कि ऑपरेंड doubleएस हैं।
माइकल बीयर

45

खैर, दोनों बहुत, बहुत बहुत गलत समझे हैं और दो पूरी तरह से अलग चीजें भी हैं। यह परस्पर अनन्य नहीं हैं

स्थैतिक प्रकार भाषा के व्याकरण का प्रतिबंध है। वैधानिक रूप से टाइप किए गए लैंगग्यूज को कड़ाई से संदर्भ मुक्त नहीं कहा जा सकता है। सरल सत्य यह है कि किसी भाषा को संदर्भ मुक्त व्याकरण में स्पष्ट रूप से व्यक्त करना असुविधाजनक हो जाता है जो अपने सभी डेटा को केवल बिट वैक्टर के रूप में नहीं मानता है। स्टेटिक टाइप सिस्टम भाषा के व्याकरण का हिस्सा हैं यदि कोई हो, तो वे इसे केवल एक संदर्भ मुक्त व्याकरण की तुलना में अधिक प्रतिबंधित कर सकते हैं, व्याकरणिक जांच इस प्रकार वास्तव में स्रोत पर दो पास में होती हैं। स्टैटिक प्रकार, प्रकार के सिद्धांत की गणितीय धारणा के अनुरूप होते हैं, गणित में टाइप थ्योरी कुछ अभिव्यक्तियों की वैधता को सीमित करती है। जैसे, मैं 3 + [4,7]गणित में नहीं कह सकता , यह इस प्रकार के सिद्धांत के कारण है।

इस प्रकार स्थैतिक प्रकार एक सैद्धांतिक दृष्टिकोण से 'त्रुटियों को रोकने' का तरीका नहीं है, वे व्याकरण की एक सीमा है। वास्तव में, बशर्ते कि +, 3 और अंतराल में सामान्य रूप से निर्धारित सैद्धांतिक परिभाषाएं हों, अगर हम टाइप प्रणाली 3 + [4,7]को हटाते हैं तो एक बहुत अच्छी तरह से परिभाषित परिणाम होता है जो एक सेट है। 'रनटाइम टाइप एरर' सैद्धांतिक रूप से मौजूद नहीं है, जिस प्रकार की प्रणाली का व्यावहारिक उपयोग मानव को होने वाले संचालन को रोकने के लिए है को कोई मतलब नहीं होगा। संचालन अभी भी केवल बिट्स के स्थानांतरण और हेरफेर हैं।

इसके लिए पकड़ यह है कि एक प्रकार की प्रणाली यह तय नहीं कर सकती है कि इस तरह के ऑपरेशन होने वाले हैं या नहीं अगर इसे चलाने की अनुमति दी जाएगी। जैसा कि, उन सभी संभावित कार्यक्रमों के सेट को विभाजित करता है जो एक 'प्रकार की त्रुटि' होने वाले हैं, और जो नहीं हैं। यह केवल दो काम कर सकता है:

1: साबित करें कि प्रोग्राम में टाइप एरर होने वाली हैं
2: यह साबित करें कि वे किसी प्रोग्राम में नहीं जा रहे हैं

ऐसा लग सकता है कि मैं खुद का विरोध कर रहा हूं। लेकिन C या Java टाइप चेकर क्या करता है, क्या यह किसी प्रोग्राम को 'ungrammatical' के रूप में अस्वीकार करता है, या जैसा कि इसे 'टाइप एरर' कहता है, यदि यह 2 पर सफल नहीं हो सकता। यह साबित नहीं कर सकता कि वे होने वाले नहीं हैं, इसका मतलब यह नहीं है कि वे होने वाले नहीं हैं, इसका मतलब यह है कि यह साबित नहीं कर सकता है। यह बहुत अच्छी तरह से हो सकता है कि एक प्रोग्राम जिसमें एक प्रकार की त्रुटि नहीं होगी, केवल इसलिए खारिज कर दिया जाता है क्योंकि यह संकलक द्वारा सिद्ध नहीं किया जा सकता है। एक सरल उदाहरण हैif(1) a = 3; else a = "string";, निश्चित रूप से यह हमेशा सच है, अन्य-शाखा को कभी भी कार्यक्रम में निष्पादित नहीं किया जाएगा, और किसी भी प्रकार की त्रुटि नहीं होगी। लेकिन यह इन मामलों को सामान्य तरीके से साबित नहीं कर सकता है, इसलिए इसे खारिज कर दिया गया है। यह कई प्रकार की वैधानिक रूप से टाइप की जाने वाली भाषाओं की प्रमुख कमजोरी है, जो आपको अपने आप को बचाने में, आप जरूरी नहीं कि ऐसे मामलों में भी सुरक्षित हैं।

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

स्टैटिक टाइपिंग का एक और फायदा यह है कि कंपाइल समय पर प्रकारों को जाना जाता है, और इस प्रकार कंपाइलर इसका उपयोग कर सकते हैं। यदि हम जावा में करते हैं "string" + "string"या 3 + 3, +अंत में पाठ में दोनों टोकन पूरी तरह से अलग ऑपरेशन और डेटम का प्रतिनिधित्व करते हैं, तो संकलक जानता है कि अकेले किस प्रकार से चुनना है।

अब, मैं यहाँ एक बहुत ही विवादास्पद बयान देने जा रहा हूँ लेकिन मेरे साथ है: 'डायनेमिक टाइपिंग' मौजूद नहीं है

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

उनके पास प्रकार क्यों नहीं हैं? क्योंकि हर ऑपरेशन को परिभाषित किया गया है और हर ऑपरेटर पर अनुमति दी गई है, वास्तव में 'रनटाइम टाइप त्रुटि' क्या है? यह एक सैद्धांतिक उदाहरण से विशुद्ध रूप से एक साइड-इफेक्ट है । यदि ऐसा करना print("string")जो एक स्ट्रिंग को प्रिंट करता है एक ऑपरेशन है, तो ऐसा है length(3), पूर्व में stringमानक आउटपुट पर लिखने का दुष्प्रभाव है , बाद में बस error: function 'length' expects array as argument., यही है। एक सैद्धांतिक दृष्टिकोण से गतिशील रूप से टाइप की गई भाषा जैसी कोई चीज नहीं है। वे अनछुए हैं

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

स्पष्ट नुकसान तथ्य यह है कि संचालन हो सकता है जो ऐसे परिणाम उत्पन्न करेगा जो मानव के लिए निरर्थक हैं। इसके विरुद्ध रक्षा के लिए, डायनामिक रूप से टाइप की गई भाषाएं आमतौर पर उन परिचालनों को पुनर्परिभाषित करती हैं, बजाय इसके कि निरर्थक परिणाम उत्पन्न करने के बजाय वे इसे फिर से लिखने के दुष्परिणाम होने के लिए इसे फिर से परिभाषित करें, और संभवतः कार्यक्रम को पूरी तरह से रोक दें। यह बिल्कुल भी 'त्रुटि' नहीं है, वास्तव में, भाषा विनिर्देश आमतौर पर इसका तात्पर्य है, यह भाषा का उतना ही व्यवहार है जितना कि एक सैद्धांतिक दृष्टिकोण से एक स्ट्रिंग को प्रिंट करना। टाइप सिस्टम इस प्रकार प्रोग्रामर को यह सुनिश्चित करने के लिए कोड के प्रवाह के बारे में तर्क करने के लिए मजबूर करते हैं कि ऐसा नहीं होता है। या वास्तव में, इसका कारण यह है कि यह करता हैडिबगिंग के लिए कुछ बिंदुओं में भी काम हो सकता है, यह दर्शाता है कि यह 'त्रुटि' नहीं है, लेकिन भाषा की अच्छी तरह से परिभाषित संपत्ति है। वास्तव में, 'डायनेमिक टाइपिंग' का एकमात्र अवशेष जो अधिकांश भाषाओं में शून्य के द्वारा विभाजन के विरुद्ध रखवाली करता है। यह वह है जो डायनेमिक टाइपिंग है, कोई प्रकार नहीं हैं, कोई अन्य प्रकार नहीं हैं, जो शून्य अन्य सभी संख्याओं की तुलना में एक अलग प्रकार है। जिसे लोग 'टाइप' कहते हैं, वह एक डेटम की दूसरी प्रॉपर्टी है, जैसे एरे की लंबाई या स्ट्रिंग का पहला कैरेक्टर। और कई गतिशील रूप से टाइप की गई भाषाएं भी आपको बाहर की चीजें लिखने देती हैं "error: the first character of this string should be a 'z'"

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

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

जैसा कि मैंने उल्लेख किया, सामान्य रूप से केस 2 में 'स्टेटिकली टाइप्ड', निर्दोष साबित होने तक दोषी। लेकिन कुछ भाषाएं, जो सभी प्रकार के नियम 1: निर्दोष साबित होने तक निर्दोष प्रकार के सिद्धांत से अपने प्रकार प्रणाली को प्राप्त नहीं करती हैं, जो आदर्श संकर हो सकती हैं। तो, शायद टाइप्ड रैकेट आपके लिए है।

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


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

1
@ रेज़वानपंडा: लाजला शायद टाइप्ड लैम्ब्डा कैलकुलस या उन कुछ प्रोग्रामिंग भाषाओं में बदलावों का जिक्र कर रही हैं जिनका वे प्रमेय सिद्ध करने पर उपयोग करते हैं। उनमें से कई केवल उन कार्यक्रमों को व्यक्त कर सकते हैं जो रुकने की गारंटी हैं और इसलिए ट्यूरिंग पूर्ण नहीं हैं। इन प्रकार के सिस्टम पर आधारित व्यावहारिक कार्यात्मक प्रोग्रामिंग भाषाएं कोरस कैलकुलस को पुनरावर्ती प्रकारों के साथ विस्तारित करके इस सीमा के आसपास जाती हैं।
23 अगस्त को hugomg

1
"बहुत विवादास्पद लगता है, लेकिन यह सच है, गतिशील रूप से टाइप की गई भाषाएं सैद्धांतिक दृष्टिकोण से अनकही हैं।" - ... और, एक पल में, मुझे पता है कि आपको पता नहीं है कि आप किस बारे में बात कर रहे हैं। डायनेमिक टाइपिंग का अर्थ है कि प्रकार मानों के हैं, न कि पहचानकर्ताओं के। यह साबित करने के लिए कार्यक्रमों को कठिन बनाता है, लेकिन जरूरी नहीं कि असंभव हो। इनलाइनिंग और पैरामीट्रिक बहुरूपता पहले से ही लिंक-टाइम ऑप्टिमाइज़ेशन के विकास का नेतृत्व कर चुके हैं; जो एक ही प्रकार की समस्या को हल करता है जो इष्टतम गतिशील रूप से टाइप की गई भाषाओं को संकलित करता है: जो सभी संभावित इनपुट और आउटपुट को जान रहा है।
14

25

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

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

डायनामिक टाइपिंग के मुख्य नुकसान हैं:

  • रन-टाइम टाइप त्रुटियां।

  • शुद्धता के समान स्तर को प्राप्त करने के लिए बहुत कठिन या व्यावहारिक रूप से असंभव हो सकता है और इसके लिए अत्यधिक परीक्षण की आवश्यकता होती है।

  • संकलक-सत्यापित दस्तावेज़ नहीं।

  • खराब प्रदर्शन (आमतौर पर रन-टाइम पर लेकिन कभी-कभी संकलन समय के बजाय, उदाहरण के लिए स्टालिन स्कीम) और परिष्कृत अनुकूलन पर निर्भरता के कारण अप्रत्याशित प्रदर्शन।

व्यक्तिगत रूप से, मैं गतिशील भाषाओं पर बड़ा हुआ, लेकिन उन्हें एक पेशेवर के रूप में 40 के पोल के साथ नहीं छूता जब तक कि कोई अन्य व्यवहार्य विकल्प नहीं थे।


2
मैं कहूंगा कि प्रवेश के लिए बाधा कम है लेकिन महारत किसी सीखने की अवस्था से कम नहीं है।
एरिक रेपेने

क्या सीखने की अवस्था कम नहीं है क्योंकि आपके पास सीखने के लिए एक प्रकार की प्रणाली नहीं है?
जॉन हैरोप जूल

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

@ ErikReppen: हम "टाइप सिस्टम" की विभिन्न परिभाषाओं का उपयोग कर रहे हैं। मैं एक स्थैतिक प्रकार प्रणाली, जैसे बीजीय डेटा प्रकार, जेनरिक सीखने की बात नहीं कर रहा था। आप जिस "प्रकार" का जिक्र कर रहे हैं, वह केवल डेटा है। तथ्य यह है कि कुछ कार्य रन-टाइम पर कुछ डेटा को अस्वीकार करते हैं, सार्वभौमिक है।
जॉन हैरॉप

12

आर्टिमा के टाइपिंग से: मजबूत बनाम कमजोर, स्थिर बनाम गतिशील लेख:

मजबूत टाइपिंग बेमेल प्रकारों के बीच संचालन को रोकती है। प्रकारों को मिलाने के लिए, आपको एक स्पष्ट रूपांतरण का उपयोग करना चाहिए

कमजोर टाइपिंग का मतलब है कि आप स्पष्ट रूपांतरण के बिना प्रकार मिला सकते हैं

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


1
"डायनेमिक टाइपिंग की तुलना में स्टैटिक टाइपिंग में अधिक त्रुटि होती है" - हाँ, हाँ, और दोहराएं! मुझे दोनों प्रकार की भाषाओं में बहुत अनुभव है, और हर मामले में गतिशील भाषा "बस काम करती है" जबकि स्थैतिक को डीबगिंग के समय 2x की आवश्यकता होती है (देखें सी ++ और डेल्फी)। यह अक्सर प्रकार के मुद्दों के कारण होता है, विशेष रूप से पागल प्रकारों के साथ मॉड्यूल और फ़ंक्शन के बीच डेटा गुजर रहा है। भले ही व्यावहारिक रूप से सभी प्रकार के सैद्धांतिक बग गतिशील भाषाएं हो सकते हैं, व्यवहार में, यह बहुत ही दुर्लभ है कि जब तक आप एक गरीब प्रोग्रामर नहीं हैं, तब तक आप बगैर किसी प्रकार के दुर्भावनापूर्ण प्रोग्रामर के साथ दौड़ सकते हैं।
देलिन

7
मैंने कुछ साल पहले कॉस्टंजा पेपर का एक मसौदा पढ़ा। हर जगह उन्होंने लिखा था "स्थिर" वह वास्तव में विशेष रूप से "जावा" का मतलब था। मैंने उसे OCaml जैसी भाषाओं में दर्जनों काउंटर उदाहरण दिए जिससे उसके दावों की अवहेलना हुई लेकिन उसने आगे भी इसे प्रकाशित किया। उस कागज की शक्ल से, वह अभी भी वही पुरानी बकवास प्रकाशित कर रहा है। उदाहरण के लिए, उस पेपर में वह दावा करता है कि "C # आमतौर पर जावा की एक खराब कॉपी है"। एक वैज्ञानिक पेपर में इसका कोई स्थान नहीं है ...
जॉन हैरोप

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

@MichaelBeer आप C / C ++ जैसी भाषा भी कह सकते हैं जो आपको सीधे स्मृति का प्रबंधन करने देती है जो सीधे खतरनाक है! मैंने निश्चित रूप से घंटे के लिए मेमोरी त्रुटियों के साथ कुश्ती की है। विशाल जावा परियोजनाएं कोई पिकनिक नहीं हैं। किसी भी भाषा में, आपको भाषा और अच्छी प्रथाओं के खतरों को समझना होगा। मैंने अभी तक जिन पूर्णतम सबसे खराब परियोजनाओं पर काम किया है, वे टीम पीएचपी प्रोजेक्ट्स हैं, जिनमें मैंने कुछ संरचनाएं बनाई हैं, लेकिन मैंने गतिशील भाषाओं के साथ उन परियोजनाओं पर भी काम किया है, जो एक अच्छी रूपरेखा और अच्छी प्रोग्रामिंग प्रथाओं का उपयोग करते समय एक सपना था।
18'18

@ डॉलिन सहमत, हर भाषा को इसके नुकसान हुए। लेकिन जिन दोषों का मैंने उल्लेख किया है, वे किसी भी गतिशील रूप से टाइप की गई भाषा में अंतर्निहित हैं, स्मृति को सीधे हेरफेर करने की संभावना सांख्यिकीय रूप से टाइप की गई भाषाओं की अंतर्निहित संपत्ति नहीं है। आप गतिशील रूप से टाइप की गई भाषाओं की कल्पना कर सकते हैं जो आपको मेम को सीधे हेरफेर करने देती हैं। मैं मानता हूं कि C ++ एक सीधा वंश है, भाषा के आविष्कारक का मानना ​​है कि इस ग्रह का एक भी व्यक्ति भाषा के सभी हिस्सों को जानने में सक्षम नहीं है। हालाँकि, इसे C ++ पर वैधानिक रूप से टाइप करने के लिए दोषी नहीं ठहराया जा सकता, लेकिन एक राक्षस जो 30 साल से बढ़ रहा था ...
माइकल बीयर

3

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

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


0

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

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


0

यह नौकरी के लिए सही उपकरण के बारे में है। न तो समय का 100% बेहतर है। दोनों प्रणालियों को मनुष्य द्वारा बनाया गया था और इसमें खामियां थीं। क्षमा करें, लेकिन हम चूसना और सही सामान बनाना।

मुझे डायनेमिक टाइपिंग पसंद है क्योंकि यह मेरे रास्ते से हट जाता है, लेकिन हां रनटाइम एरर इस बात से कम हो सकता है कि मैंने इसकी योजना नहीं बनाई थी। जहाँ पर स्थैतिक टाइपिंग उपरोक्त त्रुटियों को ठीक कर सकती है, लेकिन एक नौसिखिए (टाइप की गई भाषाओं में) प्रोग्रामर पागल को लगातार चार और एक स्ट्रिंग के बीच डालने की कोशिश कर रहा है।


-3

स्टैटिक टाइपिंग: जावा और स्काला जैसी भाषाएँ स्टैटिक टाइप की जाती हैं।

किसी कोड में उपयोग किए जाने से पहले चर को परिभाषित और आरंभ करना होता है।

पूर्व के लिए। इंट x; x = 10;

Println (x);

गतिशील टाइपिंग: पर्ल एक डायनेमिक टाइप की गई भाषा है।

कोड में उपयोग किए जाने से पहले चर को आरंभ करने की आवश्यकता नहीं है।

y = 10; कोड के बाद के भाग में इस चर का उपयोग करें


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