कौन सी भाषा सुविधाएँ हानिकारक मानी जाती हैं? [बन्द है]


20

कृपया, यह बताएं कि क्यों और कौन सी भाषाओं में (गलत) सुविधा लागू है, जहां तक ​​आप जानते हैं।

पोस्ट जिसे आप एक हानिकारक विशेषता मानते हैं, न कि आप जो नापसंद करते हैं।



2
@sbi आप एक ही पेज "XMLHttpRequest Considered Harmful" में भी पढ़ सकते हैं ...
HoLyVieR

1
मूल भावों के संभावित अपवाद के साथ, सभी को हानिकारक माना जाता है।
डेविड थॉर्नले


3
@ डेविड थॉर्नले: a = 1/0 - मूल अभिव्यक्ति, हानिकारक। ;-)
परिक्रमा

जवाबों:


37

PHP में ग्लोबल्स रजिस्टर करें

जानकारी: http://php.net/manual/en/security.globals.php

यह पठनीयता कारणों और सुरक्षा कारणों से अब तक की सबसे खराब विशेषता है। मूल रूप से प्राप्त सभी GET पैरामीटर चर में बदल जाते हैं।

इस URL के साथ उदाहरण के लिए: /index.php?value=foobar

आप निम्न कार्य कर सकते हैं:

<?php
echo $value; // return foobar
?>

जब आप कोड पढ़ रहे होते हैं, तो यह जानना बहुत भ्रामक होता है कि चर कहाँ से आता है।

इसके अलावा अगर सुविधा का दुरुपयोग किया जाता है, तो यह सुरक्षा छेद को जन्म दे सकता है। यहाँ php.net से एक कोड उदाहरण है जो दिखाता है कि इसका दुरुपयोग कैसे किया जा सकता है:

<?php
// define $authorized = true only if user is authenticated
if (authenticated_user()) {
    $authorized = true;
}

// Because we didn't first initialize $authorized as false, this might be
// defined through register_globals, like from GET auth.php?authorized=1
// So, anyone can be seen as authenticated!
if ($authorized) {
    include "/highly/sensitive/data.php";
}
?>

यह खराब है। जबकि मैं समझ सकता हूँ, यह डिफ़ॉल्ट रूप से रखते हुए बिल्कुल समझ में नहीं आया
TheLQ

14
यह ध्यान दिया जाना चाहिए और जोर दिया जाना चाहिए कि PHP 4.2 के बाद से रजिस्टर ग्लोबल्स को डिफ़ॉल्ट रूप से सक्षम नहीं किया गया है (2000 में सभी तरह से), PHP 5.3 (2009) में हटा दिया गया है और पूरी तरह से PHP 6 में हटा दिया जाएगा, लेकिन लोग अभी भी वापस जा रहे हैं "OMG रजिस्टर ग्लोबल्स" को 10 साल बाद भी अच्छी तरह से।

1
सुंदर होपलेस PHP
मिंग-तांग

@SHiNKiROU यह निराशाजनक नहीं है, उस सुविधा को हटा दिया गया था और इसे PHP 6. में हटा दिया जाएगा
HoLyVieR

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

22

डिफ़ॉल्ट रूप से नल की अनुमति दें, "ट्रिलियन" * डॉलर की गलती। सॉरी टोनी होरे। ग्रह पर उपलब्ध लगभग हर भाषा।

टोनी होरे बताते हैं

* मैंने इन दिनों वास्तविक नुकसान को प्रतिबिंबित करने के लिए टोनी होरे द्वारा गढ़ी गई अभिव्यक्ति को समायोजित किया :-)


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

@ imgx86, नहीं, यह निश्चित रूप से एक गलती है। गैर-अशक्त संदर्भ प्रकार एक प्रकार की प्रणाली के साथ संगतता की अनुमति देने के लिए अशक्त गलती की प्रतिक्रिया में जोड़ा गया फीचर है जो आमतौर पर अशक्त करने की अनुमति देता है।
बजे मैट ओलेनिक

@Kyralessa: शायद वह यह सुनिश्चित करना चाहता है कि HoLyVieR को लोकलुभावन बिल्ला मिले? :-) मैं सहमत हूँ, इस तरह से अपने स्वयं के उत्तर को स्वीकार करने का कोई मतलब नहीं है।
18

18

C और C ++ मेक्रो। अगर मुझे कभी किसी अन्य कंपाइलर त्रुटि को किसी को अपने मैक्रो के लिए मानक फ़ंक्शन नाम चुनने के कारण देखना पड़ता है जो मेरे कोड को स्क्रू करता है तो मैं चीखने जा रहा हूं। आइए देखते हैं अंतिम अंतिम एक:

#define vector(int) new VARIANT[int];

Aaarg! आपने मेरे एसटीएल वेक्टर के साथ क्या किया है !?


नेमस्पेसिंग उन चीजों में से एक है जो टाइपफेड और टेम्प्लेट को तुरंत अधिक अनुकूल बनाती है।
Shog9

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

आपको यह मैक्रो कहां मिला?
rwong

@dsimcha - मुझे इस बारे में जानकारी नहीं है। लिस्प मैक्रोज़ लंबे समय से आसपास हैं।
जेसन बेकर

2
@ जेसन: मैं लिस्प-शैली "असली" एएसटी मैक्रोज़ नहीं मार रहा हूं, जो अभी भी उपयोगी और शांत हैं। मैं केवल सी / सी ++ शैली वाले मैटर से नफरत करता हूं, जो विशुद्ध रूप से पाठ स्तर पर काम करते हैं, गुंजाइश की कोई अवधारणा नहीं है, एक को हास्यास्पद रूप से विषम सार और अस्पष्ट कोड बनाने की अनुमति देता है, और अधिक आधुनिक सुविधाओं द्वारा पूरी तरह से अप्रचलित किया जा सकता है, जिनमें से एक, विडंबना यह है कि , "असली" मैक्रोज़ है।
dsimcha

14

C और C ++ स्टेटमेंट में डिफ़ॉल्ट रूप से गिरावट।


18
मेरे द्वारा लिखे गए सभी कोड में यह हमेशा एक उपयोगी सुविधा है। यह मिसफिट कैसे है?
ग्रेफेड

6
@ ग्रेफडे: यह तब तक मददगार है जब तक आप breakबयान को नहीं भूल जाते हैं , या कोई व्यक्ति दो मामलों के बीच एक मामला जोड़ता है (या उन्हें फिर से आदेश देता है), यह देखते हुए कि उनके बीच गिरावट नहीं हुई थी। मुझे ऐसा कोई रास्ता नहीं दिख रहा है, जो किसी भी तरह से ब्रेक या गोटो के मामले में गिराने के सी # तरीके से बेहतर हो, आदि
टिम गुडमैन

9
डफ का उपकरण आपकी अशुद्धता पर उपहास करता है!
जेसी सी। स्लाइसर

3
मैं सहमत हूँ। डिफ़ॉल्ट रूप से एक अच्छी सुविधा नहीं है।

11
क्या कोई नहीं पढ़ता? उन्होंने कहा कि DEFAULT
मैट ओलेनिक

13

जब स्पष्ट प्रकार के बीच कोई स्पष्ट संबंध नहीं होता है तो लागू प्रकार के रूपांतरण। उदाहरण के लिए, PHP की तरह , एक यादृच्छिक, गैर-संख्यात्मक stringमें परिवर्तित करना int


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

2
@ क्लोकुन: क्या आप एक बेहतर उदाहरण के साथ आ सकते हैं? एक स्ट्रिंग प्रकार का उपयोग करके db में अभिन्न मूल्यों को क्यों स्टोर किया जाता है?
स्टीवन एवर्स

@SnOrfus एक संख्या एक URL में पारित हो रही है, उपयोगकर्ता इनपुट, कार्य, और अन्य चीजें जो गैर-सांख्यिकीय रूप से टाइप की गई भाषाओं के लिए सामान्य हैं।
एलक्यूक्यू ऑक्ट

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

@ THELQ: यदि यह उपयोगकर्ता इनपुट है, तो आपको यह पता लगाना होगा कि यह संख्या है या नहीं। जैसे @ सलोकेन ने कहा। यदि आप किसी फ़ाइल से डेटा पढ़ रहे हैं, तो आप संख्यात्मक डेटा की अपेक्षा उस स्थान पर कर सकते हैं, जहाँ यह माना जाता है, लेकिन डिस्क भ्रष्टाचार के मामले में अपवाद को उठाना अक्सर 0कुछ मान के लिए यादृच्छिक होने से बेहतर होता है ।
intuited

12

गोटो : हालांकि दुर्लभ मामलों में ठीक है, यह अधिक बार दुरुपयोग होता है और कार्यक्रमों को पढ़ने के लिए कठिन होता है।


अच्छा भगवान हाँ। xkcd.com/292
TheLQ

3
मैंने इसके विपरीत देखा है जहां गोटो के विवेकपूर्ण उपयोग की अनुमति देने से प्रोग्राम को 3 मिलियन लाइनों की कोड होने से बचाया जा सकता है।
डेव

2
आह, हाइपरबोले ... एक मान्य साहित्यिक तकनीक।
रॉबर्ट हार्वे

11

कोई नहीं

सिर्फ इसलिए कि एक विशेषता का अक्सर दुरुपयोग होता है, यह हानिकारक नहीं होता है।

IMHO संपूर्ण "हानिकारक माना जाता है" प्रोग्रामिंग लैंग्वेज चर्चाओं का Reductio ad Hitlerum है।

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

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

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


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

5
+1 गलत हाथों में डालना, किसी भी भाषा का निर्माण हानिकारक है।
मौविसील

5
अच्छी बात है ... भले ही 95% गोटो खराब हैं, फिर भी यह सुविधा अभी भी अन्य 5% के लिए लायक है
eds

1
मुझे लगता है कि यह रेडियो के आगे इजेक्टर सीट बटन को ऑन / ऑफ बटन लगाने जैसा है। यह सुविधा ख़राब नहीं हो सकती है, लेकिन इसके आकस्मिक उपयोग से होने वाले नुकसान को रोकना नहीं है।
लेनीप्रोग्रामर्स

1
मुझे लगता है कि यह "लोगों को मारना नहीं है, लोग करते हैं" के बराबर प्रोग्रामिंग है।
परिक्रमा

7

ऑटोविविफिकेशन (या अन्य बाइंड-वैरिएबल-ऑन- (असाइन | यूज़) फ़ीचर) वह फीचर है, जो मुझे सबसे अधिक बग देने के लिए मिला है।


+1 - हम इटैटर शुगर पर सहमत नहीं हो सकते हैं लेकिन यह एक ऐसी चीज है जिससे मैं 100% सहमत हो सकता हूं।
चोसपांडियन

7

PLEASEINTERCAL में। यह पर्याप्त उपयोग न करें, यह शिकायत करता है। इसका बहुत अधिक उपयोग करें, यह शिकायत करता है।


2
उस भाषा का गंभीरता से उपयोग नहीं किया जाना चाहिए। यह एक बहुत ही 'अद्वितीय' प्रोग्रामिंग भाषा बनने के लिए बनाया गया था, इसलिए यह उन चीजों से भरा हुआ है (जैसे कि मेरे दिमाग के शीर्ष पर) - जो समझ में नहीं आता है।
ShdNx

4
मैंने सोचा था कि यह स्पष्ट होगा, लेकिन हां, मैं जानता हूं कि यह गंभीर भाषा नहीं है।
एलन पीयर्स

2
क्षमा करें, कुछ लोग यहां बहुत गंभीर हैं।
मार्क सी

1
बस पिछले सप्ताह विकिपीडिया पर भाषा की खोज की और यह बताया गया कि यह कितना लोकप्रिय था (और अभी भी is_ O_O)।
ओलिवर वीलर

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

7

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

  • सब कुछ के लिए डिफ़ॉल्ट रूप से वैश्विक गुंजाइश (डीसी दिखाता है कि फ़ंक्शन / ऑब्जेक्ट्स को नामस्थान और स्कोम डेलिमीटर के रूप में कैसे उपयोग किया जाए।)

  • जैसे कथन with, जिनका विफलता व्यवहार वैश्विक नाम स्थान पर चीजों को परिभाषित करना है। (जीएएच! जेएस के आदर्श वाक्य की तरह यदि आप असफल होते हैं, तो जितना संभव हो उतना कठिन हो !)

  • ==ऑपरेटर के साथ अप्रत्याशित व्यवहार , जो मूल रूप से आपको हमेशा ===ऑपरेटर का उपयोग करने की आवश्यकता होती है ।

  • अर्धविराम सम्मिलन।

वास्तव में जेएस की एक पूरी बहुत हानिकारक माना जाना चाहिए, शायद पूरी भाषा भी, लेकिन अच्छे हिस्से सिर्फ इतने अच्छे हैं कि यह इस तरह का बना (कम से कम मेरे लिए)।


6

डिफ़ॉल्ट व्यवहार के रूप में फ़्लैश प्लेयर में "चुपचाप विफल"

ठीक है, वास्तव में भाषा की एक विशेषता नहीं है, लेकिन अभी भी बहुत बारीकी से संबंधित है।

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

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

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

हालांकि, कुछ समाचार साइटों पर फ्लैश एम्बेडेड फिल्में देखने और उपयोग किए गए एम्बेडेड खिलाड़ी SWF से नल संदर्भों के बारे में बार-बार संदेश प्राप्त करना काफी दिलचस्प हो सकता है। : डी


iPhone ऐप भी बिना किसी चेतावनी के कभी-कभी क्रैश हो जाते हैं, कुछ अजीब समय में
मिंग-तांग

3
किसी भी चीज़ में चुपचाप नाकाम होना ।

6

C / C ++ में: ये असाइनमेंट भी बहुत समान असाइनमेंट = और तुलना == ऑपरेटरों के साथ जुड़े हुए हैं। प्रति सेहत के लिए हानिकारक नहीं है, लेकिन गलती से ऑपरेटर को गलती से (कभी-कभी सूक्ष्म) बग का परिचय देना आसान है।

int i = 10;

someCode();

if(i = 5)
{
    /* We don't want this block to be executed, but it is */
    moreCode();
}

... इस तथ्य से संयुक्त है कि एक पूर्णांक या एक सूचक एक मान्य स्थिति है।
बरजक

5

पैकेज निजी भाषा डिफ़ॉल्ट और निजी प्रोग्रामिंग सम्मेलन डिफ़ॉल्ट के साथ जावा में मॉडिफायर एक्सेस करें।


5

शेल में एक खाली स्ट्रिंग द्वारा अपरिभाषित चर की जगह: बिना किसी चेतावनी के rm -rf $nosuchvar/*


+1 अर्घ! LOL - भयावह डिफ़ॉल्ट (और मनोरंजक / डरावना उदाहरण)
परिक्रमा

@ कुछ शानदार ${varname:-/dev/null}हो सकता है वर्कअराउंड ...
duros

वैसे यह उपयोग से पहले हमेशा रक्षात्मक रूप से चर अस्तित्व और सामग्री की जांच करने की आवश्यकता को दर्शाता है।
11

4

लोगो में वामावर्त को चालू करने की क्षमता। Wtf, बस क्लॉकवाइज 360 - xडिग्री को चालू करने देता है ।


जब से मैंने लोगो का उपयोग किया है, ठीक है, यह एक समय रहा है यह हानिकारक क्यों है?
मेसन व्हीलर

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

@ मेसन, यह एक मजाक माना जाता था।
jjnguy

3
हाँ, विशेष रूप से लोगो में घड़ियों के लिए।
intuited

1
मुझे लोगो से प्यार है (देखें प्रोग्रामर.स्टैकएक्सचेंज. com/questions/ 21028/… ) और यह एक उत्कृष्ट शिक्षण भाषा है, विशेष रूप से युवा लोगों के लिए। जब मैं 11 साल का था और पहली बार लोगो का इस्तेमाल किया गया था, तब मेरी कक्षा के अधिकांश लोग ज्यामिति के बारे में नहीं जानते थे, लेकिन उन्होंने बताया कि 90 एक तिमाही थी और दाएं से बाएं पता था। तो यह एक नकारात्मक विशेषता नहीं है - उसी तरह जैसे हम एक विभाजक ऑपरेटर होने के बजाय पारस्परिक द्वारा गुणा नहीं करते हैं। हां, मुझे पता है कि यह एक मजाक है।
बजे

4

थ्रेड को दूसरे थ्रेड से रोकना

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


जबकि मुझे लगता है कि यह हानिकारक हो सकता है, ऐसे समय बहुत उपयोगी होते हैं (उदाहरण के लिए, एकल स्टेपिंग और ब्रेक पॉइंट का समर्थन करने वाला डिबगर)।
जेरी कॉफिन

1
@ जेरी डिबगिंग एक पूरी दूसरी चीज है, यह प्रक्रिया को रोकती नहीं है, यह इसे रोकती है।
HoLyVieR

इसके विपरीत, यह धागे को रोकता है। जाहिर है, आप थ्रेड को मारने के बारे में बात कर रहे हैं , न कि केवल इसे रोकना। यह औचित्य सिद्ध करने के लिए थोड़ा कठिन है ...
जेरी कॉफिन

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

4

PHP में चर चर

सिर्फ इसलिए $canकि आपका मतलब यह नहीं है$$should


1
हमेशा की तरह, पर्ल ... में (संभावित रूप से खतरनाक) सुविधा उपलब्ध है, इसे बंद करने के लिए एक आसान सबसे अच्छा तरीका है ( use strict) और इसे फिर से चालू करने के लिए एक आसान तरीका है कि आप इसे ( no strict 'refs') चाहते हैं ।

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

मिमी, अनुप्रयोगों में अन्य लोगों के अप्रिय पैकेज चर या प्रतीक तालिका के साथ मेटाप्रोग्रामिंग शामिल है (जो कि एक अलग है, मुझे लगता है)।

1
@ मैं आपको एक उदाहरण दिखाने के लिए चुनौती दूंगा जहां चर चर समाधान को स्पष्ट करते हैं।
केंडल हॉपकिंस

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

3

Withहालांकि ऐसे मामले हैं, जब यह उपयोगी है डेल्फी में बयान, मन में आता है।


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


2

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

sub foo { (1..5) }
my @list = foo();           # (1,2,3,4,5)
my $length = scalar @list;  # 5. the length of the list.
my $length2 = scalar foo(); # '' (the empty string. because it's false)

यह सिर्फ सही नहीं है।

(यह कुछ बनाने की कोशिश करने से उत्पन्न होता है जो नियमित रेंज ऑपरेटर की तरह काम करता है, इसलिए आप लूप में कुछ कह सकते हैं next if /start_regex/ .. /end_regex/)।


आदमी जो इतना भ्रमित है। पर्ल को सीखने के बारे में सबसे बुरी बात यह थी कि मैं अपना सिर इधर-उधर करने की कोशिश कर रहा था।
ग्लेनट्रॉन

मैंने हमेशा कुछ भी सोचा जो एक फ़ंक्शन को कई तरीकों से वापस करने की अनुमति देता है एक आसान सुविधा थी।
परिक्रमा

2

पायथन 2.x का सापेक्ष आयात वाक्य-विन्यास। मान लीजिए मेरे पास एक पैकेज है x.pluginsजो विभिन्न अन्य पुस्तकालयों के लिए समर्थन जोड़ता है x। और मान लीजिए कि मेरे पास एक sqlalchemyमॉड्यूल है x.pluginsतो मैं sqlalchemy समर्थन को जोड़ सकता हूं x। आपको क्या लगता है कि अगर मैं निम्नलिखित लाइन को sqlalchemy.py में जोड़ दूं तो क्या होगा?

import sqlalchemy

इसका उत्तर यह है कि मॉड्यूल स्वयं को आयात करने का प्रयास करेगा। यह वाक्यविन्यास जो करता है वह अनिवार्य रूप से वास्तविक वैश्विक sqlalchemy पैकेज को आयात करना असंभव बनाता है। पायथन 2.5 ने यह निर्दिष्ट करने का एक तरीका जोड़ा कि यह एक सापेक्ष आयात है:

from . import sqlalchemy

... लेकिन यह पायथन 3 तक नहीं है कि पहले सिंटैक्स को वास्तव में छुटकारा मिल गया था (हालांकि इसे अजगर 2.6+ के साथ अक्षम किया जा सकता है from __future__ import absolute_import)।


1

sun.misc.unsafe मेरा ऑलटाइम फेवरेट है; "चीजों को लागू करने के लिए हमें इसकी आवश्यकता थी, लेकिन वास्तव में, वास्तव में ऐसा नहीं लगता कि आपको इसका उपयोग करना चाहिए।"


7
हर अच्छी भाषा में मानक पुस्तकालय में एक असुरक्षित पैकेज होना चाहिए । इस पैकेज को आयात करना स्पष्ट रूप से निम्न-स्तरीय महत्वहीन चीजों को करने के आपके इरादे को दर्शाता है। विकल्प हैं: 1- भाषा में स्वयं असुरक्षित विशेषताएं (उदाहरण के लिए C ++) और 2- निम्न स्तर की चीजों (उदाहरण के लिए पायथन और रूबी) करने के लिए सी जैसी एक अलग भाषा का उपयोग करना। असुरक्षित पैकेज दृष्टिकोण मुझे बहुत बेहतर लगता है।
imgx64

1

फोरट्रान आम ब्लॉक। यदि आपने एक साधारण गलती की है, तो आवेदन का एक हिस्सा दूसरे हिस्से के ग्लोबल्स को रोक सकता है।

FORTRAN को गोटो स्टेटमेंट / COBOL परिवर्तन स्टेटमेंट सौंपा गया है। स्व-संशोधित कोड। खतरे, चेतावनी, उड़ान स्पेगेटी राक्षस !!


फोरट्रान का कोई कथन नहीं था। FORTRAN को ASSIGN स्टेटमेंट दिया गया था, जिसमें निर्दिष्ट GOTO था। COBOL के पास ALTER स्टेटमेंट था, जो एक समान उद्देश्य परोसता था।
जॉन आर। स्ट्रोम

@ जॉन - धन्यवाद। मेरी स्मृति में परिवर्तन / परिवर्तन मंद है ... कम से कम इसलिए क्योंकि मुझे सिखाया गया था कि मैं उनका उपयोग कभी न करूं।
स्टीफन सी

1

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


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

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

@Orbling: क्या की तुलना में? मेरी राय में कार्यात्मक प्रोग्रामिंग भाषाओं में एक उच्च कोड का पुन: उपयोग होता है और मुझे लगता है कि कोड / डेटा एनकैप्सुलेशन के लिए हास्केल का मॉड्यूल सिस्टम काफी अच्छा है।
लेनीप्रोग्रामर्स 11

@ Lenny222 मानक अनिवार्य प्रोग्रामिंग की तुलना में। मैं भी कार्यात्मक दृष्टिकोण पसंद करता हूं, हास्केल मेरी पसंदीदा भाषा है।
12

@ जैसन बेकर: अच्छी तरह से निश्चित रूप से यह बहस का मुद्दा है, लेकिन इतना व्यापक होने के नाते वास्तव में यह इतना हानिकारक है! ओपी ने मेरी राय पूछी, और मैंने दी। सिर्फ इसलिए कि एक चट्टान की Lemmings कूद का एक गुच्छा व्यवहार नहीं करता है। इस मामले में यह गणितीय रूप से सिद्ध है कि ओओपी काम नहीं करता है, और सही प्रतिमान अच्छी तरह से स्वीकार किया जाता है: श्रेणी सिद्धांत सार का प्रतिनिधित्व करने का तरीका है (यह वास्तव में सार का सिद्धांत है)
येट्रिल

1

magic_quotes PHP में

अनुभवहीन डेवलपर्स या तो इस पर सक्षम होने पर भरोसा करते हैं और इस तरह सभी उपयोगकर्ता इनपुट को SQL क्वेरी में उपयोग के लिए बच जाते हैं या यह अक्षम होने पर भरोसा करते हैं और इस तरह हमेशा अपने इनपुट से बच जाते हैं।

यह मानते हुए कि यह सक्षम है और फिर एक सिस्टम पर कोड चला रहा है, जहां यह नहीं है कि यह चौड़े SQL इंजेक्शन छेद को खोलता है।

यह मानते हुए कि यह अक्षम है और यह नहीं है, इसके परिणामस्वरूप बैकस्लैश वास्तव में डीबी में जमा हो जाएगा, जिससे बदसूरत / गलत तार पैदा होंगे।

दोनों मामलों को संभालने का कोई बहुत सरल तरीका नहीं है - आपको यह जांचने की आवश्यकता है कि क्या यह सक्षम है get_magic_quotes_gpc()और फिर सरणियों stripslashes()में सभी मानों पर लागू होता है $_*- चूंकि array_mapपुनरावर्ती नहीं है इसलिए आपको इसके लिए एक कस्टम फ़ंक्शन की आवश्यकता है।


या आप बस पैरामीटर प्रश्नों का उपयोग कर सकते हैं।
पीटर बी

फिर भी आपको बैकस्लैश मिलेंगे यदि मैजिक कोट्स सक्षम हैं और आपको इसकी उम्मीद नहीं थी।
ThiefMaster

-3

भाषा की सुविधा जो प्रोग्रामर को असम्बद्ध या अर्थहीन टिप्पणी लिखने की अनुमति देती है।


1
और इसे कैसे ठीक करें?
मनिएरो

1
@bigown: टिप्पणी-या-मर सुविधा लागू करने से: डी।
तिया

3
इसे लिटरेट प्रोग्रामिंग कहा जाता है। en.wikipedia.org/wiki/Literate_programming
बैरी ब्राउन

2
यह एक विशेषता नहीं है, लेकिन यह उपयोगकर्ता के सामने के अंत में एक बहुत प्रसिद्ध बग है, ज्यादातर लोग इसे इसके लैटिन नाम से जानते हैं: होमो सेपेंसेंस।
जो डी

-3

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


3
पास्कल में प्रक्रियाएं (कोई वापसी मूल्य नहीं) और साथ ही फ़ंक्शन (वापसी मूल्य) थे।
जॉन ऑनस्टॉट 5

फ़ंक्शंस हमेशा कुछ करते हैं (आमतौर पर, प्लेसहोल्डर किसी को भी कार्य करते हैं?) , लेकिन अक्सर इसके बारे में किसी को बताने की आवश्यकता नहीं होती है।
1

-4

बुनियादी में POKE ...


7
POKE कमाल था।
Shog9

2
शुरुआती दिनों में पोक एकमात्र उचित तरीका था जिससे आप बुनियादी चीजों में कुछ चीजें हासिल कर सकते थे। एक सेब पर संगीत] [मन में आता है ...
बिल

2
यदि आप सही ढंग से याद करते हैं, तो आप कमोडोर 64 पर पीओके के बिना बहुत कुछ नहीं कर सकते।
17 मई को MetalMikester

1
PEEK, दोनों आवश्यक मत भूलना।
1

-5

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


2
यदि आपको कहीं किसी संग्रह में आसपास बैठे संदर्भ मिलते हैं, तो आपको अन्य समस्याएं हैं।
चिन्मय कांची

2
इसीलिए gc'ed भाषाओं में कमजोर संदर्भ हैं :)
चिन्मय कांची

4
जबकि जीसी निश्चित रूप से ताकत और कमजोरियां दोनों हैं, मुझे यह कहना होगा कि मेसन इस पर गलत की तुलना में बहुत अधिक सही है। वास्तव में, मैंने देखा है कि GC का उपयोग करने वाले लोग स्मृति प्रबंधन पर बहुत अधिक समय बिताते हैं क्योंकि उन्होंने इस तथ्य को योजना बनाने के बजाय चीजों को हैक करने की कोशिश की। जीसी आम तौर पर नियतात्मक विनाश को भी रोकता है, जो स्मृति के अलावा अन्य सभी संसाधनों के प्रबंधन के लिए अतिरिक्त काम करता है।
जेरी कॉफिन

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

2
@ बैरी: यह कार्यक्रम के भीतर नियतात्मक है। यदि मैं स्मृति के 5 केबी ब्लॉक के साथ किया जाता हूं, तो उसके बाद जल्द ही एक और 5 केबी के लिए पूछें, क्या होता है? एक कचरा एकत्र प्रणाली में, इसे नए 5 KB ब्लॉक के लिए अनुरोध करने की आवश्यकता है, भले ही अप्रयुक्त बैठे हुए एक पूरी तरह से अच्छा ब्लॉक है, जब तक कि जीसीम अंतरिम में नहीं चला है, जिस स्थिति में आप पुराने ब्लॉक को रीसायकल कर सकते हैं। मॉलॉक और फ्री के साथ, आप हमेशा पुराने ब्लॉक को रीसायकल कर पाएंगे। इसे कुछ सौ हजार से गुणा करें और यह एक वास्तविक मुद्दा बन जाता है।
मेसन व्हीलर

-5

C, और निश्चित रूप से C ++: सूचक अंकगणित। पूर्णांक को मेमोरी पतों में परिवर्तित करने के लिए लोगों को समस्या के लिए पूछ रहा है।

और शायद पूरी तरह से संकेत तक कच्चे पहुंच?

C ++ में आपके पास ऐसे संदर्भ होते हैं जो पॉइंटर्स को लगभग पूरी तरह से अनावश्यक बनाते हैं। शेष मामलों के लिए स्मार्ट पॉइंटर्स को अनिवार्य माना जाना चाहिए।

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

इसके अलावा null... लेकिन यह एक अलग कहानी है।


5
पॉइंटर्स, जबकि समय पर ठीक से उपयोग करना मुश्किल है, बड़ी संख्या में कुशल मेमोरी ऑपरेशन के लिए बहुत आवश्यक हैं।
बिल

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

4
यह उत्तर केवल तभी मान्य है जब आप पॉइंटर्स को छिपाने के लिए बनाए गए सॉफ़्टवेयर स्टैक पर काम कर रहे हों। में सभी अन्य मामलों में, यह जवाब गलत है।
पॉल नाथन

3
कुछ प्रोग्रामिंग भाषा के लिए पॉइंटर्स उपलब्ध होने की आवश्यकता होती है ताकि आप अन्य प्रोग्रामिंग भाषाओं के लिए सभी ऑपरेटिंग सिस्टम और वर्चुअल मशीन लिख सकें।

2
-1। एक कारण है कि आपको ptr अंकगणित की आवश्यकता है: एक बिंदु को Iterating इंडेक्सिंग से तेज है। for(int i=0;i<SIZE;++i) ++arr[i]से धीमी है for(int*i=arr;i<arr+SIZE;++i)*i++। सभी जावा साबित करने में कामयाब रहे कि आपको सूचक की आवश्यकता है, या क्या आपने कभी नहीं देखा है sun.misc.Unsafe? यदि आपको पॉइंटर्स की आवश्यकता नहीं है, तो कृपया जावा का उपयोग करके जेनेरिक स्वैप फ़ंक्शन लिखने का तरीका बताएं। (उदाहरण के लिए int a = 1, b = 2; swap (a, b); assert (a == 2 && b == 1);)। C / c ++ में सभी समस्याओं का उल्लेख नहीं है यदि आपके पास संदर्भ का उपयोग करने के लिए HAD है। आप एक अपारदर्शी संरचना w / o पॉइंटर्स पर वर्चुअल फ़ंक्शन कैसे कहेंगे?
KitsuneYMG
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.