समय से पहले संकलन

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

बहुधा, यह एक उच्च-स्तरीय प्रोग्रामिंग भाषा जैसे C (प्रोग्रामिंग भाषा) या C++, या एक मध्यवर्ती प्रतिनिधित्व जैसे जावा बाइटकोड या .NET फ्रेमवर्क सामान्य मध्यवर्ती भाषा (CIL) कोड को एक साधारण में संकलक के कार्य से जुड़ा होता है। (सिस्टम-निर्भर) मशीन कोड ताकि परिणामी बाइनरी फ़ाइल 'मानक' साधारण कंपाइलर की तरह मूल रूप से निष्पादित हो सके। इस विशिष्ट संदर्भ में उपयोग किए जाने पर, इसे प्रायः समय-समय पर संकलन जस्ट-इन-टाइम (जेआईटी) संकलन के विपरीत के रूप में देखा जाता है।

अधिक सामान्यतः बोलते हुए, एओटी संकलन की लक्ष्य भाषा मूल मशीन कोड के लिए आवश्यक नहीं है बल्कि मनमाने ढंग से परिभाषित की जाती है। कुछ अकादमिक पेपरवर्क इस शब्द का उपयोग जावा बाइटकोड को C में संकलित करने के कार्य के अर्थ के लिए करते हैं या वह समय जब अनुकूलन पाइपलाइन निष्पादित की जाती है। एक अकादमिक परियोजना इस शब्द का उपयोग V8 (जावास्क्रिप्ट इंजन) के लिए मशीन-निर्भर अनुकूलित इंटरमीडिएट प्रतिनिधित्व के लिए पूर्व-संकलित जावास्क्रिप्ट के कार्य के अर्थ के लिए करता है। और वेब किट जावा स्क्रिप्ट कोर के लिए एक मशीन से स्वतंत्र बाइट कोड कुछ औद्योगिक भाषा कार्यान्वयन (जैसे क्लोजर और हेमीज़ जावास्क्रिप्ट इंजन ) इस शब्द का उपयोग स्रोत भाषा को वीएम विशिष्ट बाइट कोड में पूर्व-संकलित करने के कार्य के अर्थ में करें। कोणीय (वेब ​​फ्रेमवर्क) इस शब्द का उपयोग अपने HTML टेम्पलेट और टाइपप्रति को जावास्क्रिप्ट में परिवर्तित करने के लिए करता है। वास्तव में, चूंकि सभी स्थैतिक संकलन तकनीकी रूप से समय से पहले किए जाते हैं, इसलिए इस विशेष शब्द का प्रयोग प्रायः ऐसे पूर्व-संकलन के कार्य से कुछ प्रकार के प्रदर्शन लाभों पर जोर देने के लिए किया जाता है। जावा बाइटकोड में जावा (प्रोग्रामिंग भाषा) को संकलित करने का कार्य इसलिए अनुमानतः ही कभी एओटी के रूप में जाना जाता है क्योंकि यह सामान्यतः एक आवश्यकता है, अनुकूलन नहीं।

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

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

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

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

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

यह भी देखें

 * asm.js संकलक (जावास्क्रिप्ट)
 * बार्टोक (संकलक) (सामान्य मध्यवर्ती भाषा)
 * एक्सेलसियर जेट (जावा (प्रोग्रामिंग भाषा))
 * जावा के लिए जीएनयू कंपाइलर
 * IL2CPU (CIL)
 * देशी छवि जनरेटर (CIL)
 * रूबीमोशन (रूबी (प्रोग्रामिंग भाषा))

बाहरी संबंध

 * Speed: NGen Revs Up Your Performance with Powerful New Features – MSDN Magazine, April 2005
 * Mono एओटी
 * Excelsior JET – Certified Java SE Implementation with एओटी compiler
 * GNU Compiler for Java
 * एओटी compilation of asm.js
 * Real-time Java, Part 2: Comparing compilation techniques – IBM developerWorks, April 2007
 * Improving Swing Performance: जेआईटी vs एओटी Compilation – LinuxWorld Magazine, November 2004
 * Manta