जवाबों:
संकलित समय और चलाने के समय के बीच का अंतर इस बात का उदाहरण है कि नुकीले सिर वाले सिद्धांतकार चरण भेद को क्या कहते हैं । यह सीखने के लिए सबसे कठिन अवधारणाओं में से एक है, खासकर प्रोग्रामिंग भाषाओं में बिना पृष्ठभूमि वाले लोगों के लिए। इस समस्या से निपटने के लिए, मुझे यह पूछना उपयोगी लगता है
क्या गलत हो सकता है रन-टाइम त्रुटियां :
इसके अलावा ऐसी त्रुटियां भी हो सकती हैं, जिनका पता प्रोग्राम द्वारा ही लगाया जाता है:
मैं इसे त्रुटियों के संदर्भ में सोचता हूं, और जब वे पकड़े जा सकते हैं।
संकलन समय:
string my_value = Console.ReadLine();
int i = my_value;
एक स्ट्रिंग मान को इंट के प्रकार का एक चर नहीं सौंपा जा सकता है, इसलिए संकलक को संकलन समय पर निश्चित रूप से पता है कि इस कोड में समस्या है
रन समय:
string my_value = Console.ReadLine();
int i = int.Parse(my_value);
यहाँ परिणाम इस बात पर निर्भर करता है कि ReadLine () द्वारा किस स्ट्रिंग को लौटाया गया था। कुछ मूल्यों को एक इंट में पार्स किया जा सकता है, अन्य नहीं। यह केवल रन टाइम पर निर्धारित किया जा सकता है
.app
एक्सटेंशन में संकलित किया गया है ? या यह उपयोगकर्ता द्वारा ऐप शुरू करने पर हर बार लॉन्च होने पर होता है ?
संकलन समय: वह समय अवधि जिसमें आप, डेवलपर, आपके कोड का संकलन कर रहे हैं।
रन-समय: वह समय अवधि जो उपयोगकर्ता आपके सॉफ़्टवेयर के टुकड़े को चला रहा है।
क्या आपको किसी भी स्पष्ट परिभाषा की आवश्यकता है?
int x = 3/0
लेकिन आप इस चर के साथ कुछ भी नहीं करते हैं। हम इसे या कुछ भी नहीं छापते हैं। क्या इसे अभी भी एक रनटाइम त्रुटि माना जाएगा?
( संपादित करें : निम्नलिखित C # और समान, दृढ़ता से टाइप की गई प्रोग्रामिंग भाषाओं पर लागू होता है। मुझे यकीन नहीं है कि यह आपकी मदद करता है)।
उदाहरण के लिए, आप प्रोग्राम चलाने से पहले कंपाइलर ( कंपाइल समय पर ) द्वारा निम्न त्रुटि का पता लगाएंगे और परिणाम संकलन होगा:
int i = "string"; --> error at compile-time
दूसरी ओर, कंपाइलर द्वारा निम्न जैसी त्रुटि का पता नहीं लगाया जा सकता है। आपको रन-टाइम (जब प्रोग्राम चलाया जाता है) में एक त्रुटि / अपवाद प्राप्त होगा ।
Hashtable ht = new Hashtable();
ht.Add("key", "string");
// the compiler does not know what is stored in the hashtable
// under the key "key"
int i = (int)ht["key"]; // --> exception at run-time
स्रोत कोड का सामान में होने वाले-पर-अनुवाद- [स्क्रीन | डिस्क | नेटवर्क] में हो सकता है (लगभग) दो तरीके; उन्हें संकलन और व्याख्या करना।
एक में संकलित कार्यक्रम (उदाहरण ग और fortran हैं):
पहले चरण में होने वाली चीजों को "संकलन समय" पर होने के लिए कहा जाता है, दूसरे चरण में होने वाली चीजों को "रन टाइम" पर होने के लिए कहा जाता है।
एक व्याख्या किए गए कार्यक्रम में (उदाहरण के लिए माइक्रो सॉफ्ट बेसिक (डॉस पर) और अजगर (मुझे लगता है)):
इस मामले में संकलन समय और रन समय के बीच का अंतर कम करने के लिए कठिन है, और प्रोग्रामर या उपयोगकर्ता के लिए बहुत कम प्रासंगिक है।
जावा एक प्रकार का हाइब्रिड है, जहां कोड को बाइटकोड के लिए संकलित किया जाता है, जो तब एक आभासी मशीन पर चलता है जो आमतौर पर बाईटकोड के लिए एक दुभाषिया होता है।
एक मध्यवर्ती मामला भी है जिसमें प्रोग्राम को बायटेकोड पर संकलित किया जाता है और तुरंत चलाया जाता है (जैसा कि awk या perl में)।
मूल रूप से यदि आपका कंपाइलर आपके मतलब का काम कर सकता है या "संकलित समय में" इसका क्या मूल्य है, तो यह इसे रनटाइम कोड में हार्डकोड कर सकता है। जाहिर है अगर आपके रनटाइम कोड को हर बार एक गणना करनी है तो यह धीमी गति से चलेगा, इसलिए यदि आप संकलन समय पर कुछ निर्धारित कर सकते हैं तो यह बहुत बेहतर है।
उदाहरण के लिए।
लगातार तह:
अगर मैं लिखूं:
int i = 2;
i += MY_CONSTANT;
संकलक इस संचय को संकलन समय पर कर सकता है क्योंकि यह जानता है कि 2 क्या है, और MY_CONSTANT क्या है। जैसे कि यह हर एक निष्पादन को एक गणना करने से बचाता है।
संकलित समय में काम आने वाली चीजें (लगभग) कोई लागत नहीं है जब परिणामी कार्यक्रम चलाया जाता है, लेकिन जब आप कार्यक्रम बनाते हैं तो बड़ी लागत लगा सकते हैं।
कमोबेश ठीक इसके विपरीत। कम लागत जब आप बनाते हैं, तो अधिक लागत जब कार्यक्रम चलाया जाता है।
दुसरी तरफ से; यदि संकलन समय पर कुछ किया जाता है, तो यह केवल आपके मशीन पर चलता है और यदि कुछ रन-टाइम है, तो यह आपके उपयोगकर्ता मशीन पर चलता है।
एक उदाहरण जहां यह महत्वपूर्ण है, एक प्रकार की इकाई होगी। एक संकलित समय संस्करण (जैसे Boost.Units या मेरा संस्करण D में ) मूल फ्लोटिंग पॉइंट कोड के साथ समस्या को हल करने के दौरान तेजी से समाप्त हो रहा है, जबकि एक रन-टाइम संस्करण इकाइयों के बारे में जानकारी के लिए पैक करने के लिए समाप्त होता है, जो एक मूल्य हैं में और हर ऑपरेशन के साथ उन में जाँच प्रदर्शन करते हैं। दूसरी ओर, संकलित समय संस्करणों की आवश्यकता है कि मूल्यों की इकाइयों को संकलन समय पर जाना जाता है और वे उस मामले से नहीं निपट सकते जहां वे रन-टाइम इनपुट से आते हैं।
प्रश्न के पिछले समान उत्तर से निम्नलिखित रन-टाइम त्रुटि और संकलक त्रुटि के बीच अंतर क्या है?
संकलन / संकलन समय / Syntax / शब्दार्थ त्रुटियाँ: संकलन या संकलन समय त्रुटियाँ टाइपिंग गलती के कारण हुई हैं, अगर हम किसी प्रोग्रामिंग भाषा के उचित वाक्यविन्यास और शब्दार्थ का पालन नहीं करते हैं, तो संकलन समय त्रुटियों को संकलक द्वारा फेंक दिया जाता है। जब तक आप सभी वाक्यविन्यास त्रुटियों को दूर नहीं करते हैं या जब तक आप संकलन समय त्रुटियों को मिटा नहीं देते हैं, तब तक वे आपके कार्यक्रम को एक पंक्ति पर अमल नहीं करने देंगे।
उदाहरण: सी में एक अर्धविराम गुम या के int
रूप में गलत Int
।
रनटाइम त्रुटियां: रनटाइम त्रुटियां वे त्रुटियां हैं जो प्रोग्राम के चालू होने पर उत्पन्न होती हैं। इस प्रकार की त्रुटियां आपके प्रोग्राम को अप्रत्याशित रूप से व्यवहार करने का कारण बनेंगी या आपके प्रोग्राम को मार भी सकती हैं। उन्हें अक्सर अपवाद के रूप में जाना जाता है।
उदाहरण: मान लीजिए कि आप एक ऐसी फाइल पढ़ रहे हैं, जिसका कोई अस्तित्व नहीं है, जिसके परिणामस्वरूप रनटाइम त्रुटि होगी।
सभी प्रोग्रामिंग त्रुटियों के बारे में यहां पढ़ें
अन्य उत्तरों के लिए एक ऐड-ऑन के रूप में, यहां बताया गया है कि मैं इसे आम आदमी को कैसे समझाऊंगा:
आपका स्रोत कोड किसी जहाज के ब्लूप्रिंट की तरह है। यह परिभाषित करता है कि जहाज को कैसे बनाया जाना चाहिए।
यदि आप अपने ब्लूप्रिंट को शिपयार्ड को सौंप देते हैं, और उन्हें जहाज बनाते समय एक खराबी का पता चलता है, तो वे निर्माण रोक देंगे और तुरंत आपको इसकी सूचना देंगे, इससे पहले कि जहाज ने कभी ड्राईडॉक या छुआ हुआ पानी छोड़ा हो। यह एक संकलन-समय की त्रुटि है। जहाज कभी भी वास्तव में तैरता या अपने इंजनों का उपयोग नहीं कर रहा था। त्रुटि पाई गई क्योंकि इसने जहाज को बनने से भी रोक दिया था।
जब आपका कोड संकलित होता है, तो यह जहाज के पूरा होने जैसा है। निर्मित और जाने के लिए तैयार। जब आप अपने कोड को निष्पादित करते हैं, तो यह जहाज को यात्रा पर लॉन्च करने जैसा होता है। यात्री सवार हैं, इंजन चल रहे हैं और पतवार पानी पर है, इसलिए यह रनटाइम है। यदि आपके जहाज में एक घातक दोष है जो इसे अपने पहले दौरे पर डुबो देता है (या अतिरिक्त सिरदर्द के बाद शायद कुछ यात्रा हो सकती है) तो इसे रनटाइम त्रुटि का सामना करना पड़ा।
उदाहरण के लिए: एक जोरदार टाइप की गई भाषा में, एक प्रकार को संकलन के समय या रनटाइम पर जांचा जा सकता है। संकलन समय पर इसका मतलब है, कि कंपाइलर शिकायत करता है यदि प्रकार संगत नहीं हैं। रनटाइम का मतलब है, कि आप अपने प्रोग्राम को सिर्फ ठीक से संकलित कर सकते हैं, लेकिन रनटाइम के दौरान, यह एक अपवाद फेंकता है।
संकलित समय: डेवलपर .java प्रारूप में प्रोग्राम लिखता है और Bytecode में परिवर्तित होता है जो एक क्लास फ़ाइल है, इस संकलन के दौरान कोई भी त्रुटि होती है जिसे संकलित समय त्रुटि के रूप में परिभाषित किया जा सकता है।
रन समय: उत्पन्न .class फ़ाइल को इसकी अतिरिक्त कार्यक्षमता के लिए एप्लिकेशन द्वारा उपयोग किया जाता है और तर्क गलत हो जाता है और एक त्रुटि होती है जो एक रन टाइम त्रुटि है
संकलन के विषय पर 'इंट्रोडक्शन टू जेएवीए प्रोग्रामिंग' के लेखक डैनियल लियांग का एक उद्धरण है:
"उच्च-स्तरीय भाषा में लिखे गए प्रोग्राम को सोर्स प्रोग्राम या सोर्स कोड कहा जाता है। क्योंकि कंप्यूटर किसी सोर्स प्रोग्राम को निष्पादित नहीं कर सकता है, इसलिए सोर्स प्रोग्राम को निष्पादन के लिए मशीन कोड में अनुवादित किया जाना चाहिए । अनुवाद को किसी अन्य प्रोग्रामिंग टूल का उपयोग करके किया जा सकता है। एक दुभाषिया या एक संकलक । " (डैनियल लिआंग, " जेएवीए प्रोग्रामिंग का परिचय" , पी 8)।
...वह जारी है...
"एक कंपाइलर पूरे स्रोत कोड को मशीन-कोड फ़ाइल में अनुवाद करता है , और मशीन-कोड फ़ाइल को तब निष्पादित किया जाता है"
जब हम उच्च-स्तरीय / मानव-पठनीय कोड में पंच करते हैं, तो यह सबसे पहले बेकार है! यह आपके छोटे से सीपीयू में 'इलेक्ट्रॉनिक घटनाओं' के अनुक्रम में अनुवादित होना चाहिए! इस ओर पहला कदम संकलन है।
सीधे शब्दों में कहें: एक कंपाइल-टाइम त्रुटि इस चरण के दौरान होती है, जबकि एक रन-टाइम त्रुटि बाद में होती है।
याद रखें: सिर्फ इसलिए कि किसी प्रोग्राम को बिना त्रुटि के संकलित किया जाता है, इसका मतलब यह नहीं है कि वह बिना त्रुटि के चलेगा।
एक रन-टाइम त्रुटि एक प्रोग्राम जीवन-चक्र के तैयार, चलने या प्रतीक्षा भाग में घटित होगी, जबकि एक संकलन-समय त्रुटि जीवन चक्र के 'नए' चरण से पहले होगी।
एक संकलन-समय त्रुटि का उदाहरण:
एक सिंटैक्स त्रुटि - यदि आपके कोड मशीन स्तर के निर्देशों में संकलित किए जाते हैं तो वे कैसे अस्पष्ट हो सकते हैं ?? आपके कोड को भाषा के वाक्यात्मक नियमों के लिए 100% अनुरूप होना चाहिए अन्यथा इसे कार्यशील मशीन कोड में संकलित नहीं किया जा सकता है ।
रन-टाइम त्रुटि का उदाहरण:
स्मृति से बाहर चल रहा है - उदाहरण के लिए एक पुनरावर्ती कार्य के लिए एक कॉल एक विशेष डिग्री के एक चर दिए गए स्टैक ओवरफ्लो का कारण हो सकता है! यह संकलक द्वारा कैसे अनुमानित किया जा सकता है !? यह नहीं कर सकते।
और वह संकलन-समय त्रुटि और रन-टाइम त्रुटि के बीच अंतर है
संकलन समय:
संकलित समय में काम आने वाली चीजें (लगभग) कोई लागत नहीं है जब परिणामी कार्यक्रम चलाया जाता है, लेकिन जब आप कार्यक्रम बनाते हैं तो बड़ी लागत लगा सकते हैं। रन-टाइम:
कमोबेश ठीक इसके विपरीत। कम लागत जब आप बनाते हैं, तो अधिक लागत जब कार्यक्रम चलाया जाता है।
दुसरी तरफ से; यदि संकलन समय पर कुछ किया जाता है, तो यह केवल आपके मशीन पर चलता है और यदि कुछ रन-टाइम है, तो यह आपके उपयोगकर्ता मशीन पर चलता है।
संकलन समय: स्रोत कोड को मशीन कोड में बदलने के लिए समय लिया जाता है ताकि यह एक निष्पादन योग्य बन जाए जिसे संकलन समय कहा जाता है।
रन टाइम: जब कोई एप्लिकेशन रन कर रहा होता है, तो उसे रन टाइम कहा जाता है।
संकलन समय त्रुटियाँ उन वाक्यविन्यास त्रुटियों, फ़ाइल संदर्भ त्रुटियों को याद कर रही हैं। स्रोत कोड को निष्पादन योग्य प्रोग्राम में संकलित करने के दौरान और प्रोग्राम के चलने के दौरान रनटाइम त्रुटियाँ होती हैं। उदाहरण प्रोग्राम क्रैश, अप्रत्याशित प्रोग्राम व्यवहार या सुविधाएँ काम नहीं करती हैं।
कल्पना कीजिए कि आप एक बॉस हैं और आपके पास एक सहायक और नौकरानी है, और आप उन्हें करने के लिए कार्यों की एक सूची देते हैं, सहायक (संकलन समय) इस सूची को पकड़ लेंगे और यह देखने के लिए एक चेकअप करेंगे कि क्या कार्य समझ में आ रहे हैं और आप किसी भी अजीब भाषा या वाक्य रचना में नहीं लिखा था, इसलिए वह समझता है कि आप किसी को नौकरी के लिए नियुक्त करना चाहते हैं, इसलिए वह उसे आपके लिए असाइन करता है और वह समझता है कि आप कुछ कॉफी चाहते हैं, इसलिए उसकी भूमिका खत्म हो गई है और नौकरानी (रन समय) उन कार्यों को चलाने के लिए शुरू होता है इसलिए वह आपको कुछ कॉफी बनाने के लिए जाता है, लेकिन अचानक उसे बनाने के लिए कोई कॉफी नहीं मिलती है इसलिए वह इसे बनाना बंद कर देती है या वह अलग तरह से काम करती है और आपको कुछ चाय बनाती है (जब प्रोग्राम अलग ढंग से काम करता है क्योंकि उसे एक त्रुटि मिली है )।
यहाँ प्रश्न के उत्तर के लिए एक विस्तार है "रन-टाइम और संकलन-समय के बीच अंतर?" - रन-टाइम और कम्पाइल-टाइम से जुड़े ओवरहेड्स में अंतर ?
उत्पाद का रन-टाइम प्रदर्शन तेजी से परिणाम प्रदान करके इसकी गुणवत्ता में योगदान देता है। उत्पाद का संकलन-समय प्रदर्शन संपादन-संकलन-डिबग चक्र को छोटा करके इसकी समयबद्धता में योगदान देता है। हालांकि, समय-समय पर गुणवत्ता प्राप्त करने के लिए रन-टाइम प्रदर्शन और संकलन-समय प्रदर्शन दोनों ही द्वितीयक कारक हैं। इसलिए, किसी को रन-टाइम और संकलन-समय के प्रदर्शन में सुधार पर विचार करना चाहिए, जब समग्र उत्पाद की गुणवत्ता और समयबद्धता में सुधार के द्वारा उचित हो।
यहाँ पढ़ने के लिए एक महान स्रोत :
मैंने हमेशा इसे ओवरहेड प्रसंस्करण के कार्यक्रम के सापेक्ष सोचा है और यह पहले से बताए अनुसार पूर्वधारणा को कैसे प्रभावित करता है। एक सरल उदाहरण होगा, या तो कोड में मेरी वस्तु के लिए आवश्यक पूर्ण मेमोरी को परिभाषित करना या नहीं।
एक परिभाषित बूलियन एक्स मेमोरी लेता है यह फिर संकलित कार्यक्रम में है और इसे बदला नहीं जा सकता है। जब प्रोग्राम चलता है तो यह पता चलता है कि एक्स के लिए कितनी मेमोरी आवंटित की जानी है।
दूसरी ओर अगर मैं सिर्फ एक सामान्य वस्तु प्रकार (यानी एक अपरिभाषित स्थान धारक या शायद कुछ विशालकाय ब्लॉब के लिए एक संकेतक) को परिभाषित करता हूं, तो मेरी स्मृति के लिए आवश्यक वास्तविक मेमोरी तब तक ज्ञात नहीं होती है जब तक कि कार्यक्रम नहीं चलता है और मैं इसे कुछ असाइन करता हूं , इस प्रकार इसके बाद मूल्यांकन किया जाना चाहिए और स्मृति आवंटन, आदि को फिर रन टाइम (अधिक रन टाइम ओवरहेड) पर गतिशील रूप से नियंत्रित किया जाएगा।
यह गतिशील रूप से कैसे संभाला जाता है, फिर भाषा, संकलक, OS, आपका कोड आदि पर निर्भर करेगा।
उस नोट पर हालांकि यह वास्तव में उस संदर्भ पर निर्भर करता है जिसमें आप रन टाइम बनाम संकलन समय का उपयोग कर रहे हैं।
हम इन्हें अलग-अलग दो व्यापक समूहों स्थैतिक बंधन और गतिशील बंधन के तहत वर्गीकृत कर सकते हैं। यह उस समय पर आधारित होता है जब बाध्यकारी को संबंधित मानों के साथ किया जाता है। यदि संदर्भों को संकलित समय पर हल किया जाता है, तो यह स्थैतिक बाध्यकारी है और यदि संदर्भ रनटाइम पर हल किया जाता है तो यह गतिशील बंधन है। स्टैटिक बाइंडिंग और डायनेमिक बाइंडिंग को शुरुआती बाइंडिंग और लेट बाइंडिंग भी कहा जाता है। कभी-कभी उन्हें स्थैतिक बहुरूपता और गतिशील बहुरूपता भी कहा जाता है।
जोसेफ कुलंदई।
रन-टाइम और कम्पाइल टाइम के बीच मुख्य अंतर है:
int a = 1
int b = a/0;
यहाँ पहली पंक्ति में अंत में अर्ध-बृहदान्त्र नहीं होता है --- ऑपरेशन बी निष्पादित करते समय कार्यक्रम को निष्पादित करने के बाद समय त्रुटि का संकलन करें, परिणाम अनंत है ---> रन-टाइम त्रुटि।
यहाँ एक बहुत ही सरल जवाब है:
रनटाइम और संकलन समय प्रोग्रामिंग शब्द हैं जो सॉफ़्टवेयर प्रोग्राम डेवलपमेंट के विभिन्न चरणों को संदर्भित करते हैं। प्रोग्राम बनाने के लिए, एक डेवलपर पहले सोर्स कोड लिखता है, जो यह परिभाषित करता है कि प्रोग्राम कैसे कार्य करेगा। छोटे कार्यक्रमों में केवल स्रोत कोड की कुछ सौ लाइनें शामिल हो सकती हैं, जबकि बड़े कार्यक्रमों में स्रोत कोड की सैकड़ों हजारों लाइनें शामिल हो सकती हैं। स्रोत कोड बनने और निष्पादन योग्य कार्यक्रम के लिए मशीन कोड में संकलित किया जाना चाहिए। इस संकलन प्रक्रिया को संकलन समय के रूप में संदर्भित किया जाता है। (अनुवादक के रूप में संकलक के बारे में सोचें)
एक संकलित कार्यक्रम को एक उपयोगकर्ता द्वारा खोला और चलाया जा सकता है। जब कोई एप्लिकेशन चल रहा होता है, तो उसे रनटाइम कहा जाता है।
"रनटाइम" और "संकलन समय" शब्द अक्सर प्रोग्रामर द्वारा विभिन्न प्रकार की त्रुटियों का उल्लेख करने के लिए उपयोग किया जाता है। एक संकलन समय त्रुटि एक सिंटैक्स त्रुटि या अनुपलब्ध फ़ाइल संदर्भ जैसी समस्या है जो प्रोग्राम को सफलतापूर्वक संकलन करने से रोकती है। संकलक संकलन समय त्रुटियों का उत्पादन करता है और आमतौर पर इंगित करता है कि स्रोत कोड की कौन सी रेखा समस्या पैदा कर रही है।
यदि किसी प्रोग्राम के सोर्स कोड को पहले से ही एक निष्पादन योग्य प्रोग्राम में संकलित किया गया है, तो यह अभी भी बग हो सकता है जो प्रोग्राम चल रहा है। उदाहरणों में ऐसी विशेषताएं शामिल हैं जो काम नहीं करती हैं, अप्रत्याशित कार्यक्रम व्यवहार या प्रोग्राम क्रैश। इस प्रकार की समस्याओं को रनटाइम त्रुटि कहा जाता है क्योंकि वे रनटाइम पर होती हैं।
IMHO आपको रनटाइम बनाम कंपाइल समय के बीच अंतर के बारे में विचार करने के लिए कई लिंक, संसाधन पढ़ने की आवश्यकता है क्योंकि यह एक बहुत ही जटिल विषय है। मेरी कुछ तस्वीरें / लिंक नीचे दी गई हैं जिनकी मैं सिफारिश कर रहा हूं।
इसके अलावा जो इसके ऊपर कहा गया है, मैं उसे जोड़ना चाहता हूं कि कभी-कभी 1000 शब्दों का चित्र होता है:
CLR_diag संकलन समय और फिर रनटाइम 2
from Wiki
https://en.wikipedia.org/wiki/Run_time https://en.wikipedia.org/wiki/Run_time_(program_lifecycle_phase)
रन टाइम, रन-टाइम या रनटाइम निम्न को संदर्भित कर सकता है:
कम्प्यूटिंग
भागो समय (कार्यक्रम जीवन चक्र चरण) , वह अवधि जिसके दौरान कंप्यूटर प्रोग्राम निष्पादित हो रहा है
रनटाइम लाइब्रेरी , एक प्रोग्राम लाइब्रेरी जिसे प्रोग्रामिंग भाषा में निर्मित कार्यों को लागू करने के लिए डिज़ाइन किया गया है
कंप्यूटर सिस्टम के निष्पादन का समर्थन करने के लिए डिज़ाइन किया गया रनटाइम सिस्टम , सॉफ्टवेयर
सॉफ़्टवेयर निष्पादन, रन टाइम चरण के दौरान एक-एक करके निर्देशों को निष्पादित करने की प्रक्रिया
संकलक की सूची https://en.wikipedia.org/wiki/List_of_compilers
;
3.2 इस 3 चीजों के बीच अंतर: संकलन बनाम बिल्ड रनटाइम
https://www.quora.com/What-is-the-difference-between-build-run-and-compile फर्नांडो पोडान, एक डेवलपर जो भाषा के डिज़ाइन के लिए थोड़ा उत्सुक है, जिसका उत्तर 23 फरवरी को दिया गया था कि मैं रिश्ते में पीछे जा रहा हूं अन्य उत्तरों के लिए:
रनिंग कुछ द्विआधारी निष्पादन योग्य (या एक स्क्रिप्ट, व्याख्या की गई भाषाओं के लिए) हो रही है, अच्छी तरह से ... कंप्यूटर पर एक नई प्रक्रिया के रूप में निष्पादित; संकलन कुछ उच्च स्तरीय भाषा (मशीन कोड की तुलना में उच्चतर) में लिखे गए प्रोग्राम को पार्स करने की प्रक्रिया है, यह सिंटैक्स, शब्दार्थ, पुस्तकालयों को जोड़ना, शायद कुछ अनुकूलन कर रहा है, तो आउटपुट के रूप में एक द्विआधारी निष्पादन योग्य कार्यक्रम बना रहा है। यह निष्पादन योग्य मशीन कोड या किसी प्रकार के बाइट कोड के रूप में हो सकता है - अर्थात, किसी प्रकार की वर्चुअल मशीन को लक्षित करने वाले निर्देश; निर्माण में आमतौर पर जाँच करना और निर्भरता प्रदान करना, कोड का निरीक्षण करना, कोड को बाइनरी में संकलित करना, स्वचालित परीक्षण चलाना और परिणामस्वरूप बाइनरी [ies] और अन्य परिसंपत्तियों (छवियों, कॉन्फ़िगरेशन फ़ाइलों, पुस्तकालयों, आदि) को तैनाती योग्य फ़ाइल के कुछ विशिष्ट प्रारूप में शामिल करना शामिल है। ध्यान दें कि अधिकांश प्रक्रियाएं वैकल्पिक हैं और कुछ उस लक्षित प्लेटफॉर्म पर निर्भर करती हैं जिस पर आप निर्माण कर रहे हैं। एक उदाहरण के रूप में, टॉमकैट के लिए जावा एप्लिकेशन की पैकेजिंग एक .war फ़ाइल का उत्पादन करेगी। C32 कोड से एक Win32 निष्पादन योग्य बिल्डिंग का निर्माण केवल .exe प्रोग्राम कर सकता है, या इसे .msi इंस्टॉलर के अंदर पैकेज भी कर सकता है।
इस उदाहरण में देखें:
public class Test {
public static void main(String[] args) {
int[] x=new int[-5];//compile time no error
System.out.println(x.length);
}}
उपरोक्त कोड सफलतापूर्वक संकलित किया गया है, कोई सिंटैक्स त्रुटि नहीं है, यह पूरी तरह से वैध है। लेकिन रन के समय, यह त्रुटि के बाद फेंकता है।
Exception in thread "main" java.lang.NegativeArraySizeException
at Test.main(Test.java:5)
जैसे कि संकलन के समय में कुछ मामलों की जाँच की गई है, उस समय के बाद कुछ मामलों की जाँच की गई है, जब एक बार प्रोग्राम आपको एक आउटपुट प्राप्त कर लेगा। अन्यथा, आपको संकलन समय मिलेगा या समय त्रुटि चलेगी।
सार्वजनिक वर्ग RuntimeVsCompileTime {
public static void main(String[] args) {
//test(new D()); COMPILETIME ERROR
/**
* Compiler knows that B is not an instance of A
*/
test(new B());
}
/**
* compiler has no hint whether the actual type is A, B or C
* C c = (C)a; will be checked during runtime
* @param a
*/
public static void test(A a) {
C c = (C)a;//RUNTIME ERROR
}
}
class A{
}
class B extends A{
}
class C extends A{
}
class D{
}
यह एसओ के लिए एक अच्छा सवाल नहीं है (यह एक विशिष्ट प्रोग्रामिंग सवाल नहीं है), लेकिन यह सामान्य रूप से एक बुरा सवाल नहीं है।
अगर आपको लगता है कि यह तुच्छ है: संकलन-समय बनाम रीड-टाइम के बारे में क्या है, और यह बनाने के लिए एक उपयोगी अंतर कब है? उन भाषाओं के बारे में क्या जहां संकलक रनटाइम पर उपलब्ध है? गाय स्टील (कोई डमी नहीं, वह) ने CLTL2 में EVAL-WHEN के बारे में 7 पेज लिखे, जिन्हें CL प्रोग्रामर इसे नियंत्रित करने के लिए उपयोग कर सकते हैं। 2 वाक्य एक परिभाषा के लिए मुश्किल से पर्याप्त हैं , जो अपने आप में एक स्पष्टीकरण की कमी है ।
सामान्य तौर पर, यह एक कठिन समस्या है कि भाषा डिजाइनर इससे बचने की कोशिश करते दिख रहे हैं। वे अक्सर कहते हैं "यहाँ एक संकलक है, यह संकलन-समय की चीजें करता है, उसके बाद का सब कुछ रन-टाइम है, मज़े करें"। सी को डिज़ाइन करने के लिए सरल बनाया गया है, न कि गणना के लिए सबसे अधिक लचीला वातावरण। जब आपके पास रनवे पर कंपाइलर उपलब्ध नहीं होता है, या अभिव्यक्ति का मूल्यांकन करने पर आसानी से नियंत्रित करने की क्षमता होती है, तो आप मैक्रोज़ के आम उपयोग के लिए भाषा में हैक के साथ समाप्त होते हैं, या उपयोगकर्ता अनुकरण करने के लिए डिज़ाइन पैटर्न के साथ आते हैं। अधिक शक्तिशाली निर्माण होने। एक सरल-से-कार्यान्वित भाषा निश्चित रूप से एक सार्थक लक्ष्य हो सकती है, लेकिन इसका मतलब यह नहीं है कि यह प्रोग्रामिंग भाषा के डिजाइन का अंत-सभी-के-सभी है। (मैं EVAL- बहुत का उपयोग नहीं करता, लेकिन मैं इसके बिना जीवन की कल्पना नहीं कर सकता।)
और संकलन-समय और रन-टाइम के आसपास की समस्याएँ बहुत बड़ी हैं और अभी भी काफी हद तक बेरोज़गार हैं। यह कहना नहीं है कि एसओ चर्चा करने के लिए सही जगह है, लेकिन मैं लोगों को इस क्षेत्र का पता लगाने के लिए प्रोत्साहित करता हूं, विशेष रूप से उन लोगों के लिए जिनके पास यह नहीं होना चाहिए की कोई पूर्व धारणा नहीं है। सवाल न तो सरल है और न ही मूर्खतापूर्ण है, और हम कम से कम जिज्ञासु को सही दिशा में इंगित कर सकते हैं।
दुर्भाग्य से, मैं इस पर कोई अच्छा संदर्भ नहीं जानता। CLTL2 इसके बारे में थोड़ी बात करता है, लेकिन इसके बारे में सीखना बहुत अच्छा नहीं है।