रनटाइम बनाम संकलन समय


370

रन-टाइम और कम्पाइल-टाइम में क्या अंतर है?


मैंने एक बहुत छोटा लेकिन स्पष्ट उदाहरण दिया है। यह बहुत विस्तार के साथ नहीं है। उसके बाद सभी उत्तरों से गुजरा जा सकता है। वे कमाल के हैं ...
संकरा बनर्जी

जवाबों:


479

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

  1. कार्यक्रम को संतुष्ट करने वाले क्या सहायक हैं?
  2. इस चरण में क्या गलत हो सकता है?
  3. यदि चरण सफल होता है, तो पोस्टकंडिशन क्या हैं (हम क्या जानते हैं)?
  4. इनपुट और आउटपुट क्या हैं, यदि कोई हो?

संकलन का समय

  1. कार्यक्रम को किसी भी आक्रमणकारी को संतुष्ट करने की आवश्यकता नहीं है। वास्तव में, यह एक सुव्यवस्थित कार्यक्रम होने की आवश्यकता नहीं है। आप इस HTML को संकलक को खिला सकते हैं और इसे देख सकते हैं ...
  2. संकलन के समय क्या गलत हो सकता है:
    • सिंटैक्स त्रुटियां
    • टंकण त्रुटियां
    • (दुर्लभ) संकलक क्रैश
  3. यदि कंपाइलर सफल होता है, तो हम क्या जानते हैं?
    • कार्यक्रम अच्छी तरह से बनाया गया था --- जो भी भाषा में एक सार्थक कार्यक्रम।
    • कार्यक्रम चलाना शुरू करना संभव है। (कार्यक्रम तुरंत विफल हो सकता है, लेकिन कम से कम हम कोशिश कर सकते हैं।)
  4. इनपुट और आउटपुट क्या हैं?
    • इनपुट प्रोग्राम संकलित किया जा रहा था, साथ ही किसी भी हेडर फाइल, इंटरफेस, लाइब्रेरी या अन्य वूडू को आयात करने की आवश्यकता थी को संकलित करने के ।
    • आउटपुट उम्मीद के मुताबिक विधानसभा कोड या रिलोसेबल ऑब्जेक्ट कोड या एक निष्पादन योग्य कार्यक्रम भी है। या अगर कुछ गलत हो जाता है, तो आउटपुट त्रुटि संदेशों का एक गुच्छा है।

भागो समय

  1. हमें प्रोग्राम के इनवेरिएंट्स के बारे में कुछ भी नहीं पता है --- वे जो भी प्रोग्रामर हैं, वे रन-टाइम इन्वर्टर केवल कंपाइलर द्वारा ही लागू किए जाते हैं; इसे प्रोग्रामर से मदद की जरूरत है।
  2. क्या गलत हो सकता है रन-टाइम त्रुटियां :

    • शून्य से विभाजन
    • एक अशक्त सूचक को संदर्भित करना
    • स्मृति से बाहर चल रहा है

    इसके अलावा ऐसी त्रुटियां भी हो सकती हैं, जिनका पता प्रोग्राम द्वारा ही लगाया जाता है:

    • ऐसी फ़ाइल खोलने की कोशिश करना जो वहाँ नहीं है
    • एक वेब पेज खोजने की कोशिश करना और यह पता लगाना कि एक कथित URL अच्छी तरह से नहीं बना है
  3. यदि रन-टाइम सफल हो जाता है, तो प्रोग्राम क्रैश हुए बिना पूरा हो जाता है (या चलता रहता है)।
  4. इनपुट और आउटपुट पूरी तरह से प्रोग्रामर तक हैं। फ़ाइलें, स्क्रीन पर खिड़कियां, नेटवर्क पैकेट, प्रिंटर को भेजे गए कार्य, आप इसे नाम देते हैं। यदि प्रोग्राम मिसाइल लॉन्च करता है, तो यह एक आउटपुट है, और यह केवल रन टाइम पर होता है :-)

13
बहुत अच्छा उत्तर जो इसे कवर करता है (+1) हालांकि आप संकलन-समय बनाम रन-टाइम के मेटा-प्रोग्रामिंग पहलुओं पर भी स्पर्श नहीं करते हैं और यह कि, IMHO, सबसे दिलचस्प हिस्सा है। मैं अनुदान देता हूँ, यह उत्तर देते हुए स्वीकार कर लिया गया है कि यह अच्छी तरह से बाहर हो सकता है कि ओपी क्या देख रहा था।
BCS

4
अच्छा लगा, अगर कोई मेरे व्याख्यान के दौरान मुझसे इसके बारे में पूछेगा, तो मैं आपके awser का उपयोग करूंगा :-)
e-satis

12
यह वास्तव में अच्छा जवाब है। यह बहुत स्पष्ट और समझ में आता है। Google में इतना स्पष्ट उत्तर खोजना आसान नहीं है।
तारिक

7
यहां तक ​​कि अगर आपने थोड़ी देर के लिए प्रोग्राम किया है, तब भी इसे प्राप्त करना आसान नहीं है ... यह सिर्फ नए व्यक्ति नहीं हैं। ओपी द्वारा अच्छा सवाल।
पॉजिटिव

11
"कार्यक्रम को किसी भी आक्रमणकारी को संतुष्ट करने की आवश्यकता नहीं है। वास्तव में, यह एक अच्छी तरह से गठित कार्यक्रम होने की आवश्यकता नहीं है। आप इस HTML को संकलक को खिला सकते हैं और इसे देख सकते हैं ..." मुझे नहीं पता कि आप क्या कह रहे हैं। यहाँ। क्या आप इसे सरल शब्दों में समझा सकते हैं, इस सभी तकनीकी कचरे के साथ नहीं?
पॉजिटिव

175

मैं इसे त्रुटियों के संदर्भ में सोचता हूं, और जब वे पकड़े जा सकते हैं।

संकलन समय:

string my_value = Console.ReadLine();
int i = my_value;

एक स्ट्रिंग मान को इंट के प्रकार का एक चर नहीं सौंपा जा सकता है, इसलिए संकलक को संकलन समय पर निश्चित रूप से पता है कि इस कोड में समस्या है

रन समय:

string my_value = Console.ReadLine();
int i = int.Parse(my_value);

यहाँ परिणाम इस बात पर निर्भर करता है कि ReadLine () द्वारा किस स्ट्रिंग को लौटाया गया था। कुछ मूल्यों को एक इंट में पार्स किया जा सकता है, अन्य नहीं। यह केवल रन टाइम पर निर्धारित किया जा सकता है


59
अब यह एक ऐसी चीज है जिसे हम सब समझ सकते हैं। कोई सामान्य कचरा टेक शब्द नहीं है। अच्छा लगा।
पॉजिटिव

IPhone App के लिए: क्या पहली बार कोड को डेवलपर द्वारा .appएक्सटेंशन में संकलित किया गया है ? या यह उपयोगकर्ता द्वारा ऐप शुरू करने पर हर बार लॉन्च होने पर होता है ?
हनी

1
@ यह पहली बार डेवलपर द्वारा एक .app में संकलित किया गया है
maytham-it

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

72

संकलन समय: वह समय अवधि जिसमें आप, डेवलपर, आपके कोड का संकलन कर रहे हैं।

रन-समय: वह समय अवधि जो उपयोगकर्ता आपके सॉफ़्टवेयर के टुकड़े को चला रहा है।

क्या आपको किसी भी स्पष्ट परिभाषा की आवश्यकता है?


12
@ बीसीएस: ओपी को एक व्याख्या या बाइट-कंपाइल-तब-रन-इन-वन-वन-स्टेप भाषा का उपयोग करके प्रोग्रामिंग के लिए एक बहुत ही सरल परिचय हो सकता है ताकि भेद की कभी जरूरत न पड़े। भोली में सवाल, लेकिन गूंगा नहीं
dmckee --- पूर्व-मध्यस्थ ने

@dmckee: मुझे लगता है कि यह उत्तर आपके उपयोगकर्ता के लिए भी उपयोगी नहीं होगा क्योंकि इसमें मूल प्रश्न की तुलना में अधिक जानकारी सामग्री नहीं है। जो कोई भी यह सवाल पूछेगा कि इस उत्तर के उत्तर में कोई व्यावसायिक प्रोग्रामिंग नहीं है (और मुझे नहीं लगता कि ओपी यह पूछ रहा था)।
BCS

मेरे पास एक तेज़ सवाल है। जब कोई कहता है कि एक सामान्य रनटाइम त्रुटि शून्य से विभाजित हो रही है, लेकिन अगर आपके पास एक चर है, तो कहने दें int x = 3/0लेकिन आप इस चर के साथ कुछ भी नहीं करते हैं। हम इसे या कुछ भी नहीं छापते हैं। क्या इसे अभी भी एक रनटाइम त्रुटि माना जाएगा?
रोबेन

IPhone ऐप के लिए: क्या पहली बार कोड को डेवलपर द्वारा एक .app एक्सटेंशन में संकलित किया जाता है? या यह उपयोगकर्ता द्वारा ऐप शुरू करने पर हर बार लॉन्च होने पर होता है? यदि इसका संकलन समय जिसके लिए डेवलपर का कोड संकलित किया जा रहा है, तो मैं इसकी परवाह क्यों करूंगा? मेरा मतलब है कि यह उपयोगकर्ता के अनुभव को प्रभावित नहीं करेगा? जैसा कि यह डेवलपर्स समय को मार देगा!
हनी

1
@ रोबेन मुझे लगता है कि आपको इस समय के बाद अपना जवाब मिल गया है, लेकिन मैं दूसरों के लिए इसका जवाब दूंगा। लेकिन यह एक रनटाइम त्रुटि होगी, भले ही आप इसका इस्तेमाल न करें
فربد وروري

22

( संपादित करें : निम्नलिखित 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

अपवाद। हैशटेब एक था, लेकिन मैंने पाया कि सबसे बड़ा कदम था .net 1.1 से .net 2.0, अनपेड से टाइप किए गए डेटासेट (और अब linq) पर जा रहा है। एक डोडी डेटाबेस के साथ एक टूटे हुए रूप का निवारण करने की कोशिश करना मुझे बहुत दुखी करता था!
स्पैन

19

स्रोत कोड का सामान में होने वाले-पर-अनुवाद- [स्क्रीन | डिस्क | नेटवर्क] में हो सकता है (लगभग) दो तरीके; उन्हें संकलन और व्याख्या करना।

एक में संकलित कार्यक्रम (उदाहरण ग और fortran हैं):

  1. स्रोत कोड को दूसरे प्रोग्राम (आमतौर पर एक कंपाइलर - गो फिगर) में खिलाया जाता है, जो एक निष्पादन योग्य प्रोग्राम (या एक त्रुटि) पैदा करता है।
  2. निष्पादन योग्य चलाया जाता है (इसे डबल क्लिक करके, या कमांड लाइन पर इसका नाम टाइप करके)

पहले चरण में होने वाली चीजों को "संकलन समय" पर होने के लिए कहा जाता है, दूसरे चरण में होने वाली चीजों को "रन टाइम" पर होने के लिए कहा जाता है।

एक व्याख्या किए गए कार्यक्रम में (उदाहरण के लिए माइक्रो सॉफ्ट बेसिक (डॉस पर) और अजगर (मुझे लगता है)):

  1. स्रोत कोड को एक अन्य कार्यक्रम (आमतौर पर एक दुभाषिया कहा जाता है) में खिलाया जाता है जो इसे सीधे "रन" करता है। यहां दुभाषिया आपके कार्यक्रम और ऑपरेटिंग सिस्टम (या वास्तव में सरल कंप्यूटरों में हार्डवेयर) के बीच एक मध्यवर्ती परत के रूप में कार्य करता है।

इस मामले में संकलन समय और रन समय के बीच का अंतर कम करने के लिए कठिन है, और प्रोग्रामर या उपयोगकर्ता के लिए बहुत कम प्रासंगिक है।

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

एक मध्यवर्ती मामला भी है जिसमें प्रोग्राम को बायटेकोड पर संकलित किया जाता है और तुरंत चलाया जाता है (जैसा कि awk या perl में)।


11

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

उदाहरण के लिए।

लगातार तह:

अगर मैं लिखूं:

int i = 2;
i += MY_CONSTANT;

संकलक इस संचय को संकलन समय पर कर सकता है क्योंकि यह जानता है कि 2 क्या है, और MY_CONSTANT क्या है। जैसे कि यह हर एक निष्पादन को एक गणना करने से बचाता है।


और रनटाइम बाउंड कोड की तुलना में संकलन समय कोड को बनाए रखना आसान है। संकलन के समय आप कुछ सामान की जांच करने के लिए कंपाइलर का उपयोग कर सकते हैं। रनटाइम में एक ही सामान को जांचने में अधिक समय लगता है क्योंकि इसमें परीक्षण शामिल होता है।
user1154664

10

हम्म, ठीक है, रनटाइम का उपयोग किसी ऐसी चीज का वर्णन करने के लिए किया जाता है जो किसी प्रोग्राम के चलने पर होती है।

संकलित समय का उपयोग उस चीज का वर्णन करने के लिए किया जाता है जो तब होता है जब कोई प्रोग्राम बनाया जा रहा हो (आमतौर पर, एक संकलक द्वारा)।


8

संकलन समय:

संकलित समय में काम आने वाली चीजें (लगभग) कोई लागत नहीं है जब परिणामी कार्यक्रम चलाया जाता है, लेकिन जब आप कार्यक्रम बनाते हैं तो बड़ी लागत लगा सकते हैं।

रन-टाइम:

कमोबेश ठीक इसके विपरीत। कम लागत जब आप बनाते हैं, तो अधिक लागत जब कार्यक्रम चलाया जाता है।

दुसरी तरफ से; यदि संकलन समय पर कुछ किया जाता है, तो यह केवल आपके मशीन पर चलता है और यदि कुछ रन-टाइम है, तो यह आपके उपयोगकर्ता मशीन पर चलता है।

प्रासंगिकता

एक उदाहरण जहां यह महत्वपूर्ण है, एक प्रकार की इकाई होगी। एक संकलित समय संस्करण (जैसे Boost.Units या मेरा संस्करण D में ) मूल फ्लोटिंग पॉइंट कोड के साथ समस्या को हल करने के दौरान तेजी से समाप्त हो रहा है, जबकि एक रन-टाइम संस्करण इकाइयों के बारे में जानकारी के लिए पैक करने के लिए समाप्त होता है, जो एक मूल्य हैं में और हर ऑपरेशन के साथ उन में जाँच प्रदर्शन करते हैं। दूसरी ओर, संकलित समय संस्करणों की आवश्यकता है कि मूल्यों की इकाइयों को संकलन समय पर जाना जाता है और वे उस मामले से नहीं निपट सकते जहां वे रन-टाइम इनपुट से आते हैं।


8

प्रश्न के पिछले समान उत्तर से निम्नलिखित रन-टाइम त्रुटि और संकलक त्रुटि के बीच अंतर क्या है?

संकलन / संकलन समय / Syntax / शब्दार्थ त्रुटियाँ: संकलन या संकलन समय त्रुटियाँ टाइपिंग गलती के कारण हुई हैं, अगर हम किसी प्रोग्रामिंग भाषा के उचित वाक्यविन्यास और शब्दार्थ का पालन नहीं करते हैं, तो संकलन समय त्रुटियों को संकलक द्वारा फेंक दिया जाता है। जब तक आप सभी वाक्यविन्यास त्रुटियों को दूर नहीं करते हैं या जब तक आप संकलन समय त्रुटियों को मिटा नहीं देते हैं, तब तक वे आपके कार्यक्रम को एक पंक्ति पर अमल नहीं करने देंगे।
उदाहरण: सी में एक अर्धविराम गुम या के intरूप में गलत Int

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

सभी प्रोग्रामिंग त्रुटियों के बारे में यहां पढ़ें


7

अन्य उत्तरों के लिए एक ऐड-ऑन के रूप में, यहां बताया गया है कि मैं इसे आम आदमी को कैसे समझाऊंगा:

आपका स्रोत कोड किसी जहाज के ब्लूप्रिंट की तरह है। यह परिभाषित करता है कि जहाज को कैसे बनाया जाना चाहिए।

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

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


5

उदाहरण के लिए: एक जोरदार टाइप की गई भाषा में, एक प्रकार को संकलन के समय या रनटाइम पर जांचा जा सकता है। संकलन समय पर इसका मतलब है, कि कंपाइलर शिकायत करता है यदि प्रकार संगत नहीं हैं। रनटाइम का मतलब है, कि आप अपने प्रोग्राम को सिर्फ ठीक से संकलित कर सकते हैं, लेकिन रनटाइम के दौरान, यह एक अपवाद फेंकता है।


4

बस शब्द अंतर b / w संकलन समय और भागो समय।

संकलित समय: डेवलपर .java प्रारूप में प्रोग्राम लिखता है और Bytecode में परिवर्तित होता है जो एक क्लास फ़ाइल है, इस संकलन के दौरान कोई भी त्रुटि होती है जिसे संकलित समय त्रुटि के रूप में परिभाषित किया जा सकता है।

रन समय: उत्पन्न .class फ़ाइल को इसकी अतिरिक्त कार्यक्षमता के लिए एप्लिकेशन द्वारा उपयोग किया जाता है और तर्क गलत हो जाता है और एक त्रुटि होती है जो एक रन टाइम त्रुटि है


4

संकलन के विषय पर 'इंट्रोडक्शन टू जेएवीए प्रोग्रामिंग' के लेखक डैनियल लियांग का एक उद्धरण है:

"उच्च-स्तरीय भाषा में लिखे गए प्रोग्राम को सोर्स प्रोग्राम या सोर्स कोड कहा जाता है। क्योंकि कंप्यूटर किसी सोर्स प्रोग्राम को निष्पादित नहीं कर सकता है, इसलिए सोर्स प्रोग्राम को निष्पादन के लिए मशीन कोड में अनुवादित किया जाना चाहिए । अनुवाद को किसी अन्य प्रोग्रामिंग टूल का उपयोग करके किया जा सकता है। एक दुभाषिया या एक संकलक । " (डैनियल लिआंग, " जेएवीए प्रोग्रामिंग का परिचय" , पी 8)।

...वह जारी है...

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

जब हम उच्च-स्तरीय / मानव-पठनीय कोड में पंच करते हैं, तो यह सबसे पहले बेकार है! यह आपके छोटे से सीपीयू में 'इलेक्ट्रॉनिक घटनाओं' के अनुक्रम में अनुवादित होना चाहिए! इस ओर पहला कदम संकलन है।

सीधे शब्दों में कहें: एक कंपाइल-टाइम त्रुटि इस चरण के दौरान होती है, जबकि एक रन-टाइम त्रुटि बाद में होती है।

याद रखें: सिर्फ इसलिए कि किसी प्रोग्राम को बिना त्रुटि के संकलित किया जाता है, इसका मतलब यह नहीं है कि वह बिना त्रुटि के चलेगा।

एक रन-टाइम त्रुटि एक प्रोग्राम जीवन-चक्र के तैयार, चलने या प्रतीक्षा भाग में घटित होगी, जबकि एक संकलन-समय त्रुटि जीवन चक्र के 'नए' चरण से पहले होगी।

एक संकलन-समय त्रुटि का उदाहरण:

एक सिंटैक्स त्रुटि - यदि आपके कोड मशीन स्तर के निर्देशों में संकलित किए जाते हैं तो वे कैसे अस्पष्ट हो सकते हैं ?? आपके कोड को भाषा के वाक्यात्मक नियमों के लिए 100% अनुरूप होना चाहिए अन्यथा इसे कार्यशील मशीन कोड में संकलित नहीं किया जा सकता है ।

रन-टाइम त्रुटि का उदाहरण:

स्मृति से बाहर चल रहा है - उदाहरण के लिए एक पुनरावर्ती कार्य के लिए एक कॉल एक विशेष डिग्री के एक चर दिए गए स्टैक ओवरफ्लो का कारण हो सकता है! यह संकलक द्वारा कैसे अनुमानित किया जा सकता है !? यह नहीं कर सकते।

और वह संकलन-समय त्रुटि और रन-टाइम त्रुटि के बीच अंतर है


2

जब आप प्रोग्राम चलाते हैं तो रन टाइम का मतलब कुछ होता है।

संकलित समय का मतलब है कि जब आप कार्यक्रम संकलित करते हैं तो कुछ होता है।


2

संकलन समय:

संकलित समय में काम आने वाली चीजें (लगभग) कोई लागत नहीं है जब परिणामी कार्यक्रम चलाया जाता है, लेकिन जब आप कार्यक्रम बनाते हैं तो बड़ी लागत लगा सकते हैं। रन-टाइम:

कमोबेश ठीक इसके विपरीत। कम लागत जब आप बनाते हैं, तो अधिक लागत जब कार्यक्रम चलाया जाता है।

दुसरी तरफ से; यदि संकलन समय पर कुछ किया जाता है, तो यह केवल आपके मशीन पर चलता है और यदि कुछ रन-टाइम है, तो यह आपके उपयोगकर्ता मशीन पर चलता है।


2

संकलन समय: स्रोत कोड को मशीन कोड में बदलने के लिए समय लिया जाता है ताकि यह एक निष्पादन योग्य बन जाए जिसे संकलन समय कहा जाता है।

रन टाइम: जब कोई एप्लिकेशन रन कर रहा होता है, तो उसे रन टाइम कहा जाता है।

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


2

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


1

यहाँ प्रश्न के उत्तर के लिए एक विस्तार है "रन-टाइम और संकलन-समय के बीच अंतर?" - रन-टाइम और कम्पाइल-टाइम से जुड़े ओवरहेड्स में अंतर ?

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

यहाँ पढ़ने के लिए एक महान स्रोत :


1

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

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

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

यह गतिशील रूप से कैसे संभाला जाता है, फिर भाषा, संकलक, OS, आपका कोड आदि पर निर्भर करेगा।

उस नोट पर हालांकि यह वास्तव में उस संदर्भ पर निर्भर करता है जिसमें आप रन टाइम बनाम संकलन समय का उपयोग कर रहे हैं।


1

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

जोसेफ कुलंदई।


1

रन-टाइम और कम्पाइल टाइम के बीच मुख्य अंतर है:

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

int a = 1 int b = a/0;

यहाँ पहली पंक्ति में अंत में अर्ध-बृहदान्त्र नहीं होता है --- ऑपरेशन बी निष्पादित करते समय कार्यक्रम को निष्पादित करने के बाद समय त्रुटि का संकलन करें, परिणाम अनंत है ---> रन-टाइम त्रुटि।

  1. संकलित समय आपके कोड द्वारा प्रदान की गई कार्यक्षमता के आउटपुट के लिए नहीं दिखता है, जबकि रन-टाइम करता है।

1

यहाँ एक बहुत ही सरल जवाब है:

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

एक संकलित कार्यक्रम को एक उपयोगकर्ता द्वारा खोला और चलाया जा सकता है। जब कोई एप्लिकेशन चल रहा होता है, तो उसे रनटाइम कहा जाता है।

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

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

सन्दर्भ


0

IMHO आपको रनटाइम बनाम कंपाइल समय के बीच अंतर के बारे में विचार करने के लिए कई लिंक, संसाधन पढ़ने की आवश्यकता है क्योंकि यह एक बहुत ही जटिल विषय है। मेरी कुछ तस्वीरें / लिंक नीचे दी गई हैं जिनकी मैं सिफारिश कर रहा हूं।

इसके अलावा जो इसके ऊपर कहा गया है, मैं उसे जोड़ना चाहता हूं कि कभी-कभी 1000 शब्दों का चित्र होता है:

  1. इस दो का क्रम: पहले संकलन का समय है और फिर आप एक संकलित कार्यक्रम चलाते हैं और एक उपयोगकर्ता द्वारा चलाया जा सकता है। जब कोई एप्लिकेशन चल रहा होता है, तो उसे रनटाइम कहा जाता है: संकलन समय और फिर रनटाइम 1 संकलित समय और फिर runtime1;

CLR_diag संकलन समय और फिर रनटाइम 2  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यहां छवि विवरण दर्ज करें यहां छवि विवरण दर्ज करें

  • Google पर खोज करें और रनटाइम त्रुटियों की तुलना करें बनाम त्रुटियों को संकलित करें:

रनटाइम त्रुटियों

गलतियों को संकलित करें ;

  1. मेरी राय में जानने के लिए एक बहुत ही महत्वपूर्ण बात: 3.1 निर्माण बनाम संकलन और जीवनचक्र के अंतर https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

3.2 इस 3 चीजों के बीच अंतर: संकलन बनाम बिल्ड रनटाइम

https://www.quora.com/What-is-the-difference-between-build-run-and-compile फर्नांडो पोडान, एक डेवलपर जो भाषा के डिज़ाइन के लिए थोड़ा उत्सुक है, जिसका उत्तर 23 फरवरी को दिया गया था कि मैं रिश्ते में पीछे जा रहा हूं अन्य उत्तरों के लिए:

रनिंग कुछ द्विआधारी निष्पादन योग्य (या एक स्क्रिप्ट, व्याख्या की गई भाषाओं के लिए) हो रही है, अच्छी तरह से ... कंप्यूटर पर एक नई प्रक्रिया के रूप में निष्पादित; संकलन कुछ उच्च स्तरीय भाषा (मशीन कोड की तुलना में उच्चतर) में लिखे गए प्रोग्राम को पार्स करने की प्रक्रिया है, यह सिंटैक्स, शब्दार्थ, पुस्तकालयों को जोड़ना, शायद कुछ अनुकूलन कर रहा है, तो आउटपुट के रूप में एक द्विआधारी निष्पादन योग्य कार्यक्रम बना रहा है। यह निष्पादन योग्य मशीन कोड या किसी प्रकार के बाइट कोड के रूप में हो सकता है - अर्थात, किसी प्रकार की वर्चुअल मशीन को लक्षित करने वाले निर्देश; निर्माण में आमतौर पर जाँच करना और निर्भरता प्रदान करना, कोड का निरीक्षण करना, कोड को बाइनरी में संकलित करना, स्वचालित परीक्षण चलाना और परिणामस्वरूप बाइनरी [ies] और अन्य परिसंपत्तियों (छवियों, कॉन्फ़िगरेशन फ़ाइलों, पुस्तकालयों, आदि) को तैनाती योग्य फ़ाइल के कुछ विशिष्ट प्रारूप में शामिल करना शामिल है। ध्यान दें कि अधिकांश प्रक्रियाएं वैकल्पिक हैं और कुछ उस लक्षित प्लेटफॉर्म पर निर्भर करती हैं जिस पर आप निर्माण कर रहे हैं। एक उदाहरण के रूप में, टॉमकैट के लिए जावा एप्लिकेशन की पैकेजिंग एक .war फ़ाइल का उत्पादन करेगी। C32 कोड से एक Win32 निष्पादन योग्य बिल्डिंग का निर्माण केवल .exe प्रोग्राम कर सकता है, या इसे .msi इंस्टॉलर के अंदर पैकेज भी कर सकता है।


0

इस उदाहरण में देखें:

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)

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


0

सार्वजनिक वर्ग 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{

}


0

आप वास्तविक कोड को पढ़ने से कोड संकलन संरचना को समझ सकते हैं। रन-टाइम संरचना तब तक स्पष्ट नहीं होती है जब तक आप उस पैटर्न को नहीं समझते हैं जो उपयोग किया गया था।


-1

यह एसओ के लिए एक अच्छा सवाल नहीं है (यह एक विशिष्ट प्रोग्रामिंग सवाल नहीं है), लेकिन यह सामान्य रूप से एक बुरा सवाल नहीं है।

अगर आपको लगता है कि यह तुच्छ है: संकलन-समय बनाम रीड-टाइम के बारे में क्या है, और यह बनाने के लिए एक उपयोगी अंतर कब है? उन भाषाओं के बारे में क्या जहां संकलक रनटाइम पर उपलब्ध है? गाय स्टील (कोई डमी नहीं, वह) ने CLTL2 में EVAL-WHEN के बारे में 7 पेज लिखे, जिन्हें CL प्रोग्रामर इसे नियंत्रित करने के लिए उपयोग कर सकते हैं। 2 वाक्य एक परिभाषा के लिए मुश्किल से पर्याप्त हैं , जो अपने आप में एक स्पष्टीकरण की कमी है ।

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

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

दुर्भाग्य से, मैं इस पर कोई अच्छा संदर्भ नहीं जानता। CLTL2 इसके बारे में थोड़ी बात करता है, लेकिन इसके बारे में सीखना बहुत अच्छा नहीं है।


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

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