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