गतिशील भाषाओं के बारे में लोगों को इतना आकर्षक क्या लगता है? [बन्द है]


81

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

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


9
किंडा उदास (और विषम) इतनी कम गतिशील भाषाओं को देखने के लिए।
davidtbernal

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

2
सी # प्रोग्रामर पैरोचियल मायोपिया के साथ क्या है?
अज़ीम.बट २

2
मुझे लगता है कि आपने इसे पढ़ा नहीं है steve.yegge.googlepages.com/is-weak-typing-strong-enough तब?
RCIX

5
गलत वर्तनी वाले चर नाम एक समस्या है जो अंतर्निहित चर घोषणा से आता है, न कि स्थैतिक / गतिशील। डायनेमिक भाषाएं जिन्हें स्पष्ट चर घोषणा की आवश्यकता होती है (जैसे स्मॉलटाकल) में यह समस्या नहीं होती है।
फ्रैंक शीयर

जवाबों:


101

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

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

पतन: गत्यात्मक भाषाएँ कम क्रिया हैं। ग़लतफ़हमी यह है कि टाइप जानकारी एनोटेशन के बराबर होती है। यह पूरी तरह से असत्य है। हम सभी जानते हैं कि टाइप एनोटेशन कष्टप्रद है। मशीन को उस सामान का पता लगाने में सक्षम होना चाहिए। और वास्तव में, यह आधुनिक संकलक में करता है। यहाँ Haskell ( haskell.org से ) की दो पंक्तियों में एक स्टेटिकली टाइप किया गया QuickSort है :

qsort []     = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)

और यहाँ LISP ( swisspig.net से ) में एक गतिशील रूप से QuickSort टाइप किया गया है :

(defun quicksort (lis) (if (null lis) nil
  (let* ((x (car lis)) (r (cdr lis)) (fn (lambda (a) (< a x))))
    (append (quicksort (remove-if-not fn r)) (list x)
      (quicksort (remove-if fn r))))))

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

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

तुम्हें पता है, हो सकता है कि गतिशील भीड़ सिर्फ स्वतंत्रता चाहती है कि वे क्या कर रहे हैं के बारे में ध्यान से नहीं सोचना चाहिए। सॉफ्टवेयर सही या मजबूत नहीं हो सकता है, लेकिन शायद यह होना जरूरी नहीं है।

व्यक्तिगत रूप से, मुझे लगता है कि जो लोग थोड़ी अस्थायी स्वतंत्रता खरीदने के लिए प्रकार की सुरक्षा छोड़ देंगे, वे न तो स्वतंत्रता के लायक होंगे और न ही प्रकार की सुरक्षा।


26
स्वतंत्रता के लिए सुरक्षित प्रकार को छोड़ दो ना ही .. ओह
यस

6
लिस्प अपने आप में काफी वाचाल है, इसका डायनेमिक रूप से टाइप करने से कोई लेना-देना नहीं है ... इसे अजगर में आज़माएँ। def qsort (l): वापसी qsort ([x in x के लिए [1:] यदि x <l [0]]) + l [0] + qsort ([x in l के लिए [1:] यदि x> = l [0]]) अगर l l l
फोरट्रान

13
ठीक यही बात है। इसका डायनेमिक या स्टेटिक रूप से टाइप करने से कोई लेना-देना नहीं है।
Apocalisp

9
मैं तर्क दूंगा कि आपके उदाहरण गरीब नहीं हैं। गतिशील भाषाओं की प्रशंसा करने वाले लोग संभवतः लिस्क ऑफ हास्केल को नहीं चुन सकते हैं। वे संभवतः जावा या सी # पर पायथन या रूबी का चयन कर रहे हैं।
कोरी डी

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

70

यह मत भूलो कि आपको अपने संकलक को बदलने के लिए इकाई परीक्षणों में 10x कोड कवरेज लिखने की आवश्यकता है: डी

मैं वहाँ गया हूँ, गतिशील भाषाओं के साथ किया है, और मुझे कोई फायदा नहीं हुआ।


4
खुशी है कि मैं अकेला नहीं हूं। मुझे रात में बेहतर नींद आती है।
एरिक्कलेन

यह वास्तव में गतिशील टाइपिंग पर स्थैतिक का बड़ा लाभ है। मैं यह नहीं बता सकता कि C ++ में मैंने कितनी बार टाइपसेफ मिस किया है, बस कंपाइलर को मुझे कुछ और बग्स खोजने में सक्षम करना है। (संकलक, जाओ! मुझे कुछ और कीड़े लाओ! :-)
दिमित्री सी।

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

4
@ गुड़: अजीब परिभाषा। बहुत से लोग इससे सहमत नहीं होंगे। OTOH, ज्यादातर लोग इस बात से सहमत होंगे कि संकलक का प्रकार चेकर बहुत (कभी-कभी बहुत जटिल) परीक्षणों को लागू करता है।
कोनराड रुडोल्फ

3
@ यार, यदि आप अपने कोड का परीक्षण नहीं कर रहे हैं, तो आप लॉजिक बग्स के प्रति संवेदनशील हैं। मैंने एक दशक तक पायथन में काम किया है। मुझे नहीं लगता कि मैंने कभी भी प्रोडक्शन में टाइपराइटर लिया है। मेरे पास बहुत सारे लॉजिक बग हैं, हालाँकि। निष्कर्ष: मुझे स्थैतिक प्रकार की अधिक जाँच की आवश्यकता नहीं है, लेकिन मुझे निश्चित रूप से इकाई परीक्षणों की आवश्यकता है।
गर्थ किड

40

अन्य लोगों की प्रतिक्रियाओं को पढ़ते समय, ऐसा लगता है कि गतिशील भाषाओं के लिए कम या ज्यादा तीन तर्क हैं:

1) कोड कम क्रिया है। मुझे यह मान्य नहीं लगता। कुछ गतिशील भाषाएं कुछ स्थिर लोगों की तुलना में कम क्रियात्मक होती हैं। लेकिन F # स्टेटिकली टाइप्ड है, लेकिन वहां की स्टैटिक टाइपिंग में ज्यादा, अगर कोई है तो कोड नहीं जुड़ता है। यह स्पष्ट रूप से टाइप किया गया है, लेकिन यह एक अलग बात है।

2) "मेरी पसंदीदा गतिशील भाषा X में मेरी पसंदीदा कार्यात्मक सुविधा Y है, इसलिए इसलिए गतिशील बेहतर है"। कार्यात्मक और गतिशील का मिश्रण न करें (मुझे समझ नहीं आ रहा है कि ऐसा क्यों कहा जाना चाहिए)।

3) गतिशील भाषाओं में आप तुरंत अपना परिणाम देख सकते हैं। समाचार: आप विजुअल स्टूडियो में सी # के साथ (2005 से) भी कर सकते हैं। बस एक ब्रेकपॉइंट सेट करें, प्रोग्राम को डीबगर में चलाएँ और डीबगिंग करते समय प्रोग्राम को संशोधित करें। मैं हर समय ऐसा करता हूं और यह पूरी तरह से काम करता है।

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

मुझे लगता है कि मुझे इसके लिए बड़े पैमाने पर अपमानित किया जाएगा, लेकिन मैं मौका लूंगा।


उद्धरण: गतिशील भाषाओं में आप तुरंत अपना परिणाम देख सकते हैं। समाचार: आप विजुअल स्टूडियो में सी # के साथ (2005 से) भी कर सकते हैं। बस एक ब्रेकपॉइंट सेट करें, प्रोग्राम को डीबगर में चलाएँ और डीबगिंग करते समय प्रोग्राम को संशोधित करें। मैं हर समय ऐसा करता हूं और यह पूरी तरह से काम करता है। यह डेल्फी में पहले दिन (1995?) और शायद उससे पहले टर्बो पास्कल में रहा है (मुझे ठीक से याद नहीं है)।
No'am Newman

6
जावास्क्रिप्ट की 10k लाइनें? मुझे लगता है कि 9,000 लाइनों के आसपास भी कई और मुझे स्क्रिप्टिंग भाषाओं से प्यार है ...
Oz।

@ नहीं'आम: मुझे पता है। आप इसे विजुअल C ++ 6 में भी कर सकते हैं (जो कि वास्तव में मेरे लिए मुख्य # बिंदु था जब तक VS2k5 बाहर नहीं निकला #)। कुछ भी हो, यह केवल बिंदु पर जोड़ता है। @Oz: आप कैसे जानते हैं कि मेरे जेएस को कितना काम करना है?
erikkallen

मुझे लगता है कि जो लोग अपने परिवर्तनों को देखना पसंद करते हैं वे तुरंत एक सादे पाठ संपादक का उपयोग करना पसंद करते हैं, और वीएस नहीं। हर किसी का अपना। आप JSLint जैसी किसी चीज़ का उपयोग करने पर विचार कर सकते हैं।
dlamblin

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

19

VBScript बेकार है, जब तक आप इसे VB के दूसरे स्वाद से तुलना नहीं कर रहे हैं। PHP ठीक है, इसलिए जब तक आप यह ध्यान रखते हैं कि यह एक अत्यधिक टेम्परिंग भाषा है। आधुनिक जावास्क्रिप्ट महान है। वास्तव में। बहुत सारा मज़ा। बस "DHTML" टैग वाली किसी भी स्क्रिप्ट से दूर रहें।

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

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

यही कारण है कि जब आप गतिशील भाषाओं को गंभीरता से देखना शुरू कर देते हैं।


दिलचस्प सामान ... मैं देखूंगा कि क्या रूबी मुझे मना लेगी। PHP नहीं है, लेकिन मुझे लगता है कि इसका एक बहुत कुछ है क्योंकि यह OO सामान है एक बाद।
दान रोसेनस्टार्क

3
"कार्यान्वयन की बीस लाइनें ... और इसे संकलित करने के लिए बॉयलरप्लेट की दो सौ लाइनें": मैं इस कथन से असहमत हूं। निश्चित रूप से, यह जावा दिनों में सही था, लेकिन C # 3 और स्काला ने बॉयलरप्लेट की मात्रा को बहुत कम कर दिया है।
cdmckay

5
जावा दिन खत्म हो गए हैं? एक बियर दरार और ओह मनाने की तैयारी ... रुको ... सी ++।
शोग ९

2
"VBScript बेकार है, जब तक आप इसे VB के दूसरे स्वाद से तुलना नहीं कर रहे हैं" हुह? क्या आप कह रहे हैं कि VBScript विजुअल बेसिक का सबसे अच्छा संस्करण है? मैंने तुम्हें गलत समझा होगा।
मुसईनेसिस

19

मैं एक पूर्णकालिक नेट प्रोग्रामर हूं जो पूरी तरह से स्टेटिक-टाइप किए गए सी # के गले में उलझा हुआ है। हालाँकि, मुझे आधुनिक जावास्क्रिप्ट बहुत पसंद है।

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

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

मुझे लगता है कि .Net सर्किलों में, डायनेमिक भाषाओं को एक बुरा रैप मिलता है क्योंकि वे VBScript और / या जावास्क्रिप्ट से जुड़े होते हैं। VBScript को सिर्फ उन कारणों में से कई के लिए एक दुःस्वप्न के रूप में याद किया जाता है जिनके बारे में कबी ने कहा - किसी को भी VBScript में टाइप करने के लिए याद रखना CLng का उपयोग करके यह सुनिश्चित करें कि आपको 32-बिट पूर्णांक के लिए पर्याप्त बिट्स मिले। इसके अलावा, मुझे लगता है कि जावास्क्रिप्ट को अभी भी ड्रॉप-डाउन मेनू के लिए ब्राउज़र भाषा के रूप में देखा जाता है जिसे सभी ब्राउज़रों के लिए एक अलग तरीका लिखा जाता है। उस मामले में, मुद्दा भाषा नहीं है, लेकिन विभिन्न ब्राउज़र ऑब्जेक्ट मॉडल हैं। क्या दिलचस्प है कि जितना अधिक सी # परिपक्व होता है, उतना ही गतिशील दिखने लगता है। मुझे लैम्ब्डा के भाव, अनाम वस्तुएं और टाइप इंट्रेंस पसंद हैं। यह हर रोज जावास्क्रिप्ट की तरह लगता है।


1
मैं चाहता हूं कि कोई व्यक्ति जावास्क्रिप्ट से फ़ाइल-हैंडलिंग, सॉकेट्स और एक जीयूआई लाइब्रेरी को जोड़ देगा, फिर एक कंपाइलर का निर्माण करेगा ... जेएस डेस्कटॉप पर .......
अनक्वांक्ट


साथ ही, jscript का उपयोग करके हमेशा एक windows gui ऐप लिखना संभव है। खैर, वैसे भी बहुत लंबे समय के लिए। अधिक जानकारी के लिए "विंडोज़ एचटीए" देखें- आपको एक एचटीए में चलने वाले कुछ अतिरिक्त एप्स मिलते हैं जो आपको ब्राउज़र में नहीं मिलते हैं। डैशबोर्ड विगेट्स को बहुत अधिक शक्ति मिलती है। IPhone पर Webapps बहुत अधिक शक्तिशाली हैं, ज्यादातर लोग उन्हें क्रेडिट देते हैं। Apple ने मोबाइल सफारी में ब्राउजर JS के लिए कई शक्तिशाली एप्स उपलब्ध कराए हैं।
ब्रेटन


यहां इरादे के लिए +1। यद्यपि आपका कोड एक दिन स्थिर लैंग में अनुवादित किया जा सकता है, डायनामिक्स (पायथन विशेष रूप से) एक-ऑफ़ और प्रोटोटाइप के लिए बहुत अच्छा है।
new123456

18

यहाँ Haskell (haskell.org से) की दो पंक्तियों में एक स्टेटिकली टाइप किया गया QuickSort है:

qsort []     = []
qsort (x:xs) = qsort (filter (< x) xs) ++ [x] ++ qsort (filter (>= x) xs)

और यहाँ LISP (swisspig.net से) में एक गतिशील टाइप QuickSort है:

(defun quicksort (lis) (if (null lis) nil
  (let* ((x (car lis)) (r (cdr lis)) (fn (lambda (a) (< a x))))
    (append (quicksort (remove-if-not fn r)) (list x)
      (quicksort (remove-if fn r))))))

मुझे लगता है कि आप यहाँ अपनी भाषा के विकल्प के साथ चीजों को पूर्वाग्रहित कर रहे हैं। लिस्प कुख्यात है परवीन-भारी। हास्केल के लिए एक समीपस्थ पायथन होगा।

if len(L) <= 1: return L
return qsort([lt for lt in L[1:] if lt < L[0]]) + [L[0]] + qsort([ge for ge in L[1:] if ge >= L[0]])

यहां से पायथन कोड


25
यह एक मुंहतोड़ जवाब नहीं है, लेकिन एक सहायक तर्क है। यह दिखाने के लिए जाता है कि एक भाषा का प्रकार प्रणाली (या उसके अभाव) हमें इस बारे में बहुत कम बताती है कि क्या यह क्रिया या संक्षिप्त होगा।
सर्वनाश

2
मैं Apocalisp से सहमत हूं, क्रियात्मकता गतिशील या स्थिर भाषाओं में निर्भर नहीं है। मैं यहां तक ​​कहूंगा कि किसी भाषा की वाचालता पर स्थिर / गतिशील टाइपिंग का कोई प्रभाव नहीं पड़ता है। तो हाँ यह कोई स्थैतिक टाइपिंग शिविर नहीं है जो मुंहतोड़ जवाब दे।
BefittingTheorem

या पर्ल! प्रकार (@array);
जेम्स एंडरसन

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

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

15

मेरे लिए, गतिशील भाषाओं का लाभ यह है कि कम कोड और कार्यात्मक तकनीकों जैसे रूबी के ब्लॉक और पायथन की सूची समझ के कारण कोड कितना पठनीय हो जाता है ।

लेकिन फिर मैं कम्पाइल टाइम चेकिंग (टाइपो होता है) और आईडीई ऑटो पूरा करने से चूक जाता हूं। कुल मिलाकर, कोड और पठनीयता की कम राशि मेरे लिए भुगतान करती है।

एक अन्य लाभ आमतौर पर भाषा की प्रकृति की व्याख्या / गैर संकलित प्रकृति है। कुछ कोड बदलें और तुरंत परिणाम देखें। यह वास्तव में विकास के दौरान एक समय बचाने वाला है।

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


कम से कम एक पायथन आईडीई मुझे पता है (अर्थात्, IDLE, वह जो पायथन दुभाषिया के सामान्य निर्माण के साथ आने के लिए होता है) वास्तव में ऑटो-पूर्ण करने की क्षमता रखता है, हालांकि घोषित चर केवल दुभाषिया विंडो में होते हैं।
JAB

पठनीय? क्या आपने क्विकसॉर्ट उदाहरण देखा है? मुझे पता नहीं है कि वहाँ क्या हो रहा है। यू तर्क दे सकता है कि इसका बुरा लिखा यह दिखा सकता है कि आप कितनी तेजी से कुछ लिख सकते हैं, लेकिन यह पठनीय नहीं है।
एडेप्टर

1
@ 01: भाषा के सामान्य निर्माण का उपयोग करना। यदि आप भाषा की मूल बातें जानते हैं तो यह काफी पठनीय है।
एस्टेबन कुबेर 24:09

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

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

12

गतिशील भाषाओं के विरुद्ध आपके तर्क पूरी तरह से मान्य हैं। हालाँकि, निम्नलिखित पर विचार करें:

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

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


7
@wvdschel: आपके तर्क से, मैं संकलित भाषाओं का तर्क दे सकता हूं जैसे C # और Java को तब संकलित करने की आवश्यकता नहीं है, क्योंकि मुझे केवल इतना करना है कि मेरी IDE पर "Play" बटन पर क्लिक करें और वे बस चले। चूंकि मुझे ध्यान नहीं है कि आईडीई मेरे लिए संकलन कर रहा है, इसलिए यह "बस कोई फर्क नहीं पड़ता"।
cdmckay

2
@cdmckay: और क्या आप अपने चल रहे C # / Java प्रोग्राम से कनेक्ट कर सकते हैं और इसके विरुद्ध कमांड चला सकते हैं, इसे संशोधित या क्वेरी कर रहे हैं। व्याख्या की गई (जो कई गतिशील भाषाएं हैं) भाषाएँ रनटाइम आत्मनिरीक्षण की अनुमति देती हैं जो भाषाओं को संकलित नहीं करती हैं।
RHSeeger

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

4
@ baash05, मुझे लगता है कि आप इस उत्तर को अच्छी तरह से याद कर चुके हैं, 1. मीन्स आप कोड चला सकते हैं क्योंकि आप इसे तेजी से सही करते हैं और हर छोटे से बदलाव के प्रभावों को देखने के लिए किसी कंपाइलर का इंतजार करने की आवश्यकता नहीं है। 2. मौसम आप इसके प्रभाव से सहमत हैं या नहीं इस तथ्य पर बहस करने के लिए लिखने और पढ़ने के लिए कम कोड होगा।
अग्नि क्रो

1
2. यह स्थिर बनाम गतिशील का नहीं बल्कि प्रक्रियात्मक बनाम कार्यात्मक का मुद्दा है। सच: अजगर (और कई अन्य गतिशील भाषाएं) जावा की तुलना में अधिक कार्यात्मक हैं। गलत: इसका डायनेमिक टाइपिंग से कोई लेना-देना नहीं है।
एरिक्कलेन

8

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

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

ये तीनों विशेषताएं गतिशील भाषाओं के लिए विशेष नहीं हैं, लेकिन वे निश्चित रूप से आज की लोकप्रिय स्थिर भाषाओं में मौजूद नहीं हैं: जावा और सी #। आप बहस कर सकते हैं # प्रतिनिधियों में # 2 है, लेकिन मैं तर्क दूंगा कि यह व्यापक रूप से उपयोग नहीं किया जाता है - जैसे कि सूची संचालन के साथ।

के रूप में और अधिक उन्नत स्थिर भाषाओं के लिए ... हास्केल एक अद्भुत भाषा है, इसमें # 1 और # 2 है, और हालांकि इसमें # 3 नहीं है, यह टाइप सिस्टम इतना लचीला है कि आप शायद मेटा की कमी नहीं पाएंगे सीमित होना। मेरा मानना ​​है कि आप भाषा के विस्तार के साथ संकलन समय पर OCaml में मेटाप्रोग्रामिंग कर सकते हैं। स्काला बहुत हालिया जोड़ है और बहुत आशाजनक है। .NET शिविर के लिए F #। लेकिन, इन भाषाओं के उपयोगकर्ता अल्पमत में हैं, और इसलिए उन्होंने प्रोग्रामिंग भाषाओं के परिदृश्य में इस बदलाव में वास्तव में योगदान नहीं दिया है। वास्तव में, मैं बहुत मानता हूं कि रूबी की लोकप्रियता ने अन्य गतिशील भाषाओं के अलावा, हास्केल, ओकेमेल, स्काला और एफ # जैसी भाषाओं की लोकप्रियता को सकारात्मक तरीके से प्रभावित किया।


7

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

मैं कर रहा हूँ जिस तरह से सी या जावा में से अजगर में अधिक उत्पादक है, और न सिर्फ इसलिए कि आप संपादित-संकलन-लिंक रन नृत्य करना है। मैं ऑब्जेक्टिव-सी में अधिक उत्पादक हो रहा हूं, लेकिन यह संभवत: फ्रेमवर्क के कारण अधिक है।

कहने की जरूरत नहीं है, मैं PHP की तुलना में इनमें से किसी भी भाषा में अधिक उत्पादक हूं। नर्क, मैं PHP के बजाय स्कीम या प्रोलॉग में कोड चाहता हूँ। (लेकिन हाल ही में मैं वास्तव में किसी भी चीज़ की तुलना में अधिक प्रोलॉग कर रहा हूं, इसलिए इसे नमक के एक दाने के साथ लें!)


6

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

मैं PHP और VB (स्क्रिप्ट) को उसी तरह वर्गीकृत नहीं करूंगा। मेरे लिए, वे सभी गतिशील-टाइपिंग कमियां जो आप सुझाते हैं, के साथ ज्यादातर अनिवार्य भाषाएं हैं।

निश्चित रूप से, आपको संकलन-समयावधि के समान स्तर नहीं मिलते हैं (क्योंकि संकलन समय नहीं है), लेकिन मैं स्थैतिक वाक्यविन्यास-जाँच उपकरणों से अपेक्षा करूँगा कि वे कम से कम आंशिक रूप से उस समस्या को हल करने के लिए समय के साथ विकसित हों।


मैंने पहले कभी किसी को यह कहते हुए नहीं सुना कि वह जावास्क्रिप्ट प्रोटोटाइप वस्तुओं को पसंद करता है।
erkkallen

6

गतिशील भाषाओं के लिए बताए गए फायदों में से एक कोड को बदलना और चलाना जारी रखना है। पुनर्मूल्यांकन करने की आवश्यकता नहीं है। VS.Net 2008 में, जब डीबगिंग करते हैं, तो आप वास्तव में कोड को बदल सकते हैं, और बिना रीकंपाइल के जारी रख सकते हैं। संकलक और आईडीई में प्रगति के साथ, क्या यह संभव है कि यह और गतिशील भाषाओं का उपयोग करने के अन्य फायदे चले जाएंगे।


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


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

6

आह, जब मैंने इसी तरह का प्रश्न पोस्ट किया था, तो मैंने इस विषय को नहीं देखा था

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

कार्यक्रम की रूपरेखा बनाना।

संकलित भाषाओं में करने के लिए इसकी बहुत मुश्किल है, आम तौर पर, उदाहरण के लिए ले लो .Net। इसे काम करने के लिए आपको हर तरह के मम्बो जंबो बनाने होंगे और यह सामान्य रूप से कोड के साथ समाप्त होता है जो लगभग 100 गुना धीमी गति से चलता है।

अधिकांश गतिशील भाषाओं में मेटाप्रोग्रामिंग करने का एक तरीका है और यह एक ऐसी चीज़ है जो मुझे वहाँ रखती है - किसी भी तरह के कोड को मेमोरी में बनाने की क्षमता और इसे पूरी तरह से मेरे ऐपेटॉन में एकीकृत करने की।

उदाहरण के लिए Lua में कैलकुलेटर बनाने के लिए, मुझे केवल इतना करना है:

print( loadstring( "return " .. io.read() )() )

अब, .Net में ऐसा करने का प्रयास करें।


6
क्या आप अक्सर कैलकुलेटर बनाते हैं? मुझे लगता है कि "मैं 20 वर्णों में हैलो वर्ल्ड एप्लिकेशन बना सकता हूं" के प्रकार का कोई तर्क नहीं है।
एरिक्कलीन

आपने बस दिखाया कि आपके पास कितनी कम कल्पना है। प्रोग्रामिंग एम 8 के लिए बुरी बात। जीएल।
18-22 को 18

व्यक्तिगत होने की जरूरत नहीं। मुझे लगता है कि बिंदु वैध है। यह बहुत आसान है (और बहुत सामान्य) प्रकार के तर्कों के साथ आने के लिए 'सी # में कंसोल के लिए एक लाइन प्रिंट करने के लिए आपको कितना कोड लिखना है, लुआ में मैं सिर्फ प्रिंट ("हैलो, दुनिया") कह सकता हूं '। लेकिन बायलरप्लेट का अनुपात वास्तविक कोड वैसा नहीं रहता, जब प्रोजेक्ट वास्तविक आकार में विकसित होते हैं।
एरिक्कलेन

2
बकवास। यहाँ कुछ वैधानिक रूप से टाइप किया गया F # है जो .NET पर चलता है: Linq.QuotationEvaluator.Evaluate <@ 2 + 3 @>
JD

6

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

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

 lindex $mylist end-2

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


1
किस तरह से यह $ mylist.length-2 से बेहतर है? मेरे लिए, ऐसा लगता है कि इस तरह के वाक्यविन्यास में केवल वास्तविक लाभ के साथ अतिरिक्त कीवर्ड जोड़े जाते हैं, जिसका अर्थ है सीखने के लिए कठिन भाषा।
११:१६

मैं थोड़ा सा पांडित्यपूर्ण होऊंगा और इंगित करूंगा कि यह किसी भी कीवर्ड को भाषा से नहीं जोड़ता है, यह उस कमांड में जोड़ता है। यह कहा जा रहा है, यह स्पष्ट होने की बात है। "अंत" शब्द वहां पहुंचने के बजाय इरादे / अर्थ को व्यक्त करता है; यह कहता है "अंतिम तत्व"।
RHSeeger

1
अगर मैं आपको सही समझूं, तो यह मामला और भी बुरा है। आपको प्रत्येक कमांड के लिए नया सिंटैक्स सीखना होगा। जब कमांड फ़ू में प्रयोग किया जाता है तो कीवर्ड बार का क्या अर्थ है?
erikkallen

@erikkallen: यह एक मानक लाइब्रेरी के विभिन्न इनपुट किसी भी अन्य भाषा के लिए सीखने के समान है। वास्तव में, कोर Tcl में हर कमांड, मानक पुस्तकालय के कमोबेश हिस्से है। सिद्धांत रूप में, ऐसी कोई आज्ञा नहीं है जिसे हटाया नहीं जा सकता है और शुद्ध Tcl कोड के रूप में फिर से लागू किया जा सकता है। कहा जा रहा है कि, इनपुट्स और वे जो मतलब है, उस लाइब्रेरी में काफी सुसंगत हैं (यानी, अंत का मतलब सभी कमांड्स में समान है)
RHSeeger

5

मुझे लगता है कि इस तरह का तर्क थोड़ा मूर्खतापूर्ण है: "चीजें जो आमतौर पर कंपाइलर द्वारा पकड़ी गई होती हैं जैसे कि गलत वर्तनी वाले चर नाम और एक चर के लिए गलत प्रकार का मान असाइन करना तब तक नहीं होता है जब तक कि रनटाइम न हो" हाँ एक सही है। PHP डेवलपर मुझे रनटाइम तक गलत वेरिएबल जैसी चीजें दिखाई नहीं देतीं, लेकिन C ++ में BUT रनटाइम मेरे लिए स्टेप 2 है (जो कि केवल संकलित भाषा है मेरे पास कोई अनुभव है) यह चरण 3 है, लिंक करने के बाद, और संकलन।
मेरा कोड संकलन है
यह उल्लेख करने के लिए कि मेरे कोड को चलाने के लिए तैयार होने के बाद मुझे बचाने में कुछ सेकंड लगते हैं, संकलित भाषाओं के विपरीत जहां यह शाब्दिक घंटे ले सकता है। मुझे खेद है अगर यह थोड़ा गुस्सा लगता है, लेकिन मैं एक दूसरे दर प्रोग्रामर के रूप में मेरे साथ व्यवहार करने वाले लोगों से थक गया हूं क्योंकि मुझे अपना कोड संकलित करने की आवश्यकता नहीं है।


3
ओह माय, प्रैक्टिस में ... ठीक है, हो सकता है कि मैं सिर्फ अक्षम हूं, लेकिन PHP में मिसटेकिंग वैरिएबल से गॉटचैच बहुत बड़ी समय की आपदाएं हैं। खासकर जब आप एक विशाल कोड आधार प्राप्त करते हैं जो आपको सख्त चेतावनी को चालू करने की अनुमति नहीं देता है।
दान रोसेनस्टार्क

1
आप हमेशा सख्त error_reporting () को चालू कर सकते हैं और कोई भी अच्छी IDE 99% परिवर्तनशील गलत वर्तनी को रोक देगा।
Unwwnech

किसी भी भाषा में किसी को भी याद नहीं कर सकते हैं, हालांकि इन गलतियों को ढूंढना आसान (संभवतः तेज) है क्योंकि लिंक पर मेरा दुभाषिया एक ही कदम पर है / संकलित करता है ताकि फिर से आपका खंडन बेमतलब हो।
UnkwnTech

4
-1: संकलन तर्क वास्तविक तर्क से विचलित कर रहा है, जो टाइपिंग, स्टेटिक या डायनामिक है। गतिशील और स्थिर दोनों भाषाओं को संकलित और व्याख्यायित किया जा सकता है। वर्तनी और संकलन के समय की शिकायतें इन मुद्दों से बाहर हैं।
BefittingTheorem

सचमुच घंटे? आप एक मूल आईबीएम पीसी पर क्या संकलित कर रहे हैं?
xcramps

3

यह तर्क अधिक जटिल है ( एक दिलचस्प अवलोकन के लिए येज का लेख "इज़ टाइपिंग स्ट्रांग एनफ" पढ़ें )।

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

डायनेमिक भाषाओं का मुख्य लाभ एक) क्षमता है (जो जरूरी नहीं कि हर समय उपयोग किया जाना चाहिए) और बी) बॉयड लॉ ऑफ Iteration

बाद का कारण बड़े पैमाने पर है।


3
टाइप इंफ़ेक्शन डायनामिक टाइपिंग के समान नहीं है, क्योंकि एक अनुमानित प्रकार को अभी भी संकलित समय पर स्पष्ट रूप से ज्ञात करने की आवश्यकता है।
मार्कस डाउनिंग

4
-1: C # स्टेटिकली टाइप्ड है, डायनामिक टाइप नहीं।
जूलियट

2

हालांकि मैं रूबी का बहुत बड़ा प्रशंसक नहीं हूं, फिर भी मुझे लगता है कि गतिशील भाषाएं वास्तव में अद्भुत और शक्तिशाली उपकरण हैं।

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

यह नौसिखियों को यह पढ़ने के लिए मजबूर करता है कि वे क्या लिख ​​रहे हैं। मुझे पता है कि PHP सीखना मुझे वास्तव में टाइप करने के लिए अधिक चौकस होना सिखाता है, जिसने संकलित भाषाओं में भी मेरी प्रोग्रामिंग में सुधार किया है।

अच्छी IDEs आपके लिए यह जानने के लिए पर्याप्त इंटेलीजेंस देंगी कि क्या एक चर को "घोषित" किया गया है और वे आपके लिए कुछ प्रकार के अनुमान लगाने का भी प्रयास करते हैं ताकि आप बता सकें कि एक चर क्या है।

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

और रिकॉर्ड के लिए, मैं एक पूर्णकालिक .NET डेवलपर हूं, और मुझे संकलित भाषाएं पसंद हैं। मैं केवल अपने खाली समय में उनके बारे में अधिक जानने के लिए और डेवलपर के रूप में खुद को बेहतर बनाने के लिए गतिशील भाषाओं का उपयोग करता हूं।


2
मुझे कोई भी तर्क मिलता है जो "अनुभवी डेवलपर्स के लिए उपयोग करता है" यह वास्तव में एक मुद्दा नहीं है "आमतौर पर थोड़ा खतरनाक होता है। जैसा कि, मैं कह सकता हूं कि C ++ में OOP / मेमोरी मैनेजमेंट आदि एक अनुभवी डेवलपर के लिए कोई समस्या नहीं है। चर घोषणा और बुनियादी प्रकार की जाँच के रूप में कुछ सरल होने के कारण मुझे इतना सतर्क और अनुभवी होने की आवश्यकता क्यों है? मैं बहुत ज्यादा बल्कि यह चाहता हूं कि भाषा मुझे प्रोग्राम करने में मदद करती है बजाय इसके कि मैं ऐसी त्रुटियां करूं जिन्हें आसानी से स्टैटिक अप्रोच का उपयोग करके रोका जा सके। और मुझे लगता है कि हास्केल या स्काला को डायनेमिक या स्टैटिक टाइपिंग चेक आउट करने के लिए वर्बोसिटी बहुत कम है।
BefittingTheorem

मैं सहमत हूं, मुझे यह तर्क थोड़ा खतरनाक भी लगता है। मेरा कहना यह है कि कोडिंग के समय टाइप जाँच का मुद्दा बहुत बुरा नहीं है। आपको 90% मामलों में त्रुटि तुरंत दिखाई देगी। यह 10% मामलों के लिए एक समस्या है जहां एक अंतर्निहित प्रकार रूपांतरण तनाव पैदा कर सकता है, हालांकि जब आप जानते हैं कि आप क्या कर रहे हैं, तो आप ऐसा नहीं होने देंगे। JavaScipt 10% का एक बेहतरीन उदाहरण है जहाँ यह खतरनाक हो सकता है, लेकिन मैंने इसे विकसित करने के लिए अपने सभी समय में कभी भी इसका काट नहीं लिया है।
डैन हर्बर्ट

@ ब्रायन हेमलिन: तो आपको नफरत करनी चाहिए C! अपने आप को पैर में गोली मारने के कई तरीके, फिर भी बहुत इस्तेमाल किया गया और (कुछ मामलों में) प्यार किया।
एस्टेबन कुबेर

2

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

  • किस चर में कौन सा प्रकार है
  • जरूरत के रूप में एक स्ट्रिंग को गतिशील रूप से कैसे विकसित किया जाए
  • कोड कैसे लिखें ताकि अगर मैं एक चर का प्रकार बदलूं, तो मुझे उसके साथ बातचीत करने वाले सभी फ़ंक्शन को फिर से लिखना नहीं पड़ेगा

ऐसी समस्याएं जो व्यवसाय की जरूरतों के करीब हैं

  • डेटा डेटाबेस में बचत / अद्यतन आदि कर रहा है, मैं इसे अपनी साइट पर ट्रैफ़िक चलाने के लिए कैसे उपयोग कर सकता हूं

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

ये कुछ तर्क हैं जिनका उपयोग मैं अपनी नौकरी और अनुभव को गतिशील भाषाओं में सही ठहराने के लिए करता हूँ!


1
आपकी बात 1 और 3 समान है, और IMO स्थिर टाइपिंग पसंद करने का कारण है। यदि आप किसी ऐसी चीज को बदलते हैं जो संगत नहीं है तो क्या होगा? यदि आप एक चर को एक इंट से स्ट्रिंग में बदलते हैं तो आप शायद इसे एक कारण के लिए करते हैं। और यदि नहीं, तो परियोजना का पुनर्निर्माण तब तक करें, जब तक कि सभी त्रुटियां समाप्त न हो जाएं। यह आमतौर पर उतना लंबा नहीं होता है, और कभी-कभी इस प्रक्रिया में आपको एक वास्तविक समस्या का पता चलता है कि आपको खुशी है कि संकलक ने आपको बताया। बिंदु 2 अमान्य है, एक स्ट्रिंग बढ़ रही है सभी भाषाओं में स्वचालित रूप से प्रदर्शन किया जाता है (मुझे लगता है, कम से कम सभी मैं पिछले 15 वर्षों का सामना कर रहा हूं) सी को छोड़कर
एरिक्क्लेन ने

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

1

मुझे लगता है कि दोनों शैलियों में अपनी ताकत है। यह या तो / या सोच मेरी राय में हमारे समुदाय के लिए अपंग है। मैंने उन आर्किटेक्चर में काम किया है जो ऊपर से नीचे तक सांख्यिकीय रूप से टाइप किए गए थे और यह ठीक था। मेरा पसंदीदा आर्किटेक्चर UI स्तर पर गतिशील रूप से टाइप किया गया है और कार्यात्मक स्तर पर सांख्यिकीय रूप से टाइप किया गया है। यह एक भाषा अवरोध को भी प्रोत्साहित करता है जो UI और फ़ंक्शन के पृथक्करण को लागू करता है।

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


1

FWIW, अधिकांश अनुप्रयोगों के संकलन में घंटे नहीं लगने चाहिए। मैंने उन अनुप्रयोगों के साथ काम किया है जो 200-500k लाइनों के बीच हैं जो संकलन में मिनट लगते हैं। निश्चित रूप से घंटे नहीं।

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

मुझे अपने विजुअल स्टूडियो को एक रनिंग प्रोसेस में संलग्न करना पसंद है। क्या अन्य आईडीई ऐसा कर सकते हैं? हो सकता है, लेकिन मैं उनके बारे में नहीं जानता। मैं हाल ही में कुछ PHP विकास कार्य कर रहा हूँ और ईमानदार होना यह सब बुरा नहीं है। हालाँकि, मैं C # और VS IDE को बहुत पसंद करता हूँ। मुझे लगता है कि मैं तेजी से काम करता हूं और समस्याओं का तेजी से सामना करता हूं।

तो शायद यह मेरे लिए डायनेमिक / स्टैटिक लैंग्वेज इश्यू से ज्यादा टूलसेट वाली बात है?

एक आखिरी टिप्पणी ... यदि आप एक स्थानीय सर्वर बचत के साथ विकसित कर रहे हैं, तो संकलन करने की तुलना में तेज़ है, लेकिन अक्सर मैं अपने स्थानीय मशीन पर सब कुछ एक्सेस नहीं कर पाता। डेटाबेस और fileshares कहीं और रहते हैं। वेब सर्वर पर एफ़टीपी करना आसान है और फिर त्रुटि खोजने के लिए मेरा PHP कोड चलाएं और इसे ठीक करें और फिर से एफटीपी करें।


1
मैं कहूंगा कि संकलन का समय वास्तव में इस्तेमाल की जा रही भाषा पर निर्भर करता है। .Net में, उस आकार की एक परियोजना को संकलित करने में केवल कुछ मिनट लग सकते हैं। यदि यह सी किया जाता है, तो मैं इसे सब कुछ संकलित करने में थोड़ा समय लगा सकता हूं।
किबी

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

BTW, VS jcxsoftware.com/vs.php के लिए एक php प्लगइन है। मैंने इसे अभी तक आज़माया नहीं है क्योंकि यह मुफ़्त नहीं है, लेकिन मैंने जो सुना है वह Zp के रूप में php के साथ उतना ही अच्छा है (5.5 के रूप में 6 बेकार) वीएस की अच्छाई
UnkwnTech

आप बस इस बात पर प्रहार करते हैं कि सबसे बड़ी वजहों में से कोई भी गतिशील भाषाओं का उपयोग नहीं करता है। किसी ने कोड आईडीई की एक बड़ी फैंसी 2 मीटर लाइनों का निर्माण नहीं किया है जो उनमें से किसी एक के आसपास आपके लिए लगभग कुछ भी कर सकता है, इसलिए हर कोई "वे सुरक्षित नहीं हैं, इसलिए यह गलतियाँ करना बहुत आसान है"
RCIX

मैं सुरक्षित गैर-प्रकार के बारे में परवाह नहीं करता। इतना मुझे परेशान नहीं करता है। मेरी सबसे बड़ी शिकायत यह है कि यह सिर्फ शारीरिक रूप से अधिक समय लेती है और समस्याओं को ट्रैक करने के लिए अक्सर कठिन होती है। मेरे लिए मुझे लगता है कि विकास की शैली मेरे काम करने के तरीके से मेल खाती है।
bdwakefield

1

एक निश्चित संदर्भ में उत्पादकता। लेकिन यह सिर्फ एक वातावरण है जिसे मैं जानता हूं, कुछ अन्य लोगों की तुलना में जिन्हें मैंने जाना है या उपयोग किया है।

सीसाइड के साथ स्क्वीक / फेरो पर स्मॉलटाक जटिल अनुप्रयोगों के लिए ASP.Net (/ MVC), RoR या विकेट की तुलना में अधिक प्रभावी और कुशल वेब प्लेटफॉर्म है। जब तक आपको किसी ऐसी चीज के साथ इंटरफेस करने की आवश्यकता होती है जिसमें पुस्तकालयों में से एक है, लेकिन स्मॉलटाक नहीं।

गलत वर्तनी वाले नाम IDE में लाल हैं, IntelliSense काम करता है लेकिन उतना विशिष्ट नहीं है। वेबपृष्ठों पर रन-टाइम त्रुटियाँ कोई समस्या नहीं हैं, लेकिन एक सुविधा है, एक डीबगर को लाने के लिए क्लिक करें, एक मेरी IDE पर क्लिक करें, डीबगर में बग को ठीक करें, सहेजें, जारी रखें। सरल बग के लिए, इस चक्र के लिए गोल-यात्रा का समय 20 सेकंड से कम है।


1

डायनेमिक लैंग्वेज स्ट्राइक बैक

http://www.youtube.com/watch?v=tz-Bb-D6teE

डायनेमिक लैंग्वेज पर चर्चा करने वाली एक बात, कुछ सकारात्मकताएं क्या हैं, और कितने नकारात्मक वास्तव में सच नहीं हैं।


1

क्योंकि मैं बॉक्स के प्रकार को घोषित करने के लिए बेवकूफ मानता हूं। प्रकार इकाई के साथ रहता है, कंटेनर के साथ नहीं। स्टैटिक टाइपिंग का एक अर्थ था जब बॉक्स के प्रकार का प्रत्यक्ष परिणाम था कि मेमोरी में बिट्स की व्याख्या कैसे की गई थी।

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

इसके अलावा, मैं MyFancyObjectInterface f = new MyFancyObject () जैसे सामान लिखने से थक गया हूं। DRY सिद्धांत कोई भी?


1

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

सी#

using System;
class MyProgram
{
    public static void Main(string[] args)
    {
        foreach (string s in args)
        {
            Console.WriteLine(s);
        }
    }
}

लुआ:

function printStuff(args)
    for key,value in pairs(args) do
       print value .. " "
    end
end
strings = {
    "hello",
    "world",
    "from lua"
}
printStuff(strings)

3
यह गैर-तर्क है, वास्तव में। हम नए प्रोग्रामर नहीं हैं; यह बहस गैर-ब्रांड-नए प्रोग्रामरों के बीच सबसे अधिक उग्र है।
peSHIr

यह सिर्फ एक कारण है कि प्रोग्रामर गतिशील भाषाओं को पसंद करने के लिए क्यों आ सकते हैं; वे आम तौर पर दूसरों की तुलना में समझने में अधिक आसान होते हैं और इस प्रकार उन्हें अधिक नए प्रोग्रामर आकर्षित करते हैं।
RCIX

1

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

व्यक्तिगत हिस्सा विकास और परीक्षण की गति के लिए कुछ चेक और अन्य चरणों को बंद करने के बारे में है (जबकि संभवतः कुछ सीपीयू प्रदर्शन दे रहा है)। कुछ लोग हैं जिनके लिए यह मुक्ति है और एक प्रदर्शन को बढ़ावा देता है, और कुछ ऐसे हैं जिनके लिए यह बिल्कुल विपरीत है, और हाँ यह आपकी भाषा के विशेष स्वाद पर भी निर्भर करता है। मेरा मतलब है कि कोई भी यहां तेजी, विकास के लिए जावा चट्टानों को नहीं कह रहा है, या पीएचपी एक ठोस भाषा है जहां आप शायद ही कभी टाइपो को स्पॉट कर पाएंगे।


1

मुझे स्थिर और गतिशील दोनों भाषाओं से प्यार है। प्रत्येक परियोजना जिसे मैंने 2002 से शामिल किया है, एक एम्बेडेड पायथन व्याख्या के साथ C / C ++ अनुप्रयोग है। यह मुझे दोनों दुनियाओं में सर्वश्रेष्ठ देता है:

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

मुझे लगता है कि सिस्टम को बनाने के लिए एक सांख्यिकीय टाइप की गई भाषा का मिश्रण और इसे कॉन्फ़िगर करने के लिए एक गतिशील प्रकार की भाषा मुझे लचीलापन, स्थिरता और उत्पादकता प्रदान करती है।

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


1

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

अच्छा, ठहरो, यहाँ क्या चर्चा है? गतिशील संकलन? या गतिशील टाइपिंग? जावास्क्रिप्ट दोनों आधारों को शामिल करता है इसलिए मुझे लगता है कि मैं दोनों के बारे में बात करूंगा:

गतिशील संकलन :

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

लेकिन जब संकलन बंद कर दिया जाता है तो आप तेजी से परिणाम देख सकते हैं। यह एक फायदा है। मैं फ़ाइल को सहेजने और अपने कार्यक्रम को तुरंत त्वरित रूप से देखने का आनंद लेता हूं।

एक और लाभ यह है कि आप रनटाइम पर कोड लिख और संकलित कर सकते हैं । यह संकलित कोड में संभव है या नहीं, मुझे नहीं पता। मुझे लगता है कि यह होना चाहिए, क्योंकि जो भी जावास्क्रिप्ट संकलित होता है वह अंततः मशीन कोड और सांख्यिकीय रूप से संकलित होता है। लेकिन एक गतिशील भाषा में यह एक तुच्छ बात है। कोड स्वयं लिख और चला सकते हैं। (और मुझे पूरा यकीन है कि .NET ऐसा कर सकता है, लेकिन CIL जो .NET संकलन करता है वह गतिशील रूप से फ्लाई एनीवे पर संकलित है, और यह C # में इतना तुच्छ नहीं है)

गतिशील टाइपिंग :

मुझे लगता है कि डायनेमिक टाइपिंग स्टैटिक टाइपिंग की तुलना में अधिक अभिव्यंजक है। ध्यान दें कि मैं अनौपचारिक रूप से शब्द का उपयोग यह कहने के लिए कर रहा हूं कि डायनामिक टाइपिंग कम के साथ अधिक कह सकती है। यहाँ कुछ जावास्क्रिप्ट कोड है:

var Person = {};

क्या आप जानते हैं कि अब व्यक्ति क्या है? यह एक सामान्य शब्दकोश है। मे यह कर सकती हु:

व्यक्ति ["First_Name"] = "जॉन";
व्यक्ति ["अंतिम_नाम"] = "स्मिथ";

लेकिन यह भी एक वस्तु है। मैं इनमें से किसी भी "कुंजी" का उल्लेख कर सकता हूं:

Person.First_Name

और मेरे द्वारा आवश्यक कोई भी विधि जोड़ें:

Person.changeFirstName = फ़ंक्शन (नया नाम) {
  this.First_Name = newName;
};

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


1

इसी विषय पर अच्छा ब्लॉग पोस्ट: पायथन मेक नर्वस

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


0

क्योंकि यह मजेदार मस्ती है। यह एक के लिए स्मृति आवंटन के बारे में चिंता न करने के लिए मजेदार है। यह मजेदार है संकलन का इंतजार नहीं। आदि आदि


19
कचरा संग्रह स्थैतिक / गतिशील प्रकार की जाँच करने के लिए ऑर्थोगोनल है।
mmagin

0

कमजोर टाइप की गई भाषाएं आपके डेटा को प्रबंधित करने के तरीके में लचीलापन देती हैं।

मैंने कई वर्गों के लिए पिछले वसंत VHDL का उपयोग किया, और मुझे बिट्स / बाइट्स का प्रतिनिधित्व करने का उनका तरीका पसंद है, और यदि आप 9-बिट बस में 6-बिट बस को असाइन करने का प्रयास करते हैं, तो संकलक त्रुटियों को कैसे पकड़ता है। मैंने इसे C ++ में फिर से बनाने की कोशिश की, और मैं मौजूदा प्रकारों के साथ आसानी से काम करने के लिए बड़े करीने से टाइप करने के लिए एक उचित संघर्ष कर रहा हूं। मुझे लगता है कि मजबूत प्रकार की प्रणालियों से जुड़े मुद्दों का वर्णन करने के लिए स्टीव येजेग बहुत अच्छा काम करते हैं।

वर्बोसिटी के बारे में: मुझे लगता है कि जावा और सी # बड़े में काफी वर्बोस हैं (चलो एक बिंदु को "साबित करने के लिए छोटे एल्गोरिदम नहीं")। और, हां, मैंने दोनों में लिखा है। सी ++ एक ही क्षेत्र में भी संघर्ष करता है; वीएचडीएल यहां सुसाइड करता है।

Parsimony सामान्य रूप से गतिशील भाषाओं का एक गुण प्रतीत होता है (मैं उदाहरण के रूप में पर्ल और एफ # प्रस्तुत करता हूं)।


एक 9-बिट बस को 6-बिट के लिए आवंटित करने के बराबर है, एक छोटी या कुछ इस तरह से एक इंट को असाइन करने का प्रयास करना है। यह C # (और जावा, मुझे लगता है) में एक त्रुटि है, और किसी भी C या C ++ कंपाइलर को इसके बारे में चेतावनी जारी करने में सक्षम होना चाहिए।
erikkallen

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