प्रश्न: मैंने अक्सर यह दावा सुना है कि गतिशील रूप से टाइप की गई भाषाएं, टाइप की गई भाषाओं की तुलना में अधिक उत्पादक होती हैं। इस दावे के कारण क्या हैं? "
इसके ऐतिहासिक कारण हैं। यदि आप कुछ दशक पीछे चले जाते हैं, तो गतिशील भाषाएं निर्विवाद रूप से स्थैतिक भाषाओं की तुलना में बहुत अधिक उत्पादक थीं (जबकि काफी धीमी भी)। पर्ल सी की तुलना में स्पष्ट रूप से बहुत अधिक उत्पादक है यदि आप दोनों जानते हैं और हाथ में कार्य या तो अनुमति देता है। लेकिन समय के साथ भाषाओं ने एक दूसरे से बहुत अधिक उधार ले लिया है, और नई भाषाएं अंतर को कम कर रही हैं (उत्पादकता और प्रदर्शन दोनों में)।
यहाँ कुछ बिंदुओं पर विचार किया गया है:
कचरा संग्रह : कचरा संग्रह एक विशाल उत्पादकता को बढ़ावा देने वाला है। मेरा मानना है कि जावा जीसी के साथ पहली मुख्यधारा की स्थिर भाषा थी। इससे पहले, स्टैटिक मूल रूप से मैनुअल मेमोरी मैनेजमेंट का मतलब था। (नोट: यहां और निम्नलिखित में मैं केवल मुख्य धारा की भाषाओं पर विचार कर रहा हूं। बहुत सी प्रयोगात्मक और आला भाषाएं मौजूद हैं जो किसी भी बिंदु पर काउंटरटेम्पेल प्रदान करती हैं जो मैं बनाता हूं।)
मेमोरी सुरक्षा : यह एक उत्पादकता सुधार है जिसे आपको पैर में शूटिंग करने के बारे में चिंता करने की आवश्यकता नहीं है। जावा की तरह "प्रबंधित" स्थिर भाषाओं से पहले, स्थिर का मतलब आमतौर पर प्रत्यक्ष मेमोरी एक्सेस होता था। डिबगिंग भी उत्पादकता का एक हिस्सा है, और असुरक्षित मेमोरी एक्सेस वास्तव में अस्पष्ट बग पैदा कर सकती है।
बोझिल प्रकार की प्रणालियाँ। स्थिर भाषाओं में पैरामीटर प्रकार (जैसे टेम्पलेट या जेनरिक) की शुरुआत से पहले, स्थिर प्रकार प्रणालियों की सीमाएं अक्सर एक बोझ थीं। उदाहरण के लिए जावा में आपको किसी संग्रह से कोई आइटम चुनने पर हर बार स्पष्ट रूप से डाउनकास्ट करना पड़ता था। तो आपको एक कास्ट का सिंटैक्टिक ओवरहेड मिला और कोई प्रकार की सुरक्षा नहीं। प्रोग्रामिंग में सर्वव्यापी संग्रह को देखते हुए, यह एक बड़ी कमी थी।
हर चीज के प्रकार को घोषित करना बहुत ही निरर्थक टाइपिंग है, लेकिन आधुनिक प्रकार के अनुमानों के साथ, इसे काफी कम किया जा सकता है।
बड़ा मानक पुस्तकालय। पायथन को बड़े मानक पुस्तकालय के कारण "बैटरी शामिल" के रूप में प्रसिद्ध किया गया था। सी के साथ तुलना में यह बहुत कम मानक पुस्तकालय है। लेकिन जावा और .net जैसे प्लेटफार्मों के साथ, एक विशाल मानक पुस्तकालय मानक बन रहा है, और स्काला और एफ # जैसी नई भाषाएं इस "मुफ्त में" विरासत में मिली हैं।
प्रथम श्रेणी डेटा संरचनाएँ। पर्ल और पायथन जैसी गतिशील भाषाओं में सामान्य संचालन के लिए सुविधाजनक वाक्यविन्यास शॉर्टकट के साथ सूचियों और मानचित्रों जैसे अंतर्निहित प्रथम श्रेणी के डेटा संरचनाएं हैं। इसकी तुलना में, C में निश्चित आकार के सरणियों को छोड़कर कोई अंतर्निहित संग्रह नहीं है।
क्लोज़र और लैम्ब्डा सिंटैक्स - डायनेमिक भाषाओं में आमतौर पर यह शुरुआत से होता है, लेकिन स्थिर भाषाओं ने इसे अपनाया है, हाल ही में जावा।
अंत में कोड स्निपेट्स को जल्दी से परीक्षण करने की क्षमता को पुन: प्राप्त करना एक बहुत बड़ा वरदान है। लेकिन यद्यपि आईडीई उपकरण, विजुअल स्टूडियो में "तत्काल" विंडो की तरह, स्थिर भाषाएं कुछ हद तक इसका अनुकरण कर सकती हैं।
उन्नत टूलींग - उपरोक्त बिंदुओं के अलावा जहां स्थिर भाषाएं गतिशील भाषाओं की सुविधा के करीब हो रही हैं, आधुनिक संपादक इस तरह से स्थैतिक विश्लेषण का लाभ उठा रहे हैं कि गतिशील भाषाओं में एक कठिन समय मिलान होता है। उदाहरण के लिए संपादक सुरक्षित स्वत: रिफ्लेक्टर प्रदान कर सकते हैं, ऐसा कुछ जो एक गतिशील भाषा में कड़ाई से असंभव बोल रहा हो।
निचला रेखा: ऐतिहासिक रूप से यह सच था, लेकिन आज जवाब कम स्पष्ट है।
प्रश्न: तो: गतिशील टाइपिंग के साथ उत्पादकता के लिए क्या कहना है जो वास्तव में स्वयं प्रकार के मॉडल का एक फायदा है?
डायनामिक टाइपिंग मॉडल को डायनेमिक भाषाओं से अलग करना थोड़ा कठिन है, लेकिन एक उदाहरण के रूप में C # ने समय के साथ अधिक गतिशील सुविधाओं को अपनाया है, भले ही यह एक मूल भाषा है। यह वास्तव में गतिशील प्रकार के मॉडल के लाभ का प्रमाण है। उदाहरण:
परावर्तन
परावर्तन मौलिक रूप से एक गतिशील टाइपिंग सुविधा है। आप संकलन समय की तुलना में रनटाइम रैटर पर ऑब्जेक्ट प्रकारों का निरीक्षण करते हैं। जब इसे पेश किया गया था, तो यह एक प्रकार का था, लेकिन C # में प्रतिबिंब का उपयोग अधिक से अधिक सर्वव्यापी हो जाता है, उदाहरण के लिए ASP.Net MVC प्रतिबिंब का भारी उपयोग करता है।
विशेषताएँ
विशेषताएँ टाइपिंग का एक उदाहरण हैं। आप संकलन समय पर एक वर्ग के लिए मनमाना गुण जोड़ सकते हैं, और फिर आप रनटाइम पर (प्रतिबिंब के माध्यम से) निरीक्षण करते हैं और इसके आधार पर वस्तुओं में हेरफेर करते हैं। एमईपी जैसा कुछ मूल रूप से एक गतिशील प्रकार के मॉडल पर आधारित एक विस्तार ढांचा है।
Linq to SQL, EF mv।
विभिन्न Linq ट्रांसफार्मर रनटाइम ऑब्जेक्ट के रूप में प्रश्नों का निरीक्षण करते हैं और मक्खी पर sql उत्पन्न करते हैं। यह रनटाइम पर कोड का निरीक्षण करने की तुलना में अधिक गतिशील नहीं है। कोडडॉम सिक्के का दूसरा पहलू है, जहां रनटाइम पर कोड उत्पन्न किया जा सकता है
रोसलिन
रोसलिन मूल रूप से लागू होते हैं eval
, जिसे कभी वास्तविक रूप से गतिशील भाषा की परिभाषित विशेषता माना जाता था।
डायनेमिक
The dynamic
-ype, C # में सबसे स्पष्ट रूप से गतिशील विशेषता है, और बाहरी वस्तुओं और भाषाओं के साथ बातचीत को सरल और अधिक उत्पादक बनाने के लिए विज्ञापित किया जाता है। लेकिन इसका इस्तेमाल Asp.net MVC में सुविधा के लिए भी किया जाता है।
उपरोक्त सभी विशेषताओं के लाभ से पता चलता है कि डायनामिक मॉडल में स्थिर भाषा में भी पैरामीटराइज्ड प्रकार, संरचनात्मक प्रकार और प्रकार के अनुमान के साथ निश्चित लाभ होते हैं।