क्या कंपाइलर और दुभाषियों में बग हो सकते हैं, और हम (उपयोगकर्ताओं के रूप में) उनसे निपटने के लिए क्या कर सकते हैं? [बन्द है]


28

यदि संकलक का काम अनिवार्य रूप से स्रोत कोड को मशीन स्तर कोड में अनुवाद कर रहा है, तो क्या संकलक में कोई गड़बड़ हो सकती है, अर्थात एक दोषपूर्ण "अनुवाद?"

वही दुभाषिया के लिए जाता है: क्या यह कभी-कभी आवश्यक सामग्री का उत्पादन करने में विफल हो सकता है?

मैंने संकलक / दुभाषियों में किसी भी कीड़े के बारे में नहीं सुना है, लेकिन क्या वे मौजूद हैं?


6
विकास में वे निश्चित रूप से किसी भी खुले स्रोत संकलक पर बगट्रैकर को देख सकते हैं
शाफ़्ट फ्रीक

7
मैंने संकलक / दुभाषियों में किसी भी कीड़े के बारे में नहीं सुना है, लेकिन क्या वे मौजूद हैं? मुझे gcc कंपाइलर में बग्स के लिए मेलिंग सूची मिली: gcc.gnu.org/ml/gcc-bugs
FrustratedWithFormsDesigner

47
यह वास्तव में अच्छा सवाल नहीं है, यह सिर्फ कुछ ऐसा है जो सामान्य ज्ञान है।

12
अब तक कोई भी टिप्पणी या उत्तर संकलक बग का सामना करने की संभावना को संबोधित नहीं करता है । पहले अपने कोड में त्रुटियों का पता लगाना सुनिश्चित करें।
डैन पिचेलमैन

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

जवाबों:


51

हाँ

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

सौभाग्य से इन भाषाओं में से अधिकांश (विशेषकर जो खुले स्रोत हैं) में एक सार्वजनिक बग ट्रैकिंग सिस्टम होगा जिसे आप रिपोर्ट सबमिट कर सकते हैं।

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


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

@ और यह ऐसा लग रहा है कि मध्यस्थों में से एक ने इसे कुछ के रूप में खारिज कर दिया जो एक टिप्पणी या अलग जवाब होना चाहिए।
KChaloux

सिर्फ "हाँ" नहीं, लेकिन "हाँ हाँ!" :-)
नरक

C दोनों परिपक्व और सक्रिय रूप से विकसित है। तो C ++ है। तो जावा है। आदि ..
djechlin

100

आम आदमी के शब्दों में:

सभी कार्यक्रमों में बग हो सकते हैं।

कंपाइलर प्रोग्राम हैं।

एर्गो, कंपाइलर्स में बग हो सकते हैं।


55
अधिक चिंताजनक: डिबगर प्रोग्राम हैं। इसलिए, डिबगर्स में बग होते हैं।
डैनियल ग्रैजर १२

19
@jozefg: तो आप कैसे डिबगर डिबग करते हैं? देखने वाले कौन देखते हैं?
FrustratedWithFormsDesigner

16
@FrustratedWithFormsDesigner चौकीदार पर नजर रखने वालों, डुह।
जिमी हॉफ

9
@JoelFan जब से मैंने लिखा है "हो सकता है", वह अपवाद कवर किया गया है। यदि आप कहते हैं कि "आपके पास" है तो आपको यह निर्दिष्ट करना होगा कि आप केवल गैर-तुच्छ कार्यक्रमों का उल्लेख कर रहे हैं। "हो सकता है" कहकर, आपके पास नहीं है।
ट्यूलेंस कोर्डोवा

8
"हैलो वर्ल्ड" प्रोग्राम में बग्स हो सकते हैं, अगर इसकी बग कंपाइलर के साथ अनुपालन हो।
wtsang02


8

4

बेशक, क्योंकि कंपाइलर सॉफ्टवेयर हैं।

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

शुक्र है (मेरे दृष्टिकोण से), यह मुद्दा डेल्फी में एक संकलक मुद्दा बन गया। अंत में कोशिश में ब्लॉक, एक फ़ंक्शन का वापसी मान नष्ट हो गया था, और कॉलर को बिल्कुल यादृच्छिक परिणाम मिला। यह बोरलैंड द्वारा प्रलेखित, और स्वीकार किया गया था।

.NET अच्छी तरह से सैकड़ों विभिन्न मेमोरी लीक्स के लिए जाना जाता था, खासकर इसके शुरुआती कार्यान्वयन में।

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


"औपचारिक रूप से सत्यापित" सॉफ्टवेयर है। यह गणितीय रूप से काम करने के लिए सिद्ध है। कभी-कभी औपचारिक रूप से सत्यापित कोड में भी बग होते हैं। IIRC जावा के त्वरित कार्यान्वयन को औपचारिक रूप से सत्यापित किया गया था, लेकिन यह ओवरफ्लो के लिए जिम्मेदार नहीं था।
डेविड प्लम्पटन

1
सॉफ्टवेयर क्या था? C'mon :)
रॉकलान

2

न केवल कीड़े, बल्कि जानबूझकर मैलवेयर भी।

ब्रायन कार्निघन द्वारा मूल यूनिक्स सी कंपाइलर पर लागू "लॉगिन" ट्रोजन इनमें से सबसे प्रसिद्ध है; लेख http://cm.bell-labs.com/who/ken/trust.html पर इसकी कुछ पृष्ठभूमि है।


1
क्या यह स्पष्ट है कि वास्तव में लागू किया गया था?
कीथ थॉम्पसन

यह काफी दिलचस्प विषय है, लेकिन इस प्रश्न से संबंधित नहीं है।

@ डेल्नायन मैं असहमत; सवाल के दिल में लगता है "मैं अपने संकलक पर कितना भरोसा कर सकता हूं?"
एंडी

1

हां, जैसे किसी भी सॉफ्टवेयर कंपाइलर्स में बग होते हैं, उदाहरण के लिए gcc बग सूची यहां है


0

हाँ।

इसके अलावा, केवल संकलक के साथ ही नहीं, बल्कि दुभाषियों / डिबगर्स और किसी भी 3 पार्टी सॉफ्टवेयर टूल के साथ भी।

हम वर्तमान में कुछ तृतीय पक्ष सॉफ़्टवेयर का उपयोग कर रहे हैं, और कुछ समस्याएँ हैं। बग को खोजने और रिपोर्ट करने के लिए कभी-कभी वे हमें धन्यवाद देते हैं। :)

उनमें से कुछ में कुछ मेमोरी लीक भी हैं, जो दुर्घटना की ओर ले जाती हैं। यहां महत्वपूर्ण प्रश्न यह हो सकता है कि कैसे निर्धारित किया जाए कि क्या 3rd पार्टी टूल, या कंपाइलर में आपके एप्लिकेशन के सही तरीके से काम करने के लिए बग हैं?


आपका महत्वपूर्ण प्रश्न फिर से
हल्टिंग

0

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

संकलक के विभिन्न चरण हैं जिनके माध्यम से आपके स्रोत भाषा कोड को लाइन द्वारा स्कैन किया जाता है। एक प्रतीक तालिका है जो सभी कीवर्ड्स का ट्रैक रखती है जिन्हें स्रोत भाषा कोड में स्कैन किया जाता है।

चरण 1: लेक्सिकल एनालाइजर - स्रोत कार्यक्रम में सभी चरित्र को पढ़ता है और टोकन (इंट, चार, फ्लोट, इफ-अन्यथा, के लिए, जबकि आदि) के तार्किक पृथक्करण का निर्माण करता है।

चरण 2: सिंटेक्स एनालाइज़र - टोकन की धारा की संरचना का विश्लेषण। अभिव्यक्तियों के पदानुक्रमित पार्सिंग जिसमें उपसर्ग / उपसर्ग आदि शामिल हैं (a = b + c * d)

चरण 3: सिमेंटिक एनालाइज़र - टोकन की जाँच (वास्तविक, फ्लोट आदि के लिए पूर्णांक) और कई चीजें जैसे ऑपरेटर प्रिसेंस आदि।

चरण 4: मध्यवर्ती कोड जेनरेटर - a = b + c * de (temp1 = c * d, temp2 = temp1 + b, temp3 = temp2-e)

चरण 5: कोड ऑप्टिमाइज़ेशन - विभिन्न विश्लेषण (नियंत्रण प्रवाह, डेटा प्रवाह, परिवर्तन)
जो कि लाल होते हैं: अतिरेक कोड, निरंतर प्रसार, आंशिक मृत कोड, सामान्य उप-कोड, लूप अपरिवर्तनीय कोड

चरण 6: कोड जनरेशन - रजिस्टर में मान डालने वाले लक्ष्य कोड (ज्यादातर असेंबली लैंग्वेज) की पीढ़ी

ये सभी चरण कुछ भी नहीं है, लेकिन अच्छी तरह से लिखे गए कार्यक्रम हैं और इसमें एन खामियां हो सकती हैं।


-1

बेशक, कंपाइलर सिर्फ प्रोग्राम हैं और उनके लेखक भी बेवकूफ हैं :)। यहां तक ​​कि भाषा विनिर्देश में एक बग हो सकता है। उदाहरण: c # + foreach + लैम्ब्डा

या पाइथन में, दुभाषिया में बग: बुरे एस्ट्रो दुभाषिया को संकलित करना

ठीक है, यदि आप संकलक / इंटरपीटर में कीड़े को देखना चाहते हैं -> php को देखें। पूर्णांक अतिप्रवाह के साथ एक प्रसिद्ध बग है। पहले फिक्स से शुरुआत हुई if (size > INT_MAX) return NULL;कहानी का निरंतरता


संकलक लेखक बेवकूफ नहीं होते हैं। चूंकि कंपाइलर काफी जटिल होते हैं इसलिए क्षेत्र में प्रवेश करने की बाधा भी काफी अधिक होती है। इसलिए हम उन लोगों से अपेक्षा कर सकते हैं जो उन्हें लिखते हैं कि वे गलतियाँ न करें जैसा कि औसत लोग करते हैं।
jszpilewski

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

@ और, जैसा कि मुझे पता है, किसी को भी नहीं पता है कि यह निर्णय किन समस्याओं का कारण बनेगा। बग क्यों नहीं?
विक्टर लोवा

@jszpilewski क्या आपको उस पाठ के बाद एक मुस्कान दिखाई देती है?
विक्टर लोवा

1
मेरा सुझाव है कि आप ओपी को फिर से पढ़ें, क्योंकि उनका सवाल इस बारे में नहीं है कि क्या विनिर्देशों में बग हो सकते हैं, इसके बारे में कि क्या कंपिल में बग हो सकते हैं। चूंकि सी # संकलक विनिर्देश से मेल खाता था, इसलिए संकलक में बग नहीं था। मेरा सुझाव है कि आप अपना विकिपीडिया उद्धरण "एक सॉफ्टवेयर बग एक कंप्यूटर प्रोग्राम में एक त्रुटि, दोष, विफलता, या गलती है" पढ़े
एंडी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.