बैच संकलक क्या है?


28

मेरे संकलक के पाठ्यक्रम से निम्नलिखित उद्धरण हैं (ग्राफ़ के रंग के संदर्भ में):

क्योंकि यह धीमा है, ग्राफ कलरिंग का उपयोग बैच कंपाइलरों में किया जाता है, जबकि रैखिक स्कैन का उपयोग जेआईटी कंपाइलरों में किया जाता है।

मुझे ऑनलाइन स्पष्ट परिभाषा नहीं मिली। तो, एक कंपाइलर एक बैच कंपाइलर क्या है?


यह प्रश्न यहाँ विषय से हटकर है। softwareengineering.stackexchange.com पूछने के लिए एक बेहतर जगह है
बेसिल स्टैरनेवविच

जवाबों:


42

एक JIT (जस्ट-इन-टाइम) कंपाइलर रन-टाइम पर कोड संकलित करता है, जैसा कि प्रोग्राम चल रहा है। इसलिए संकलन की लागत कार्यक्रम के निष्पादन समय का हिस्सा है, और इसलिए इसे कम से कम किया जाना चाहिए।

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

आजकल, जब लोग "कंपाइलर" कहते हैं, तो उनका मतलब आमतौर पर एओटी कंपाइलर होता है। दरअसल, शब्द "एओटी कंपाइलर" वास्तव में हाल ही में लोकप्रिय होना शुरू हुआ जब लोगों ने जेआईटी संकलित भाषाओं, विशेष रूप से जावास्क्रिप्ट के लिए एओटी संकलक बनाना शुरू किया। इनमें से कई भाषाएं, जैसे C #, एक VM के लिए एक मध्यवर्ती भाषा का संकलन है जो कि तब JIT रन-टाइम पर मशीन कोड के लिए संकलित की जाती है। शब्द "एओटी कंपाइलर" का अर्थ है कि स्रोत कोड को सीधे मशीन कोड में संकलित किया जाएगा, इसलिए रन-टाइम में जेआईटी संकलन का कोई भी रूप आवश्यक नहीं है।

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


1
और पुराने दिनों के कंप्लायर्स में जहां अंतःक्रियात्मक रूप से नहीं चलता है, आपको अपने प्रोग्राम को संकलित करने के लिए एक बैच कतार में नौकरी प्रस्तुत करनी थी
न्यूरोमैंसर

और कुछ भाषा कार्यान्वयन (GNU के awk, cpython इत्यादि) पूरे इनपुट को रन-टाइम पर पहले चरण के रूप में एक आंतरिक प्रतिनिधित्व के लिए संकलित करते हैं, जो यहां वर्णित गुणों में से कुछ को मिलाता है।
dmckee

1
सभी भाषा कार्यान्वयन नहीं, वास्तव में
@dmckee

एक और अस्पष्टता: MSDOS ऑपरेटिंग सिस्टम के लिए बैच कंपाइलर नामक उपकरण मौजूद थे, इन संकलित बैच फ़ाइलों को निष्पादन योग्य फाइलों में ....
12:15 पर randandboneman

बेशक वहाँ हमेशा एक आंतरिक प्रतिनिधित्व है। लेकिन कभी-कभी यह अपने आप में एक भाषा है, जैसा कि Gcc, Llvm या .Net में है। यह फ्रंट-एंड / मिडल / बैक-एंड आर्किटेक्चर के कारण है, फ्रंट-एंड ट्रांसफॉर्मिंग लैंग्वेज (C, C ++, Java, फोरट्रान ..) को एक सामान्य निचले स्तर की भाषा में, फिर ऑप्टिमाइज़ेशन एल्गोरिदम चलाया जाता है, और अंत में आम भाषा में इस अनुकूलित कोड को बैक-एंड द्वारा बाईटेकोड या असेंबलर, एक्जीक्यूटेबल या स्टैटिक या डायनामिक लाइब्रेरी में बदल दिया जाता है।
पुनर्मिलन

11

अर्थ आपके द्वारा दिए गए उद्धरण के भीतर निहित है! यह कंप्यूटिंग टर्म बैच प्रोसेसिंग से उपजा है जिसका उपयोग वास्तविक समय में कार्य नहीं करने पर किया जाता है, लेकिन यह ऑपरेटिंग सिस्टम द्वारा बाद में निष्पादन के लिए निर्धारित होता है जब लोड (अक्सर वास्तविक समय की गतिविधियों के लिए) कम होता है।

एक बैच संकलक वह है जो संकलन करता है जब कोई उपयोगकर्ता संकलन के परिणाम की प्रतीक्षा नहीं कर रहा है। यह वह है जो हम कहेंगे कि आधुनिक शब्दावली का उपयोग पृष्ठभूमि में किया गया है।

यह एक जेआईटी (जस्ट-इन-टाइम) का परिचायक है जो सटीक समय पर "लाइव" किया जाता है, इसके लिए अतिरिक्त समय बिताने के लिए अतिरिक्त समय खर्च करने की विलासिता के बिना आवश्यक है।

बैच संकलन की धीमी गति को इसके द्वारा चित्रित किया जा सकता है:

यहाँ छवि विवरण दर्ज करें

स्रोत: https://xkcd.com/303/

या यह भी:

यहाँ छवि विवरण दर्ज करें

स्रोत: http://dilbert.com/strip/2013-06-22

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.