आपकी पसंदीदा भाषा के बारे में आपको किन पांच चीजों से नफरत है? [बन्द है]


403

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

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

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

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


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

नफरत यह पता लगाने का एकमात्र आयाम नहीं है कि लोग कितना जानते हैं, लेकिन मैंने पाया है कि यह बहुत अच्छा है। जिन चीजों से वे नफरत करते हैं, वे मुझे एक सुराग भी देते हैं कि वे विषय के बारे में कितना अच्छा सोच रहे हैं।


11
यह पुरानी "आपकी पसंदीदा भाषा" प्रश्न पर एक बहुत अच्छा स्पिन है। अच्छा औचित्य।
टॉम लीज 23

14
मुझे यह दिलचस्प लगता है कि SO के पास एक बड़ी .NET ऑडियंस होने के बावजूद, इस लेखन के समय 24 उत्तर हैं, जिनमें से केवल एक (मेरा) .NET या .NET भाषा के बारे में है। मुझे नहीं पता कि यह एसओ या .NET के बारे में क्या कहता है, लेकिन यह दिलचस्प है ...
जॉन स्कीट

22
C / C ++ के साथ प्रोग्रामिंग के पहले 15 साल, मुझे नफरत है (वर्णमाला के क्रम में): 1. पॉइंटर्स 2. पॉइंटर्स 3. पॉइंटर्स 4. पॉइंटर्स 5. पॉइंटर्स
ileon

4
मुझे आश्चर्य है कि लोगों ने अपनी पसंद की भाषा से नफरत करने के बारे में कितनी टिप्पणियां कीं क्योंकि उन्हें समझ में नहीं आया कि अपनी पसंद की भाषा में कैसे प्रोग्राम किया जाए ....
Kris.Mitchell

3
यह एक शानदार सवाल है। यदि आप सोच रहे हैं कि कुछ भाषा क्या है, तो इस पृष्ठ पर इसके बारे में 3 अलग-अलग जवाबों को पढ़ना आसानी से सबसे अच्छा उपयोगी जानकारी-के लिए खर्च किया जा सकता है। यदि आप पहले से ही भाषा जानते हैं, तो प्रोग्रामर के अनुभव (और विनम्रता) के स्तर को मापने का एक शानदार तरीका है।
j_random_hacker

जवाबों:


182

मैं जावा के बारे में पांच बातें:

  • प्रथम श्रेणी के कार्य नहीं।
  • किसी प्रकार का कोई इंप्रेशन नहीं।
  • जैसे ग्राफिक्स में साने चूक की कमी।
  • NullPointerException क्या अशक्त है के बारे में अधिक जानकारी नहीं है।
  • व्यर्थ की "विन्यास योग्य" रूपरेखा / सेवा प्रदाता इंटरफेस / फैक्ट्री क्लास / डिपेंडेंसी इंजेक्शन सिस्टम का प्रसार। कॉन्फ़िगरेशन का उपयोग लगभग कभी नहीं किया जाता है, DRY का उल्लंघन किया जाता है जैसे, और आकार में कोड चौगुनी और पठनीयता में आधा।

मुझे पता है, मुझे स्कैला की जांच करनी चाहिए।


7
@ बाथ: एनपीई को स्टैक ट्रान्स की पहली पंक्ति में दिखाया गया है। इसमें (अधिकांश समय) वर्ग, जावा फ़ाइल नाम और लाइन नंबर जैसे: "at your.faulty.code.Instance (Intance.java:1234)" तब आप बस उस फ़ाइल को खोलते हैं, उस रेखा पर जाएँ और वहाँ एक चर है, जिसके पास कुछ भी नहीं है।
OscarRyz

35
@ ऑस्कर रेयेस - एर, हम जानते हैं कि। लेकिन उस लाइन पर कई चर हो सकते हैं, और अपवाद संदेश मुझे नहीं बताता कि कौन सा शून्य है।
जार्कोनैन

10
स्काला के अपने मौसा भी हैं। हालांकि, यह जावा की तुलना में शानदार है।
गेहूं

10
+1 फ्रेमवर्क आदि के प्रसार के लिए
Erich Kitzmueller

6
@ वैलेंटिन, बस NullPointerException के मज़ाकिया अंदाज़ा लगाओ कि रात भर चलने वाले भारी भरकम लॉज़ाइल में से एक है और आपको यह पता लगाने की ज़रूरत है कि क्या हुआ ... डीबगिंग एक विकल्प नहीं है।
Thorbjørn Ravn Andersen

216

वाह, मुझे आश्चर्य है कि एसक्यूएल ने अभी तक यहां नहीं बनाया है। लगता है कि कोई भी इसे प्यार करता है इसका मतलब है :)

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

... और कुछ बोनस कारणों से इसे नफरत है, बिना किसी अतिरिक्त शुल्क के

  • जहां क्लॉज अंतिम हो जाता है, समय से पहले एक अद्यतन या DELETE को निष्पादित करना आसान बना देता है, जिससे पूरी तालिका नष्ट हो जाती है। इसके बजाय, जहां कहीं भी सामने जाना चाहिए।
  • रिलेशनल डिवीजन को लागू करना मुश्किल है।
  • मैं NULL को मान सेट कर सकता हूं, लेकिन मैं NULL के साथ समानता के लिए इसका परीक्षण नहीं कर सकता। मैं IS NULL की जांच कर सकता हूं, लेकिन यह सिर्फ कोड को उलझाता है - अनावश्यक रूप से, मेरी राय में।
  • हमें स्तंभ पर एक उपनाम स्थापित करने के बजाय एक समूह स्तंभ के लिए सूत्र का पूरी तरह से सम्मान करने की आवश्यकता है, और फिर समूह द्वारा उपनाम (या स्तंभ सूची जैसा SORT के साथ)?

7
हो सकता है कि कोई भी इसे तब तक प्यार करना नहीं सीख सकता जब तक वे इसे एक भाषा के रूप में सोचना बंद नहीं करते। :)
एलन मूर

4
सब कुछ के लिए +1। और फिर भी लोगों को आश्चर्य है कि मैं
ओआरएम

2
@ एलन एम ... यह नहीं है कि एल किस लिए खड़ा है? :)
केव

29
मुझे समझ नहीं आ रहा है कि INSERT के लिए सिंटैक्स UPDATE से इतना अलग क्यों है। और MERGE समझ से बाहर है।
लाजमोन

3
IS NULL की आवश्यकता स्पष्ट होनी चाहिए, यदि आप मानते हैं कि NULL एक तीसरा संभावित परिणाम है, TRUE और FALSE के ठीक बाद। चूंकि यह अर्थ "अज्ञात" है आप यह नहीं बता सकते हैं कि क्या कुछ ऐसा है जो अज्ञात है दूसरी चीज से मेल खाता है जो अज्ञात भी है। एक और उदाहरण: यदि NULL के बराबर होता है, तो इसका मतलब यह होगा कि JOIN बनाने की पूरी अवधारणा असंभव होगी, क्योंकि किसी भी NULL मान को दूसरे NULL मान से मिलान किया जा सकता है। यदि आप इसे समझते हैं (जिसे टर्नरी लॉजिक भी कहा जाता है) की तुलना में आप फुल के खिलाफ परीक्षण के लिए "आईएस" ऑपरेटर को शुरू करने का कारण समझ सकते हैं।
एलेक्स

159

जावास्क्रिप्ट :

  1. सभी ठंडी चीजें पागलपन से जटिल होती हैं, लेकिन फिर, सभी ठंडक को इतनी कम मात्रा में भी लपेटा जाता है कि आप इसका अनुसरण करने के लिए संघर्ष करना बेवकूफी समझते हैं

  2. '+' एक कमजोर टाइप की भाषा में सहमति के लिए ऑपरेटर का एक बेतुका विकल्प है। क्या वे नोब्स को डराने की कोशिश कर रहे थे ?

  3. यह एक क्रॉस-ब्राउज़र संगतता माइनफ़ील्ड है (अगर यह चालू है या नहीं, तो कोई बात नहीं)

  4. यह आम तौर पर अविश्वसनीय है - मैलापन से जुड़ा हुआ है जैसे कि बैक बटन को ब्लॉक करना, पॉप-अप जो कभी नहीं मरते हैं, आदि।

  5. यह डिबग करना लगभग असंभव है क्योंकि केवल कुछ अलग त्रुटि संदेश और कुछ अलग प्रकार (संख्या, स्ट्रिंग, ऑब्जेक्ट, आदि) हैं।

अगर यह jQuery के लिए नहीं था, तो मैं शायद उससे उतना ही नफरत करूंगा जितना मैं करता था :)


15
मैं समाधि से सहमत हूं। अपने आप में ECMAscript एक सुंदर और शक्तिशाली भाषा है। यह pesky ब्राउज़र (: खाँसी: IE) है जो इसके नाम को कुतर देता है।
टीजे एल

32
@Mausch: जहां में जावास्क्रिप्ट को लाइव करता है विशाल मामलों के बहुमत? आप कह रहे हैं कि "कारें ग्लोबल वार्मिंग में योगदान नहीं करती हैं, यह ऐसी कारें चला रही हैं जो ऐसा करती हैं" - सच है, लेकिन यह बात याद आ रही है - आप कार के साथ और क्या करते हैं?
jTresidder

20
@ क्रिस: हाँ, "+" एक दृढ़ता से टाइप की गई भाषा में पायथन के लिए एक अच्छा ऑपरेटर है (जैसे पायथन)। एक कमजोर टाइप की गई भाषा में (जैसे जावास्क्रिप्ट या सी) यह भयानक है; यह तय करता है (चुपचाप!) कि 'योग:' + 2 + 3 'योग: 5' नहीं है, लेकिन 'योग: 23' है। अधिक जावास्क्रिप्ट अनुभव वाला कोई व्यक्ति बेहतर उदाहरण दे सकता है।
श्रीवत्सआर

5
हाँ, सी दुर्बलता से लिखा गया है, कहते हैं की तुलना में,, पायथन (जैसे आप के लिए पूर्णांकों असाइन कर सकते हैं charरों, डाली कुछ भी शून्य * संकेत, आदि के माध्यम से कुछ भी करने के लिए) यह है स्थिर बजाय टाइप किया गतिशील टाइप किया है, और यह भी आवश्यक है स्पष्ट बजाय टाइपिंग प्रकार का अनुमान, लेकिन वे मजबूत v / s कमजोर टाइपिंग के लिए असंबंधित हैं। [यादृच्छिक उदाहरण: पायथन में गतिशील मजबूत टाइपिंग निहित है, हास्केल में (वैकल्पिक रूप से स्पष्ट) स्थिर मजबूत टाइपिंग है, जावा में स्पष्ट (ज्यादातर स्थिर) मजबूत टाइपिंग है, सी में स्पष्ट स्थिर (अपेक्षाकृत कमजोर) टाइपिंग है। "" दृढ़ता से टाइप किया गया "और" कमजोर टाइप किया गया है। "वास्तव में अच्छी तरह से परिभाषित नहीं हैं।
श्रीवत्सआर

5
शास्त्रीय उदाहरण @ShreevatsaR है: '3'+'2'='32', '3'-'2'=1
थॉमस अहले

148

पीएचपी:

1) मुझे अनावश्यक चर बनाने के लिए मजबूर करता है:

$parts = explode('|', $string);
$first = $parts[0];

2) लैम्ब्डा का कार्यान्वयन तो लंगड़ा यह उपयोग करने के लिए लगभग समान है eval()और इसलिए छिपकर गलत मैंने इसका इस्तेमाल कभी नहीं किया है (देखें http://www.php.net/create_function )।

3) एक कोशिश / पकड़ प्रणाली जो केवल 80% त्रुटियों को पकड़ सकती है।

4) रेमेक्स समर्थन के रूप में लंगड़ा लैम्ब्डा समर्थन के रूप में लंगड़ा है क्योंकि इसे नियमित स्ट्रिंग्स के अंदर लिखा जाना है, जिससे सबसे मुश्किल से सीखने वाले प्रोग्रामिंग टूल में से एक को तीन गुना मुश्किल बना दिया जाता है। और PHP को "आसान" भाषा माना जाता है?!?!?

5) सुरक्षित रूप से $ _POST से दो बार लिखने या अपना स्वयं का फ़ंक्शन बनाने या '@' सेवा का उपयोग किए बिना सामान को सुरक्षित रूप से खींचने का कोई तरीका नहीं:

$x = isset($_POST['foo']['bar']) ? $_POST['foo']['bar'] : null;

6) बोनस जवाब: '@'। यदि आप अपने कोड को सही ढंग से लिखने से परेशान नहीं हो सकते हैं, तो बस '@' जोड़ें, और किसी के लिए भी बुरा है जिसे बाद में आपके कोड को डीबग करना है।


44
सूची के बारे में क्या ($ पहले) = विस्फोट ('।', $ स्ट्रिंग); ?
6

44
आदर्श रूप से, मैं some_function (विस्फोट ('।', $ स्ट्रिंग) [0]) का उपयोग करना चाहूंगा;
बहुत ज्यादा php

8
क्या अजीब चरखी? सब कुछ स्थानीय होने और आपको घोषित करने के लिए मजबूर करने के लिए जब आप वैश्विक उपयोग करना चाहते हैं तो यह एक अच्छा विचार है, यह नोब्स को ऐसे कार्यों को करने से रोकता है जो सिर्फ ग्लोबल्स का उपयोग करते हैं, बजाय तर्क और वापसी मूल्यों का उपयोग करने के जैसे उन्हें करना चाहिए।
स्क्रैपर

24
आप पैरामीटर क्रम के साथ फ़ंक्शंस के बारे में भूल गए हैं जो बेतरतीब ढंग से बदल रहा है
dusoft

39
आप verbNoun, verb_noun, noun_verb, nounverb, verbnoun, nounVerb, आदि के बारे में भूल गए> _>
Warty

135

सी ++

  • बहुत दूर तक बेतरतीब ढंग से भ्रष्ट स्मृति के लिए आसान है और लगभग असंभव-से- ज्ञात कीड़े बनाते हैं (हालांकि, Valgrind इसे ठीक करने की दिशा में एक लंबा रास्ता तय करता है)।
  • टेम्पलेट त्रुटि संदेश।
  • टेम्प्लेट का उपयोग करते समय अंत में एक फ़ाइल में सब कुछ शामिल करना आसान होता है, और फिर बेवकूफ संकलन समय मिलता है।
  • मानक पुस्तकालय आधुनिक युग में एक मजाक है (अभी भी डिफ़ॉल्ट रूप से कोई सूत्र या नेटवर्क नहीं है?)
  • C के माध्यम से पोकिंग के बहुत कम बिट्स (विशेष रूप से, लघु / int / अहस्ताक्षरित / आदि के बीच सभी रूपांतरण)

13
मैं एसटीएल से सहमत हैं, लेकिन मैं कहेंगे क्या है बहुत अच्छी नहीं है।
बर्नार्ड

22
यूनिकोड। मैं आस्की की सादगी का सम्मान करता हूं, लेकिन अच्छाई की खातिर, अब हम 21 वीं सदी में ठीक हो गए हैं।
विल्हेमटेल

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

6
C ++ की अधिकांश समस्याएं आईएसओ मानक होने और 10 वर्षों के लिए लॉक होने से आती हैं।
ग्रहम

7
+1 "टेम्प्लेट त्रुटि संदेश।"
जोआओ पोर्टेला

129

C # / .NET:

  • कक्षाएं डिफ़ॉल्ट रूप से सील की जानी चाहिए
  • कोई lockबयान नहीं होना चाहिए - इसके बजाय, आपके पास विशिष्ट लॉकिंग ऑब्जेक्ट होना चाहिए, और ऐसी विधियां होनी चाहिए जैसे कि Acquireडिस्पोजेबल लॉक टोकन लौटाएं। कोरोलरी: हर वस्तु के लिए एक मॉनिटर नहीं होना चाहिए।
  • GetHashCode()और Equals()नहीं होना चाहिए System.Object- हैशिंग के लिए सब कुछ उपयुक्त नहीं है। इसके बजाय, एक है IdentityComparerजो एक ही बात करता है, और रखने IComparer<T>, IComparable<T>, IEqualityComparer<T>और IEquatable<T>कस्टम तुलना के लिए इंटरफेस।
  • अपरिवर्तनीयता के लिए खराब समर्थन
  • विस्तार के तरीकों की खोज का खराब तरीका - यह केवल एक तथ्य से अधिक सचेत निर्णय होना चाहिए कि मैं एक नाम स्थान का उपयोग कर रहा हूं।

वे मेरे सिर के ऊपर से थे - कल मुझसे पूछें और मैं एक अलग 5 के साथ आऊंगा :)


22
डिफ़ॉल्ट रूप से सील: विरासत या तो एक वर्ग (जो समय लगता है और भविष्य के विकल्पों को सीमित करता है) या निषिद्ध में डिज़ाइन किया जाना चाहिए। हैशकोड / बराबर: यह जावा में भी बेकार है। एक दिन मैं इसके बारे में एक लंबा ब्लॉग पोस्ट लिखूंगा। इनहेरिट चेन में क्यों समान है, इसके ब्योरे के लिए प्रभावी जावा पढ़ें।
जॉन स्केट

88
डिफ़ॉल्ट रूप से सील करने का मतलब है कि आपने हर संभव कारण के बारे में सोचा है कि कोई आपकी कक्षा से विरासत में लेना चाहता है और आपको नहीं लगता कि उनमें से कोई भी समझ में आता है। क्षमा करें, लेकिन हममें से कोई भी ऐसा स्मार्ट नहीं है।
एड एस।

69
उस स्थिति में मैं आपके लिए अपने कोड से व्युत्पन्न होने के लिए पर्याप्त स्मार्ट नहीं हूं: क्योंकि मैं यह अनुमान नहीं लगा सकता कि भविष्य में मैं कौन से बदलाव कर सकता हूं जो आपके कोड को तोड़ सकते हैं। यह एक बहुत ही महत्वपूर्ण समस्या है, IMO। कोड सील करना अधिक प्रतिबंधात्मक है, लेकिन अधिक कार्यान्वयन स्वतंत्रता और मजबूती की ओर जाता है।
जॉन स्कीट

11
मैं विश्वास नहीं कर सकता कि कोई भी "गोटो केस" सिंटैक्स का उल्लेख नहीं करता, मुझे उससे नफरत है!
आइस्टिना 19

20
यह एक अच्छी बात है कि जॉन स्कीट ने C # डिज़ाइन नहीं किया, या मेरी सूची "1. वर्गों को डिफ़ॉल्ट रूप से सील कर दी गई है; 2. लॉकिंग बहुत जटिल है; 3. अधिकांश ऑब्जेक्ट्स वॉशेबल नहीं हैं"!
गाबे

113

सी

  • स्ट्रिंग हेरफेर।

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


50
माना। स्ट्रिंग हेरफेर 5 में से 5 चीजों के माध्यम से आइटम 1 है जो मैं सी के बारे में नफरत करता हूं
BoltBait

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

5
सी स्ट्रिंग हेरफेर चूसना करता है, लेकिन जहां तक ​​भाषा के मुद्दे जाते हैं, यह सबसे खराब नहीं है।
क्रिस लुत्ज़

3
समतल करने के लिए, लेकिन प्रतीक्षा करें ... क्या गंतव्य के पास पर्याप्त स्थान है ... ठीक है, यदि विवरण जांचने के लिए डाला जाना चाहिए ... लेकिन रुको, क्या होगा यदि मेरा स्ट्रिंग ढेर पर है? ठीक है, आकार का
हिसाब

4
हमें सी के बारे में नफरत नहीं करने वाली पांच चीजों के लिए एक धागे की जरूरत है ...
L̲̳̳o̲̳̳n̲̳̳g̲̳p̲̳o̲̳̳k 23e10

94

मैं जिस चीज़ के बारे में नफरत करता हूं, वह है "मैं जो कुछ भाषा के बारे में नफरत करता हूं" सूची के बारे में पांच चीजें? : डी

5- नारंगी लाल रंग से पेंट करना एक सेब नहीं है।

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

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

4- क्या आप लकड़ी के पैरों पर खड़े हैं?

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

3- यह वास्तव में किसका दोष है?

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

int a[10];
for (int idx = 0; idx < 15; idx++) a[idx] = 10;

हम सभी जानते हैं कि यह क्या करने जा रहा है। हालाँकि, शायद हम में से कुछ को एहसास नहीं है कि कार्यक्षमता बहुत फायदेमंद हो सकती है। आप जो कर रहे हैं उसके आधार पर। बफ़र ओवररन उस कार्यक्षमता की लागत हैं। वह कोड ऊपर। अगर मैं वास्तव में जनता के लिए जारी किया है। वो फिर से .. इसे मेरे साथ कहो .. "मेरी गलती"। मुझे ऐसा करने की अनुमति नहीं है।

2- क्या हमें उसको रीसायकल बिन में नहीं डालना चाहिए?

किसी भाषा में एक सुविधा को इंगित करना बहुत आसान है जिसे हम नहीं समझते हैं क्योंकि हम अक्सर इसका उपयोग नहीं करते हैं और इसे बेवकूफ कहते हैं। शिकायत है कि यह वहाँ है आदि गोटो हमेशा मेरा मनोरंजन करते हैं। लोग हमेशा गोटो के भाषा में होने की शिकायत करते हैं। फिर भी मैं शर्त लगाता हूं कि आपके अंतिम कार्यक्रम में एक प्रकार का गोटो शामिल था यदि आपने कभी ब्रेक या जारी रखा है, तो आपने एक गोटो का उपयोग किया है। यह वही है। दी, यह एक "सुरक्षित" गोटो है, लेकिन यह वही है जो यह है। गोटो के अपने उपयोग हैं। क्या जारी या विराम की तरह "निहित" गोटो का उपयोग किया जाता है या स्पष्ट गोटो (जो भी भाषा के लिए वास्तविक कीवर्ड "गोटो" का उपयोग किया जाता है)। ऐसा नहीं है कि भाषा डेवलपर निर्दोष हैं, लेकिन आमतौर पर ... यदि कार्यक्षमता समय की सुबह से (उस भाषा के लिए) अस्तित्व में है। संभवतः वह पहलू उस भाषा का एक परिभाषित गुण है। मतलब .. यह ' एस का उपयोग किया जा रहा है और संभवत: पीछे की ओर संगतता के कारण चारों ओर लटका नहीं है। आज इसका उपयोग किया जा रहा है। जैसा कि 5 मिनट पहले हुआ था। और ठीक से इस्तेमाल किया। खैर .. यकीनन कोई इसका अनुचित तरीके से उपयोग कर रहा है, लेकिन यह मेरी सूची में # 3 से संबंधित है।

1. - सब कुछ एक वस्तु है।

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

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


19
भाषाएँ सही नहीं हैं, और यदि आप उन चीज़ों की सूची बनाते हैं जिनसे आप किसी भाषा के बारे में घृणा करते हैं, तो आपको कुछ दिलचस्प टिप्पणियां और विचार मिल सकते हैं। सबसे पहले, यह दूसरों को आपको समाधान देने की अनुमति देता है जो आपको पता नहीं था (पदों के माध्यम से देखें, आप देखेंगे कि कुछ चीजें सीखी गई थीं)। दूसरा, यह भाषा डेवलपर्स के लिए उपयोगकर्ता प्रतिक्रिया का गठन करता है (यदि आपके उपयोगकर्ता आपके सॉफ़्टवेयर के बारे में सबसे ज्यादा नफरत करते हैं, तो 5 चीजें;) की सूची के साथ आए तो क्या आपकी रुचि नहीं होगी?), और तीसरा, यह दोषों पर विचार करने के लिए दिलचस्प है आपके औजारों का।
सिल्वरड्रैग

4
यदि आप इसे उस स्तर पर देखते हैं तो न केवल ब्रेक होता है और जारी भी होता है, लेकिन लूप्स गोटो हैं (यदि स्थिति पूरी हो गई है तो लूप की शुरुआत कूदें), अगर गोटो (यदि स्थिति ब्लॉक से मिली नहीं है तो फंक्शन कॉल करें) गोटो (फंक्शन की शुरुआत में कूदना और बाद में वापस कूदना), ...
हीलियम

17
स्रोत कोड से निष्पादन योग्य फाइलें बनाना "कोई फायदा नहीं है"? क्या?
detly

4
पर्ल '80 के दशक के अंत से एक पर्ल फ़ाइल से एक निष्पादन योग्य बना सकता है। वितरित करने के लिए एक चीज उपयोगी है। Perl स्थापित करने के लिए कोई ज़रूरत नहीं है), b) प्रोग्राम के घटक स्थापित करें, ग) शायद पथ को सेट करने के लिए एक स्क्रिप्ट लिखें और यह सब निष्पादित करें ... हाँ, वास्तव में बेकार है।
xcramps

1
लेकिन, अगर आप स्रोत से .exe फ़ाइलें नहीं बना सकते हैं, तो विंडोज़ उपयोगकर्ता इसे चला नहीं पाएंगे। ;)
इवान प्लाइस

88

पांच चीजें जो मैं जावा के बारे में नफरत करता हूं (जो, वर्तमान में, मेरी पसंदीदा भाषा है) कोई विशेष क्रम में नहीं।

  1. जितना मैं जावा जेनरिक का प्रशंसक हूं, उतनी ही विषमताएं हैं, जिस तरह से इसे डिजाइन किया गया था। जैसे कि जेनरिक के साथ कष्टप्रद सीमाओं का एक असंख्य (जिनमें से कुछ प्रकार-क्षरण का परिणाम हैं)।
  2. Object.clone () और क्लोन करने योग्य इंटरफेस के काम करने का तरीका पूरी तरह से टूट गया है।
  3. हाई-रोड लेने और सब कुछ एक वस्तु (a.la. smallTalk) बनाने के बजाय, सन विंप ने डेटा-प्रकारों की दो अलग-अलग श्रेणियां बनाईं: ऑब्जेक्ट्स और प्राइमेटिव्स। नतीजतन अब मौलिक डेटा प्रकारों और अजीब जिज्ञासाओं के लिए दो प्रतिनिधित्व हैं जैसे कि बॉक्सिंग / अनबॉक्सिंग और एक संग्रह में प्राइमिटिव्स डालने में सक्षम नहीं होना।
  4. स्विंग बहुत जटिल है। मुझे गलत मत समझो: स्विंग के साथ एक बहुत अच्छा सामान हो सकता है लेकिन यह ओवर-इंजीनियरिंग का एक बड़ा उदाहरण है।
  5. यह अंतिम शिकायत समान रूप से सूर्य की गलती है और जिन लोगों ने जावा के लिए XML पुस्तकालय लिखे हैं। जावा एक्सएमएल पुस्तकालय बहुत जटिल हैं। केवल XML फ़ाइल में पढ़ने के लिए, मुझे अक्सर इस बात की चिंता होती है कि मैं किस पार्सर का उपयोग कर रहा हूं: DOM या SAX? प्रत्येक के लिए एपीआई समान रूप से भ्रामक है। XML को आसानी से पार्स / लिखने के लिए भाषा में मूल समर्थन बहुत अच्छा होगा।
  6. java.util.Date बेकार है। न केवल यह अनावश्यक रूप से जटिल है, बल्कि सभी उपयोगी तरीकों को हटा दिया गया है (और दूसरों के साथ प्रतिस्थापित किया जाता है जो जटिलता को बढ़ाते हैं)।

32
आप java.util के बारे में भूल गए।
टीएम।

3
इसके अलावा: "क्लोन करने योग्य" इंटरफ़ेस में "क्लोन ()" विधि नहीं है। यह क्लोन करने योग्य इंटरफ़ेस को एक ऑक्सीमोरोन बनाता है। और चूंकि क्लोन () ऑब्जेक्ट लौटाता है, टाइप सुरक्षा विंडो से बाहर है (जे 2 एसई 5.0 में जेनरिक को पेश किए जाने के बाद भी इसे सुधारने के लिए कोई प्रयास नहीं किया गया है)।
रयान डेलूची

2
जब तक हम क्लोनिंग को कोस रहे हैं, तब तक तथाकथित "इंटरफ़ेस" भी शामिल हो सकता है। जब भी मैं इसका उपयोग कर रहा हूं मैं हमेशा अपने आप को छुरा मारना चाहता हूं।
wds

12
एक फ़ाइल खोलने और इसे से पढ़ने की तरह सरल चीजें करना मुश्किल है।
एरिक जॉनसन

3
@ रेयान क्लोन () को "ऑब्जेक्ट" वापस करने की आवश्यकता नहीं है। J2SE 5.0 के साथ जावा ने सहसंयोजक रिटर्न प्रकार पेश किए, जिसका अर्थ है कि आप बेस क्लास के किसी भी उप-प्रकार को वापस कर सकते हैं। तो सार्वजनिक MyType क्लोन () संभव है!
हेल्परमेथोड

73

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

  • क्लोजर (ब्लॉक) में 4 अलग-अलग सृजन वाक्यविन्यास हैं, और उनमें से कोई भी इष्टतम नहीं है। सुरुचिपूर्ण सिंटैक्स अधूरा और हैश के साथ अस्पष्ट है, और पूर्ण सिंटैक्स बदसूरत है।
  • समुदाय वास्तविक प्रलेखन के विरुद्ध होता है, 'कोड पढ़ें' के पक्ष में। मुझे यह बचकाना और आलसी लगता है।
  • विशेष रूप से पुस्तकालयों में मेटाप्रोग्रामिंग दुरुपयोग, कीड़े को ट्रैक करने के लिए एक बुरा सपना बनाता है।
  • संबंधित नोट पर, व्यापक मेटापोग्रामिंग एक व्यापक आईडीई को मुश्किल बनाता है, यदि असंभव नहीं है, तो बनाने के लिए।
  • जिस तरह से कार्यों के लिए ब्लॉक किया जाता है वह मूर्खतापूर्ण है। कोई कारण नहीं है कि ब्लॉक को पैरामीटर सूची से बाहर पारित किया जाना चाहिए, या उपयोग (उपज) तक पहुंचने के लिए अजीब विशेष सिंटैक्स होना चाहिए। मेरी राय है कि ब्लॉकों को कम अस्पष्ट सिंटैक्स दिया जाना चाहिए था (या हैश अलग सीमांकक का इस्तेमाल कर सकते थे; शायद <> बजाय {}), और विधियों के मापदंडों के रूप में गुजरते हुए सभी अन्य मापदंडों की तरह ही होना चाहिए था।

    object.method(1, {|a| a.bar}, "blah")
    

    ये विषमताएं, जैसे ब्लॉक होना चाहिए अंतिम पैरामीटर पारित किया गया और एक से अधिक ब्लॉक पास करना लंबे समय तक वाक्यविन्यास के साथ अलग है, वास्तव में मुझे परेशान करता है।


2
उप-इष्टतम m17n और यूनिकोड समर्थन हालांकि यह बेहतर हो रहा है। 1.9 जटिल बनी हुई है ...
केल्टिया

37
मैंने सोचा था कि मेटाप्रोग्रामिंग के दुरुपयोग को "मुहावरेदार रूबी" कहा जाता है :)
Slartibartfast

2
akway: अन्य दोनों वाक्यविन्यास हैं लैम्ब्डा और Proc.new
Myrddin Emrys

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

13
मुझे यह दिलचस्प लगता है कि इनमें से 3 लोगों के साथ हैं, न कि भाषा से। रूबी वह भाषा बनी हुई है जिससे मैं कम से कम नफरत करता हूं।
टोबी हैड

72

पर्ल

  • सिगिल का मिश्रित उपयोग

    my @array = ( 1, 2, 3 );
    my $array = [ 4, 5, 6 ];
    
    my $one  = $array[0]; # not @array[0], you would get the length instead
    my $four = $array->[0]; # definitely not $array[0]
    
    my( $two,  $three ) = @array[1,2];
    my( $five, $six   ) = @$array[1,2]; # coerce to array first
    
    my $length_a = @array;
    my $length_s = @$array;
    
    my $ref_a = \@array;
    my $ref_s = $array;
    
    • उदाहरण के लिए इनमें से कोई भी समान नहीं हैं:

      $array[0]   # First element of @array
      @array[0]   # Slice of only the First element of @array
      %array[0]   # Syntax error
      $array->[0] # First element of an array referenced by $array
      @array->[0] # Deprecated first element of @array
      %array->[0] # Invalid reference
      $array{0}   # Element of %array referenced by string '0'
      @array{0}   # Slice of only one element of %array referenced by string '0'
      %array{0}   # Syntax error
      $array->{0} # Element of a hash referenced by $array
      @array->{0} # Invalid reference
      %array->{0} # Deprecated Element of %array referenced by string '0'
      

    में Perl6यह है लिखा :

    my @array = ( 1, 2, 3 );
    my $array = [ 4, 5, 6 ];
    
    my $one  = @array[0];
    my $four = $array[0]; # $array.[0]
    
    my( $two,  $three ) = @array[1,2];
    my( $five, $six   ) = $array[1,2];
    
    my $length_a = @array.length;
    my $length_s = $array.length;
    
    my $ref_a = @array;
    my $ref_s = $array;
    
  • सही OO की कमी

    package my_object;
    # fake constructor
    sub new{ bless {}, $_[0] }
    # fake properties/attributes
    sub var_a{
      my $self = shift @_;
      $self->{'var_a'} = $_[0] if @_;
      $self->{'var_a'}
    }
    

    में Perl6यह है लिखा :

    class Dog is Mammal {
        has $.name = "fido";
        has $.tail is rw;
        has @.legs;
        has $!brain;
        method doit ($a, $b, $c) { ... }
        ...
    }
    
  • खराब रूप से डिज़ाइन की गई रेक्सक्स विशेषताएं

    /(?=regexp)/;           # look ahead
    /(?<=fixed-regexp)/;    # look behind
    /(?!regexp)/;           # negative look ahead
    /(?<!fixed-regexp)/;    # negative look behind
    /(?>regexp)/;           # independent sub expression
    /(capture)/;            # simple capture
    /(?:don't capture)/;    # non-capturing group
    /(?<name>regexp)/;      # named capture
    /[A-Z]/;                # character class
    /[^A-Z]/;               # inverted character class
    # '-' would have to be the first or last element in
    # the character class to include it in the match
    # without escaping it
    /(?(condition)yes-regexp)/;
    /(?(condition)yes-regexp|no-regexp)/;
    /\b\s*\b/;              # almost matches Perl6's <ws>
    /(?{ print "hi\n" })/;  # run perl code
    

    में Perl6यह है लिखा :

    / <?before pattern>  /;   # lookahead
    / <?after pattern>   /;   # lookbehind
    / regexp :: pattern  /;   # backtracking control
    / ( capture )        /;   # simple capture
    / $<name>=[ regexp ] /;   # named capture
    / [ don't capture ]  /;   # non-capturing group
    / <[A..Z]>           /;   # character class
    / <-[A..Z]>          /;   # inverted character class
    # you don't generally use '.' in a character class anyway
    / <ws>               /;   # Smart whitespace match
    / { say 'hi' }       /;   # run perl code
    
  • कई प्रेषण का अभाव

    sub f(   int $i ){ ... }  # err
    sub f( float $i ){ ... }  # err
    sub f($){ ... } # occasionally useful
    

    में Perl6यह है लिखा :

    multi sub f( int $i ){ ... }
    multi sub f( num $i ){ ... }
    multi sub f( $i where $i == 0 ){ ... }
    multi sub f(     $i ){ ... } # everything else
    
  • गरीब ऑपरेटर ओवरलोडिंग

    package my_object;
    use overload
      '+' => \&add,
      ...
    ;
    

    में Perl6यह है लिखा :

    multi sub infix:<+> (Us $us, Them $them) |
                        (Them $them, Us $us) { ... }
    

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

3
मुझे पसंद है कि पर्ल दृढ़ता से टाइप नहीं किया गया है, लेकिन यह कुछ प्रकार की जानकारी में जोड़ना उपयोगी होगा।
ब्रैड गिल्बर्ट

13
ऐसा लगता है कि आपने एक ऐसी भाषा की आलोचना करने के लिए चुना है जो आपकी पसंदीदा नहीं है (आपको perl6 की आलोचना करनी चाहिए)
श्मिट

5
पर्ल 6 से तुलना करने का क्या मतलब है? क्या आप सुझाव दे रहे हैं कि पर्ल 6 आपके मुद्दों को ठीक करता है, या उन्हें जारी रखता है?
राबर्ट पी।

2
मुझे संदेह है कि मुझे इससे अधिक कहने की आवश्यकता है: ozonehouse.com/mark/periodic
अरफांगियन

57

मैं PHP को पसंद करूँगा क्योंकि मैं इसे कई बार पसंद करता हूँ और पायथन को बहुत अधिक तरीके से किया जाता है।

  • कोई नामस्थान नहीं; सब कुछ एक प्रकार का बहुत बड़ा नामस्थान है जो बड़े वातावरण में नरक है

  • मानकों की कमी जब यह कार्य करने की बात आती है: सरणी फ़ंक्शंस एक सुई को पहले तर्क के रूप में लेती है, दूसरे के रूप में हिस्टैक ( array_search देखें )। स्ट्रिंग फ़ंक्शंस अक्सर हाइस्टैक पहले, सुई सेकेंड ( स्ट्रैप देखें ) लेते हैं । अन्य फ़ंक्शन केवल अलग नामकरण योजनाओं का उपयोग करते हैं: Bin2hex , strtolower , cal_to_jd

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

    $var = preg_match_all('/regexp/', $str, $ret);
    echo $var; //outputs the number of matches 
    print_r($ret); //outputs the matches as an array
    
  • भाषा (PHP6 तक) एक निकट-मंद पिछड़ी संगतता का सम्मान करने के लिए अपना सर्वश्रेष्ठ प्रयास करती है, जिससे यह आवश्यक नहीं होने पर खराब प्रथाओं और कार्यों को पूरा करती है (देखें mysql_escape_string बनाम mysql_real_escape_string )।

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

  • यह फ़ाइलों को आयात करने में बेकार है। आपके पास इसे करने के लिए 4 अलग-अलग तरीके हैं (शामिल, शामिल_ऑनसे, आवश्यकता, आवश्यकता_ऑनसे), वे सभी धीमे, बहुत धीमे हैं। वास्तव में पूरी भाषा धीमी है। कम से कम, अजगर की तुलना में बहुत धीमी (यहां तक ​​कि एक रूपरेखा के साथ) और जो मैं इकट्ठा करता हूं उससे RoR।

मुझे अभी भी PHP पसंद है, हालांकि। यह वेब विकास की जंजीर है: आप चाहते हैं कि एक छोटा से मध्यम साइट असली तेजी से बने और सुनिश्चित करें कि कोई भी इसे होस्ट कर सकता है (हालांकि कॉन्फ़िगरेशन भिन्न हो सकते हैं)? PHP वहीं है, और यह इतना सर्वव्यापी है कि एक पूर्ण LAMP या WAMP स्टैक स्थापित करने में केवल 5 मिनट लगते हैं। खैर, मैं अब पायथन के साथ काम करने जा रहा हूं ...


4
मुझे लगता है कि बिंदु 1 को 5.3 में लागू किया गया है :) जबकि परम आदेश बेहतर नामकरण कर रहा है अभी भी गरीब है। मैं हालांकि पिछड़े कॉम्पैटिबिलिटी से सहमत हूं।
रॉस

4
प्यार # 4 होगा। यह उन चीजों में से एक है जिसने मुझे हर समय सबसे ज्यादा परेशान किया है।
फ्रांज

1
मुझे लगता है, गति तर्क बहुत व्यक्तिपरक है। भाषा पर ही कोड कितना कुशल है, इस पर गति बहुत अधिक निर्भर करती है। गरीब PHP कोड शायद उच्च गुणवत्ता वाले अजगर कोड की तुलना में धीमा है, लेकिन अच्छा PHP भी गरीब पायथन से बेहतर प्रदर्शन कर सकता है।
selfawaresoup

17
no_really_now_mysql_escape_the_string_im_serious ()
Salaryman

2
namepaces schmamespaces। PHP वर्ल्ड वाइड वेब पर है इसलिए सब कुछ वैश्विक होना चाहिए
इवान प्लाइस

50

यहाँ कुछ चीजें हैं जो मुझे जावा के बारे में नापसंद हैं (जो कि मेरी पसंदीदा भाषा नहीं है):

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

1
@ सविश - मुझे लगता है कि मुद्दा यह है कि आप केवल इस निर्माण का उपयोग करेंगे जब आप परवाह नहीं करेंगे कि आप किस प्रकार के अपवाद से निपट रहे हैं। दूसरे शब्दों में, जब आप उन सभी को
पहचानने के

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

7
C # कई अपवादों को पकड़ने के अलावा इन सभी को ठीक करता है। जेनरीज़ को पुनरीक्षित किया जाता है, विध्वंसक का उपयोग / आईडीसॉरोबल का उपयोग करके प्रतिस्थापित किया जाता है, क्लोज़न को एऑन विधियों और लैम्ब्डा द्वारा कार्यान्वित किया जाता है, अपवाद अनियंत्रित होते हैं, संग्रह शाब्दिक होते हैं, और निर्मित प्रकार को दो बार निर्दिष्ट करने से बचने के लिए 'var' होता है।
डैनियल ईयरविकर

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

2
एनॉन इनर क्लासेस बंद नहीं होती हैं: इसमें "sum + = current.amount ()" जैसी किसी चीज़ के साथ एक विज़िटर कॉलबैक बनाने की कोशिश करें, जहाँ "योग" एनक्लोज़िंग स्कोप से एक नॉन-फ़ाइनल चर है। नजदीक पर बिना सिगार के।
रोबोप्रोग

40

सी ++

  1. टेम्पलेट सिंटैक्स
  2. डायमंड इनहेरिटेंस मुद्दे
  3. प्लीथोरा / आधुनिक भाषाओं की मानक पुस्तकालयों की कमी (हालाँकि बढ़ावा करीब आता है)।
  4. IOStreams
  5. IOStreams के आसपास सिंटैक्स का उपयोग किया जाता है

अजगर

  1. रिक्त स्थान सार्थक हैं (कभी-कभी)
  2. अंडरस्कोर किए गए कीवर्ड
  3. सीमित धागा समर्थन (कम से कम वर्तमान में)
  4. "यह" के बजाय "स्व"
  5. रिक्त स्थान सार्थक हैं (कभी-कभी)

80
आप "स्वयं" को "इस" के रूप में संदर्भित कर सकते हैं, क्या आप वास्तव में चाहते हैं (हालांकि दूसरों का पालन करना कठिन हो सकता है)। "स्व" एक कीवर्ड नहीं है, और आप चर को कुछ भी नाम दे सकते हैं जो आप चाहते हैं।
मियादी

36
वहाँ आप जाते हैं, मैं वास्तव में व्हाईटस्पेस (विशेष रूप से इंडेंटेशन) की सार्थकता को पायथन में इसके सबसे बड़े प्लसस में से एक के रूप में सूचीबद्ध करूंगा ...;)
ओलिवर गिसेन

22
"रिक्त स्थान सार्थक हैं" अजगर की सबसे अच्छी विशेषताओं में से एक है !! ps "से एक दुभाषिया में इस चलाने का प्रयास भविष्य आयात ब्रेसिज़"
Hasen

4
मैं थ्रेड सपोर्ट को छोड़कर आपकी पूरी अजगर सूची से बहुत असहमत हूं। व्हॉट्सएप अर्थपूर्ण नहीं है, इंडेंटेशन अर्थपूर्ण है; बड़ा अंतर है।
क्रिश्चियन औडर्ड

3
वाह। ऐसा नहीं है कि किसी ने एक टेक्स्ट एडिटर का आविष्कार नहीं किया है जो व्हाट्सएप / टैब को विशेष वर्ण के रूप में हाइलाइट करता / दिखाता है (क्या, आप नोटपैड में कोडिंग कर रहे हैं?)। इसके अलावा, यदि आप स्थानों पर टैब का विस्तार करते हैं, तो कृपया आग में मर जाएं।
नकली नाम

37

उद्देश्य सी

1) कोई नामस्थान नहीं, बस नामकरण परंपराएं - मैं वर्ग पृथक्करण के संदर्भ में यह बुरा नहीं मानता, लेकिन मैं एक एकल पंक्ति में सभी वर्ग परिभाषाओं को किसी नामपट्टी में आयात करने में सक्षम होने से चूक जाता हूं (जैसे आयात com.me.somodours। *)।

2) पुस्तकालयों में अभी भी RegEx समर्थन जैसे महत्वपूर्ण क्षेत्रों में कुछ छेद हैं।

3) प्रॉपर्टी सिंटैक्स थोड़ा अनाड़ी है, जिसके लिए एक संपत्ति घोषित करने के लिए तीन लाइनों (दो अलग-अलग फाइलों में) की आवश्यकता होती है।

4) मुझे रिटेन / रिलीज़ मॉडल पसंद है, लेकिन इससे आसान है कि इसे एक संदर्भ जारी किया जाए और फिर गलती से बाद में इसका उपयोग किया जाए।

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


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

2
उद्देश्य-सी गुण। गंभीरता से, वे चौंकाने वाले हैं, मैं प्रचार को विशेष रूप से देखकर नहीं समझ सकता कि सी # उन्हें कितना अच्छा करता है।
जूलरी

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

1
@ क्रिस एस: क्या आप YES/NOबुलियन के लिए कह रहे हैं कि यह एक बुरी बात है? और अधिक महत्वपूर्ण बात, क्या आप कह रहे हैं नामांकित पैरामीटर एक बुरी बात है ?? मैं बूल को समझ सकता हूं, लेकिन नामित पारम संभवतः ओजेसी की सबसे अच्छी विशेषताओं (पठनीयता के संदर्भ में) में से एक हैं।
jbrennan

3
शायद मैं एक मर्दवादी हूं, लेकिन मुझे उपसर्ग वर्ग के नाम पसंद हैं। यह Google और प्रलेखन खोजों को स्पष्ट करता है, यदि कक्षा को NSString कहा जाता है, तो आपके द्वारा किस प्रकार के स्ट्रिंग का उपयोग करने के बारे में कोई भ्रम नहीं है।
कुब्बी

36

सी ++

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

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

    • सामान्य LPCTSTR,
    • LPC (डब्ल्यू) CoTaskMemAlloc द्वारा आवंटित एसटी,
    • BSTR, _bstr _t
    • (डब्ल्यू) स्ट्रिंग,
    • सी स्ट्रिंग,
    • std :: वेक्टर
    • एक रोल-माई-क्लास ( sigh ) जो ज्ञात लंबाई की a (w) char * बफर में रेंज चेकिंग और बेसिक ऑपरेशन जोड़ता है
  • मॉडल बनाएँ।
    मैं उस समय की मौत से बीमार हूँ, जिसमें शामिल-के-साथ क्या-क्या हुआ है, आगे की घोषणाएँ, पूर्वगामी हेडर को अनुकूलित करना और कम से कम वृद्धिशील निर्माण समय को ध्यान में रखना शामिल है, आदि। यह अस्सी के दशक में बहुत अच्छा था, लेकिन अब? कोड के एक टुकड़े को पैक करने के लिए बहुत सारी बाधाएं हैं, इसलिए इसका पुन: उपयोग किया जा सकता है कि यहां तक ​​कि माताओं को भी मेरी बात सुनकर ऊब हो जाती है।

  • पार्स करना मुश्किल है
    इससे बाहरी उपकरण विशेष रूप से लिखना मुश्किल है, और सही हो जाता है। और आज, हम C ++ लोगों की कमी ज्यादातर टूल चेन में है। मैं अपने सी # प्रतिबिंब और प्रतिनिधियों से प्यार करता हूं लेकिन मैं उनके बिना रह सकता हूं। बिना महान refactoring के, मैं नहीं कर सकता।

  • थ्रेडिंग बहुत कठिन है
    भाषा भी इसे (अब तक) नहीं पहचानती है, और संकलक की स्वतंत्रता - जबकि महान - दर्दनाक हैं।

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


दी गई है, इसका बहुत हिस्सा सख्त भाषा के दायरे से परे है, लेकिन IMO को पूरे टूलकिन को जज करने की जरूरत है और इसे विकसित करने की जरूरत है।


एसटीएल पर दस्तावेज़ीकरण देखना, स्क्रैच से ग्राफिक्स कार्ड बनाने के तरीके पर मैनुअल की तलाश करना है।
अविराल्डग

सच कहूँ तो, इनमें से अधिकांश बिंदु ऐसे लगते हैं जैसे आप C ++ को ठीक से जानने के लिए कभी भी परेशान नहीं होते हैं ... यह # 3 में स्पष्ट रूप से स्पष्ट हो जाता है, क्योंकि शामिल किए जाने वाले गार्ड कुछ ऐसे होते हैं जो हर C ++ प्रोग्रामर को पता होना चाहिए। मुझे यकीन नहीं है कि प्वाइंट # 1 को कैसे समझा जाए, क्या आप भ्रमित हैं std::string? शायद एक अच्छा प्रलेखन और / या ट्यूटोरियल को पढ़ना std::vector(और आप उन std::stringजगहों पर उपयोग क्यों नहीं कर रहे हैं जहां इसे कभी नहीं बनाया गया था) आपके लिए यह स्पष्ट कर सकता है।

@nebukadnezzar: मैंने पाया कि Meyers एसटीएल पर रोशनी कर रहे हैं, लेकिन यह मूलभूत समस्याओं को हल नहीं करता है। सच कहूँ तो, आपको लगता है कि आपको एक बड़ी परियोजना को बनाए रखने की आवश्यकता नहीं थी, आपको कभी भी दर्जनों-गहरी पदानुक्रम में एक परिपत्र निर्भरता का शिकार नहीं करना पड़ा था। मुझे पता है कि गार्ड शामिल हैं, लेकिन हमें उनके साथ परेशान क्यों होना है? Btw। वे हर समस्या को ठीक नहीं करते। std::stringयदि मैं आधे समय का उपयोग नहीं कर सकता तो "मानक" कैसे है ? (C ++ 0x कम से कम इसे ठीक करता है, लेकिन मैं अभी भी दर्जनों पुस्तकालयों के साथ फंस गया हूं जो विभिन्न स्ट्रिंग अभ्यावेदन का उपयोग करते हैं)।
peterchen

but why do we have to bother with them (inclusion guards)- क्योंकि C ++ में मॉड्यूल नहीं हैं। How "standard" is a std::string if I can't use it half of the time?- मुझे लगता है कि आपके द्वारा उपयोग किए जाने के तरीके पर निर्भर करता है std::string। स्ट्रिंग वर्ग आप के रूप में स्ट्रिंग डेटा का उपयोग करने की अनुमति देता है const char*के माध्यम से std::string::c_strहै, जो पहले से ही बनाता है std::stringहर वर्ग / समारोह है कि यह भी लेता है के साथ पूरी तरह से संगत const char*तर्क।

क्योंकि C ++ में मॉड्यूल नहीं है - बिल्कुल मेरी शिकायत: बिल्ड मॉडल एंटीक है (मैं सिर्फ मॉड्यूल की तुलना में किसी अन्य समाधान को स्वीकार करूंगा)। ----- पूरी तरह से संगत - लेकिन कई अन्य परिदृश्यों के साथ पूरी तरह से असंगत है (मैं C ++ 0x को यह कहते हुए ठीक करूंगा कि मैं यहां एक बिंदु करता हूं।) अगर std :: string पर्याप्त रूप से विकृत होती तो मुझे खुशी होती। 10 साल पहले द स्ट्रिंग क्लास के रूप में अपनाया गया है, लेकिन यह - दूसरी शिकायत नहीं थी।
पेटेरचेन

35

जावास्क्रिप्ट :

  • Objectप्रोटोटाइप संशोधित किया जा सकता। आपके कार्यक्रम में हर एक वस्तु को नए गुण मिलते हैं, और शायद कुछ टूट जाता है।

  • सभी ऑब्जेक्ट हैश मैप हैं, लेकिन उन्हें इस तरह से सुरक्षित रूप से उपयोग करना मुश्किल है। विशेष रूप से, यदि आपकी कोई कुंजी होती है __proto__, तो आप मुसीबत में हैं।

  • फ़ंक्शन संदर्भ समय पर कोई ऑब्जेक्ट बंद होना। वास्तव में, thisजब भी कोई फ़ंक्शन ऑब्जेक्ट नोटेशन या newऑपरेटर के साथ कॉल किया जाता है , तो इसके बजाय कोई ऑब्जेक्ट बंद नहीं होता है । बहुत भ्रम की स्थिति में परिणाम, खासकर जब ईवेंट कॉलबैक बनाते हैं, क्योंकि thisप्रोग्रामर को उम्मीद नहीं है।

    • कोरोलरी: ऑब्जेक्ट संकेतन के बिना किसी फ़ंक्शन को कॉल करना या newऑपरेटर thisवैश्विक ऑब्जेक्ट के बराबर सेट होने के परिणामस्वरूप होता है, जिसके परिणामस्वरूप बहुत अधिक टूटना होता है।
  • अतिरिक्त रूप से स्ट्रिंग ऑपरेशन करने के लिए अतिरिक्त संचालक को भी जोड़ा गया, इसके बावजूद कि दोनों ऑपरेशन मौलिक रूप से भिन्न हैं। दर्द में परिणाम जब आप एक संख्या होने की उम्मीद करते हैं तो वास्तव में एक स्ट्रिंग है।

  • ==और !=ऑपरेटर प्रकार की जबरदस्ती करते हैं। विभिन्न प्रकारों के बीच तुलना में नियमों की एक सूची शामिल होती है जिसे कोई भी नश्वर व्यक्ति पूर्ण रूप से याद नहीं रख सकता है। यह ===और !==ऑपरेटरों के अस्तित्व को कम करता है ।

  • दोनों nullऔर undefinedमौजूद हैं, सूक्ष्म रूप से भिन्न, फिर भी निरर्थक अर्थ। क्यों?

  • प्रोटोटाइप चेन की स्थापना के लिए अजीब सिंटैक्स।

  • parseInt(s)एक सी-शैली की संख्या की अपेक्षा करता है, इसलिए अग्रणी शून्य के साथ मानों को अष्टक के रूप में व्यवहार करता है, आदि। आप कम से कम parseInt(s, 10)लेकिन डिफ़ॉल्ट व्यवहार भ्रमित कर रहे हैं।

  • कोई ब्लॉक स्कोप नहीं।

  • एक ही चर को एक से अधिक बार घोषित कर सकते हैं।

  • यह घोषित किए बिना एक चर का उपयोग कर सकते हैं, जिस स्थिति में यह वैश्विक है और शायद आपके कार्यक्रम को तोड़ देता है।

  • with { }

  • JavaDoc जैसे टूल के साथ दस्तावेज़ करना वास्तव में मुश्किल है।


3
के लिए nullऔर undefined: कभी कभी तुम सच में जानना चाहते हैं कि चर एक मूल्य सौंपा गया है या नहीं चाहते हैं। चूंकि अशक्त मूल्य है, अपरिभाषित बताने का एकमात्र तरीका है। दी, केवल समय मैं यह उपयोगी मिल गया है गटर / सेटर कार्यों के निर्माण के लिए।
ज़च

1
"यदि आपकी कोई कुंजी प्रोटो हो तो " - ठीक है, यह विशेष अर्थ के साथ एक आरक्षित शब्द है। यह शिकायत करने जैसा है कि आप forएक चर नाम के रूप में उपयोग नहीं कर सकते हैं ।
निक नेन

5
@nickf: हैश की कुंजी एक स्ट्रिंग है। स्ट्रिंग्स में आरक्षित शब्दों सहित कोई भी मूल्य हो सकता है। विशेष रूप से मान "for"एक हैश कुंजी के रूप में मान्य है। __proto__एक आरक्षित शब्द नहीं है। विशेष स्ट्रिंग मान जो हैश कीज़ के रूप में उपयोग किए जाने पर अपेक्षा के अनुरूप काम नहीं करते हैं, किसी भी भाषा में साहचर्य सरणियों के काम करने के बारे में उचित अपेक्षाओं का उल्लंघन करते हैं। वे एक्मास्क्रिप्ट युक्ति का भी उल्लंघन करते हैं।
डैनियल कैसिडी

2
थॉमस: न्यूलाइन हमेशा एक बयान को समाप्त नहीं करता है। इसलिए समझदार कोडर्स कोड को और अधिक स्पष्ट करने के लिए अर्धविराम के साथ प्रत्येक कथन को समाप्त करते हैं।
डैनियल कैसिडी

2
newline may or may not end a statement depending on contextमेरी शीर्ष 5 सूची में से एक है
पुनर्निवेशक

34

अजगर:

  • स्टैटिक टाइपिंग का अभाव
  • डिफ़ॉल्ट तर्क हैंडलिंग (विशेष रूप से तथ्य यह है कि आप भविष्य के कॉल करने वालों के लिए डिफ़ॉल्ट तर्क बदल सकते हैं !)
  • बहुत से आवश्यक अंडरस्कोर (निर्माणकर्ताओं को बुलाया जाना चाहिए __init__)
  • उचित निजी सदस्यों और कार्यों का अभाव (सम्मेलन सिर्फ यह कहता है कि ज्यादातर चीजें जो अंडरस्कोर से शुरू होती हैं, वे सभी सामानों को छोड़कर निजी हैं, जैसे __getattr__कि नहीं)
  • printकिसी फ़ाइल में आईएनजी के लिए अजीब सिंटैक्स (लेकिन वे पायथन 3 में इसे ठीक कर रहे हैं)

10
मुझे जो पसंद है वह स्थिर प्रकारों का उपयोग करने का एक विकल्प है।
ग्रेग हेवगिल

4
BTW: init वास्तव में कंस्ट्रक्टर नहीं है, ऑब्जेक्ट पहले से ही बनाया गया था, जब आप वहां प्रवेश करते हैं (अनुमान करें कि स्व क्या है ...)। कंस्ट्रक्टर अकूत रूप से नया है, जहाँ आपको क्लास में जाने की तुरंत सुविधा मिलती है।
एंड्रे

90
यदि आप स्थैतिक टाइपिंग पसंद करते हैं, तो पाइथन आपकी पसंदीदा भाषा क्यों है?
18

9
finnw: स्टेटिक टाइपिंग कुछ प्रकार के कार्यक्रमों के लिए बढ़िया है, और वास्तव में अन्य प्रकारों के लिए आवश्यक नहीं है। मुझे आमतौर पर स्टैटिक टाइपिंग की कमी का ख्याल नहीं है, लेकिन जब आपको इसकी आवश्यकता होती है, तो कम से कम विकल्प होना वास्तव में अच्छा है।
ग्रेग हेविगिल डिक्

8
मैं कहूंगा कि स्थिर टाइपिंग की कमी एक विशेषता है, लापता कार्यक्षमता नहीं ...
25'10

32

सी#

  • काश मैं switch()किसी भी प्रकार पर हो सकता है , और यह caseकिसी भी अभिव्यक्ति हो सकती है।

  • ' private setरीडऑनली ' फ़ील्ड / ऑटोप्रॉप्स के साथ ऑब्जेक्ट इनिशियलाइज़र सिंटैक्स का उपयोग नहीं कर सकते । आम तौर पर, मुझे अपरिवर्तनीय प्रकार बनाने में भाषा की मदद चाहिए।

  • की का प्रयोग {}के लिए नाम स्थान और वर्ग और विधि और संपत्ति / इंडेक्सर ब्लॉक और बहु बयान ब्लॉक और सरणी initializers । यह पता लगाना मुश्किल है कि आप कहाँ हैं जब वे दूर हो या बेमेल हों।

  • मुझे लिखने से नफरत है (from x in y ... select).Z()। मुझे कॉल कॉल सिंटैक्स को वापस करने की आवश्यकता नहीं है क्योंकि क्वेरी सिंटैक्स कुछ याद कर रहा है।

  • मुझे doक्वेरी सिंटैक्स पर एक क्लॉज़ चाहिए , जो पसंद है foreach। लेकिन यह वास्तव में एक प्रश्न नहीं है।

मैं वास्तव में यहाँ पहुँच रहा हूँ। मुझे लगता है कि C # शानदार है, और इसे तोड़ पाना बहुत मुश्किल है।


14
किसी भी प्रकार के परिवर्तन के लिए +1
oɔɯǝɹ

स्विच मुद्दों के लिए +1, और {} मुद्दे, जिनके बारे में मैंने अब तक वास्तव में नहीं सोचा था
Maslow

मैं घृणा करता हूँ {}। वे बहुत ज्यादा दिखते हैं ()। मिसमैचिंग कभी भी मेरे लिए ज्यादा मुद्दा नहीं रहा क्योंकि मैं हमेशा उन्हें उसी स्तर पर रखता हूं जब तक कि वे मूल रूप से वन-लाइनर नहीं होते।
लोरेन Pechtel

2
Linq क्वेरी के लिए +1। खासकर जब आप केवल एक वस्तु वापस चाहते हैं। इसके बजाय (x से y सेलेक्ट में)। प्यास (), क्यों नहीं (ए से वाई में से टॉप 1 का चयन करें) या वास्तविक एसक्यूएल सिंटैक्स के करीब फिट होने के लिए कुछ।
AdmSteck

यदि आप चाहें तो आप किसी भी प्रकार पर स्विच () कर सकते हैं, और यह मामला एफ # पैटर्न मिलान की किसी भी अभिव्यक्ति की जांच कर सकता है। c- sharpcorner.com/UploadFile/mgold/…
gradbot

26

पीएचपी

  1. यदि आप सर्वर को नियंत्रित नहीं करते हैं, और तब भी वे थोड़े चूसते हैं, तो कोई डीबगिंग सुविधाएँ नहीं
  2. खराब PHP कोड की चरम मात्रा सभी PHP प्रोग्रामर को एक बुरा नाम देती है
  3. असंगत फ़ंक्शन नामकरण
  4. यदि मैं चाहता हूं कि एक स्थिर टाइप चर में असमर्थता है (मैं 90% समय में गतिशील टाइपिंग का एक बड़ा प्रशंसक हूं)
  5. REGISTER_GLOBALS शैतान है

25
REGISTER_GLOBALS एक बार मेरे कुत्ते को खा गया :(
पीम जगर

2
1: मैं xdebug और GUG क्लाइंट जैसे MacGDBp की सलाह देता हूं। यह वास्तव में दर्द को कम करता है ... मैं अन्य बिंदुओं पर सहमत हूं।
जोनास ड्यू विस्टरहेडेन

5
# 2: हे भगवान, मुझे उस पर शुरू मत करो। मुझे हमेशा अपने आप को एक PHP डेवलपर के रूप में खुद का बचाव करना पड़ता है, जिसने केवल उस गंदगी को देखा है जो कई लोग PHP के साथ बनाते हैं।
सेल्फवॉर्सप

1
# 2 के लिए +1 मैंने एक PHP डेवलपर के रूप में खुद को बचाने के लिए बहुत अधिक समय बिताया है।
UnwwnTech

+1 # 2 के लिए - खराब वेतन के परिणाम भी :(
शिकी

25

सी (ठीक है, यह मेरा पसंदीदा नहीं है, लेकिन यह अभी तक नहीं किया गया था।)

  • सॉकेट लाइब्रेरी सिंटैक्स।
  • कोई फ़ंक्शन ओवरलोडिंग नहीं।
  • सी-स्टाइल के तार।
  • बफर ओवररन।
  • क्रिप्टिक वाक्यविन्यास। मुझे नहीं पता कि कितनी बार मैंने अटोई जैसा सामान देखा है, मेरे माथे को थप्पड़ मारा, और चिल्लाया "बेशक!"

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


22
सॉकेट सिंटेक्स क्या है? C में सॉकेट की कोई अवधारणा नहीं है।
फेर्रुकियो

3
ओह चलो! आप पाँच के साथ आ सकते हैं। क्या सूचक अंकगणित सिर्फ चूसना नहीं करता है? :)
ब्रायन डी फॉय

8
+1 मैं "सी-स्टाइल स्ट्रिंग्स" पर हंसा। और @brain_d_foy: सूचक अंकगणित केवल चूसता है यदि आप इसे नहीं समझते हैं।
क्रिस लुत्ज

1
@ क्रिस लट्स: यहां तक ​​कि जब मैं प्लेन सी सीख रहा था (इससे पहले कि मैं सी ++ या किसी अन्य ओओ भाषा जानता था) मुझे पता था कि चार्ट के बारे में कुछ गलत था। :)
छिपकली

2
सूचक अंकगणित एक शक्ति है - बहुत कुशल, लेकिन आप अपने पूरे पैर को जोखिम में डालते हैं
Thorbjørn Ravn Andersen

24

आम लिस्प:

  1. कीवर्ड्स अक्सर बहुत खराब होते हैं।
  2. पुस्तकालय का समर्थन दयनीय है।
  3. OSes में अच्छी तरह से काम नहीं करता है जो मेमोरी को अधिक सख्ती से संभालना चाहते हैं।
  4. ओएस के साथ बातचीत करने के लिए अच्छी सुविधाएं नहीं हैं।
  5. "लूप" सुविधा अच्छी तरह से परिभाषित नहीं है, और निश्चित रूप से लिस्फी नहीं लगती है।

2
'लूप' शायद लिस्फी नहीं हो सकता है, लेकिन इसके बारे में खराब क्या परिभाषित है?
डैनियल कैसिडी

2
मैंने स्वयं मानक नहीं पढ़ा है, मैं ज्यादातर पॉल ग्राहम के "ऑन लिस्प" पर जा रहा हूं। वह कहते हैं कि मानक ज्यादातर उदाहरण हैं, और कोने के मामलों को अच्छी तरह से परिभाषित नहीं करता है।
डेविड थॉर्नले

3
क्या आपके पास कीवर्ड-बहुत-चिंताजनक नहीं हैं?
GClaramunt

मैं मानता हूँ कि यह "लिस्पी" नहीं है, लेकिन CLtLv2 इस पर बहुत समय बिताता है। मुझे लगता है कि यह बहुत ज्यादा रास्ता तय करने के लिए बनाया गया था। sunsite.univie.ac.at/textbooks/cltl/clm/…
हंस वैन स्लोटन

"लूप" के अलावा, "प्रारूप" भी बहुत लिस्प्लाइक नहीं है। मुझे "प्रारूप" और "पाश" दोनों से नफरत है, भले ही लिस्प मेरी पसंदीदा भाषा है।
पॉल रीनर्स

24

BrainF * सी.के.

  • आपका मुख्य आकर्षण यह है कि आप ट्यूरिंग पूरा कर रहे हैं ?! मैं पर्ल नियमित अभिव्यक्तियों में अधिक कर सकता हूं!

  • वस्तुओं का अभाव। चलो, लोग! यह पसंद है, नमस्ते ...

  • कोई नेटवर्किंग लाइब्रेरी नहीं। मैं बस यही चाहता हूं कि एक वेब पेज, GOSH को परिमार्जन करें।

  • प्रथम श्रेणी के कार्य नहीं। बधाई - आपको अपने जावा दोस्तों के साथ बधाई मिलनी चाहिए।

  • भंडारण के लिए एक अनंत टेप और कुछ नहीं। यह इतना दिखावा है कि हम लिस्प लिख सकते हैं।


6
कोई नामस्थान या डायनेमिक मॉड्यूल समर्थन नहीं है। ऐसी मूल बातों के बिना हमें रासायनिक संयंत्र नियंत्रण प्रणाली लिखने की उम्मीद कैसे की जा सकती है?
डोनाल्ड फैलो

कोई वाक्यगत चीनी, जैसे कि> 10 (10 बार स्थानांतरित), 0 (शून्य डालें), +5 (5 जोड़ें)।
स्क्वॉल

23

जावास्क्रिप्ट

  1. स्ट्रिंग्स के रूप में संख्या - गणित को स्ट्रिंग्स के रूप में व्याख्या किए जाने पर निराशा हो सकती है। ५ + २ = ५२? गरर ...
  2. अनुमतियाँ - सभी सर्वश्रेष्ठ सामान को उपयोगकर्ता से अनुमति की आवश्यकता होती है!
  3. स्क्रीन अपडेट - स्क्रीन को अपडेट करने के लिए ब्राउज़र स्थिर अवस्था में होना चाहिए। स्क्रिप्ट के बीच में स्क्रीन को अपडेट करने के लिए बाध्य करने का कोई तरीका प्रतीत नहीं होता है।
  4. धीमा - हालाँकि Google का Chrome अच्छा है ...
  5. ब्राउज़र अंतर भाषा का उपयोग करते हुए [सेंसर] करते हैं।

4
तार के रूप में संख्या आसानी से तय हो गई है। यदि आपको कभी कोई तार मिला है, तो आपको इसे parseInt (x, 10) करने की आवश्यकता है। जब आप 10 से बाहर निकलते हैं तो विशाल असफलता होती है, और यह '017' को OCTAL के रूप में व्याख्या करता है
ओरियन एडवर्ड्स

3
झूठी == 0 == [] == "" लेकिन अशक्त और NaN नहीं हैं। NaN! = NaN। null == null
जिमी

7
टाइपऑफ़ "a string" == "string"। टाइपऑफ नया स्ट्रिंग ("एक और स्ट्रिंग") == "ऑब्जेक्ट। नया स्ट्रिंग ('ए')। कंस्ट्रक्टर =" ए "। कंस्ट्रक्टर। टाइपऑफ नया एरे () == 'ऑब्जेक्ट'
जिमी

1
for (x in object) रिटर्न फंक्शन
जिमी

14
-1, यह सूची ज्यादातर ब्राउज़र मुद्दों के बारे में है, न कि भाषा के बारे में।
मौरिसियो शेफ़र

20

पीएचपी:

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

फिर भी पीएचपी है (पटकथा) भाषा। ;-)


ठीक है, केवल एक और बात जाने के लिए!
ब्रायन डी फॉय

4
बिंदु 5 से पूरी तरह सहमत हैं - एक जावास्क्रिप्ट सूची में भी होगा।
स्टीव क्लेरिज

मैं "सभी गरीब प्रोग्रामर से असहमत हूं जो यह नहीं सीखते कि इसे कैसे ठीक से काम करना है, और इसे एक बुरा नाम देना है"। मैं इसे "रनटाइम भाषा कॉन्फ़िगरेशन विकल्पों पर बड़े पैमाने पर निबटने" के साथ प्रतिस्थापित करूँगा।
L̲̳̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e

18

VB6

  1. केवल विंडोज।
  2. अब समर्थित नहीं।
  3. Arrays किसी भी संख्या में शुरू हो सकता है, बल्कि तब सभी को 0 से सामान्य किया जा सकता है।
  4. संकलित अनुप्रयोग ठीक से चलने के लिए कई dll पर निर्भर करता है।
  5. कई जटिल नियंत्रण जैसे कि ब्राउज़र नियंत्रण या कोड के जटिल टुकड़े आईडीई को तोड़ने के लिए जाते हैं जब आप कोड को अन-रन करते हैं, लेकिन संकलित होने पर ठीक काम करते हैं।

13
VB किसी की पसंदीदा भाषा है? O_O। "सिंटाज़" क्यों नहीं है जो अन्य भाषाओं के साथ पूरी तरह से अलग और असंगत है "और" अन्य भाषाओं के संबंध में बुरी आदतें "यहाँ है?
जोंटा

3
मुझे वास्तव में # 3 एक बहुत शक्तिशाली सुविधा मिल रही है, बग नहीं - मुझे वास्तव में VB.NET बहुत पसंद है। एडब्ल्यूके में यह एक अर्थ में है, लेकिन फिर AWK सरणियों में वास्तव में भेस में हैश :(
Pineda

3
1 और 4 पर, और .NET C # को एक पूर्ण फ्रेमवर्क और ऑपरेटिंग सिस्टम की आवश्यकता नहीं है ??? (हे, मैंने सुना है कि आप मोनो बिगोट ... यह अभी भी आपके लिए एक "पूर्ण ढांचा" है, और मुझे संदेह है कि एक डिबियन डिस्टर्ब इसे खा जाता है)। 5 के संबंध में, कोई भी सही-दिमाग वाला VB6 प्रोग्रामर (दिन में पीछे) ने डिफ़ॉल्ट "कंपाइल ऑन डिमांड" विकल्प को चालू नहीं रखा ...
jpinto3912

2
अभी भी कभी-कभी vb6 का समर्थन करना पड़ता है। पालतू जानवरों की चोरी: घोषणा में परिवर्तन नहीं कर सकता, कोई पैराट्राइज्ड कंस्ट्रक्टर्स, एक वर्ग प्रति फ़ाइल, आदि ... यदि वे इन मुद्दों को ठीक नहीं करेंगे, तो भाषा 10 साल के लिए आसान हो सकती है।
एंग्रीहैकर

14
"ऑन एरर रिज्यूमे नेक्स्ट" के बारे में क्या ... यह कहने की तरह "यह कोड F ** KED है, लेकिन इसे वैसे भी चालू रखने देता है। =)
StingyJack

18

रूबी मेरी पसंदीदा भाषा है, यहाँ मुझे क्या पसंद नहीं है:

  • ग्रीन थ्रेड + ब्लॉकिंग लाइब्रेरीज = विशाल विफल
  • इतनी धीमी गति से
  • मानक पुस्तकालय अपने धमाके के उपयोग के साथ असंगत है! तरीकों
  • मॉड्यूल में शामिल हैं + विस्तार गड़बड़ है।
  • "ओपन क्लासेस" को स्कोप नहीं किया जा सकता है - मैं एक स्ट्रिंग # डस्टफ जोड़ना चाहता हूं, लेकिन मैं नहीं चाहता कि सभी थर्ड पार्टी लाइब्रेरी में लीक हो जाए
  • कोई बाइनरी तैनाती पैकेजिंग समाधान।

3
क्या आपने रूबी 1.9.1 की कोशिश की है? रूबी 1.8.6 की तुलना में यह एक विशाल गति प्रदान करता है
क्रिश्चियन स्टेड-शुल्ड

जुराबे आजमाएं। JVM JIT FTW!
KitsuneYMG

उचित समस्याओं को शामिल करने के लिए +1, शीर्ष-रेटेड रूबी जवाब से 'घृणा' के विपरीत।
मेंढक

17

डेल्फी:

  • आईडीई थोड़ा अस्थिर है।
  • कोड अंतर्दृष्टि कभी-कभी भ्रमित होती है।
  • डिबगिंग कभी-कभी छोटी गाड़ी है।
  • कई प्रोजेक्ट फाइलों को अपडेट करना बोझिल हो सकता है।
  • यदि एक या अधिक पैकेज अनुपलब्ध हैं, तो प्रारंभ करना, त्रुटि संदेश कई बार पॉप अप होता है।

5
इन सभी को डेल्फी द आईडी के बजाय डेल्फी के बारे में शिकायतें प्रतीत होती हैं (AKA ऑब्जेक्ट पास्कल)
डोनल

11
संभवत: ऐसा इसलिए है क्योंकि ऑब्जेक्ट पास्कल एकदम सही है ;-)
मार्क बेसी

3
मैं पार्टी के लिए थोड़ा लेट हो गया हूँ, लेकिन यहाँ कुछ भी हो जाता है: - विधि हस्ताक्षर को दो बार लिखना है (इंटरफ़ेस + कार्यान्वयन) - इकाई का नाम फ़ाइल नाम के समान होने के लिए आवश्यक है। WTF?!?
मार्टिज़न २ Mart'०

1
मुझे लगता है कि शुरुआत .. बेहतर होने के लिए है - वे {} की तुलना में बहुत स्पष्ट हैं। आप इसे लिखने की तुलना में बहुत अधिक समय कोड पढ़ने में खर्च करते हैं। एक पकड़ के लिए, हालांकि - आप एक मामले में प्रगणित प्रकार के परिभाषित उपग्रहों का उपयोग नहीं कर सकते हैं, भले ही यह पूरी तरह से कानूनी हो अगर आप मामले में वहीं सीमा की घोषणा करते हैं। इसके अलावा, इकाइयों के आगे कोई संदर्भ नहीं।
लोरेन Pechtel

1
@AlexanderN: नहीं, यह कभी भी अधिक जीवित, लोकप्रिय या महान नहीं रहा है।
एंड्रियास रिब्रांडैंड

16

जावास्क्रिप्ट

  • हर स्क्रिप्ट को एक ही वैश्विक 'नाम स्थान' में निष्पादित किया जाता है ... कुछ ऐसा जो आपको विभिन्न स्रोतों से स्क्रिप्ट के साथ काम करते समय देखना होगा

  • यदि एक चर का उपयोग किया जाता है, लेकिन हाथ से पहले परिभाषित नहीं किया गया है, तो इसे वैश्विक चर माना जाता है

  • ब्राउज़र विक्रेता मानक बनाते हैं जैसे वे कृपया, हमारे लिए इतनी सुंदर भाषा का उपयोग करने वाले डेवलपर्स के लिए कोडिंग करना चाहिए, जितना कि यह होना चाहिए

  • केस-सेंसिटिविटी - यह देखते हुए कि संकलित समय जाँच के साथ js विकसित करने के लिए कोई अच्छा IDE नहीं है

  • hasOwnPropertyकुछ प्रदर्शन करने के लिए वर्कअराउंड (जैसे कि विधि का उपयोग), अन्यथा सरल ऑपरेशन।


AFAIK, ब्राउज़र विक्रेताओं द्वारा JS भाषा (DOM नहीं) के सभी एक्सटेंशन को कम से कम मानक अपनाने के लिए धकेल दिया गया है - भले ही मानक प्रक्रिया इसे प्राप्त करने में विफल रही हो। hasOwnProperty / workarounds: दोधारी तलवार। "सरलता" को मजबूर करने के लिए, हम बहुत अधिक शक्ति और लचीलापन खो देते हैं। वह शिकायत मुझे हमेशा परेशान करती है। अपने छोरों को सही लिखें (और अपने ऑब्जेक्ट के सदस्यों की भी सही जांच करें)!
पलकविहीनता

15

हास्केल:

  1. आलसी मूल्यांकन से अंतरिक्ष लीक।
  2. गणितीय पदानुक्रम के संबंध में संख्यात्मक पदानुक्रम का निर्माण नहीं किया गया है।
  3. सख्त मोनोडिक IO डीबग करना कठिन बना सकता है।
  4. बड़े कार्यान्वयन उन तरीकों से I / O को संभालते हैं जो मानक के अनुरूप नहीं लगते हैं। (विशेष रूप से, आउटपुट वर्ण केवल निम्न 8 बिट्स आउटपुट करता है - और फिर कोड बनाया जाता है जो इस धारणा का उपयोग द्विआधारी I / O। Ick करने के लिए करता है।)
  5. ($)कुछ भावों को प्रीतिकर बनाने के लिए ऑपरेटर की संगति को बदला जा सकता है।

इनमें से अधिकांश घृणा के स्तर तक नहीं बढ़ते हैं, और ऐसे लोग हैं जो इनमें से प्रत्येक के लिए ठोस वर्कआर्ड को ठीक करने या निर्माण करने की कोशिश कर रहे हैं।

संपादित करें: बिंदु 5 के बारे में कुछ भ्रम हो गया है। विशेष रूप से कुछ लोगों को लगता है कि मेरे पास तर्क का क्रम है, जो मुझे नहीं लगता। यह बताने के बजाय कि मेरा क्या मतलब है, मैं सिर्फ निम्नलिखित लिंक पर लोगों को इंगित करूंगा, http://hackage.haskell.org/trac/haskell-prime/wiki/ChangeDollarAssociativity , जो इसे अच्छी तरह से व्यक्त करता है।


3
आप ($) की समरूपता को क्यों बदलना चाहेंगे? 'fghx' कोष्ठक के रूप में '((fg) h) x' और 'f $ g $ h $ x' कोष्ठक को 'f (g (hx))' के रूप में ...
Erik Hesselink

1
I <3 हास्केल। मानक पुस्तकालय में वेक्टर रिक्त स्थान एट अल सहित गणितीय सार के पहाड़ों को शामिल करने की आवश्यकता है। प्रस्तावक को एक ऑपरेटर की भी आवश्यकता होती है, जो जंजीर को पसंद करता है ($) लेकिन बाएं से दाएं {स्रोत |> func3>> फ़िल्टर func2 |> नक्शा (func3 10)}।
4

10
आप वास्तव में खराब एक को याद करते हैं: एक पत्र चर नामों का उपयोग करने के लिए हास्केल प्रोग्रामर की प्रवृत्ति।
बेंजामिन कन्फिनो

1
एक बाएं-सहयोगी ($) ऑपरेटर केवल फ़ंक्शन अनुप्रयोग है, जो हास्केल में अंतरिक्ष चरित्र द्वारा दर्शाया गया है। @ जस्टिस: फ्लिप फंक्शन को आजमाएं। (|>) = फ्लिप ($)
Apocalisp

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