समय से पहले संकलन: Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Computer code compilation strategy}} {{More footnotes|date=February 2014}} {{Program execution}} कंप्यूटर विज्ञान में,...")
 
No edit summary
Line 1: Line 1:
{{Short description|Computer code compilation strategy}}
{{Short description|Computer code compilation strategy}}
{{More footnotes|date=February 2014}}
{{Program execution}}
{{Program execution}}
कंप्यूटर विज्ञान में, समय से पहले संकलन (एओटी संकलन) एक कार्यक्रम के निष्पादन से पहले एक (अक्सर) उच्च-स्तरीय [[प्रोग्रामिंग भाषा]] में (अक्सर) निम्न-स्तरीय भाषा में [[संकलक]] का कार्य है, आमतौर पर बिल्ड-टाइम पर, [[रन टाइम (कार्यक्रम जीवनचक्र चरण)]] पर किए जाने वाले आवश्यक कार्य की मात्रा को कम करें।
कंप्यूटर विज्ञान में, समय से पहले संकलन (एओटी संकलन) एक कार्यक्रम के निष्पादन से पहले एक (प्रायः) उच्च-स्तरीय [[प्रोग्रामिंग भाषा]] में (प्रायः) निम्न-स्तरीय भाषा में [[संकलक]] का कार्य है, सामान्यतः बिल्ड-टाइम पर, [[रन टाइम (कार्यक्रम जीवनचक्र चरण)]] पर किए जाने वाले आवश्यक कार्य की मात्रा को लो करें।


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


अधिक आम तौर पर बोलते हुए, एओटी संकलन की लक्ष्य भाषा मूल मशीन कोड के लिए जरूरी नहीं है बल्कि मनमाने ढंग से परिभाषित की जाती है। कुछ अकादमिक कागजात इस शब्द का उपयोग जावा बाइटकोड को सी में संकलित करने के कार्य के अर्थ के लिए करते हैं<ref>{{Cite journal|last1=Jung|first1=Dong-Heon|last2=Park|first2=Jong Kuk|last3=Bae|first3=Sung-Hwan|last4=Lee|first4=Jaemok|last5=Moon|first5=Soo-Mook|date=2006-10-22|title=Efficient exception handling in Java bytecode-to-c ahead-of-time compiler for smbedded systems|url=https://doi.org/10.1145/1176887.1176915|journal=Proceedings of the 6th ACM & IEEE International Conference on Embedded Software|series=EMSOFT '06|location=Seoul, Korea|publisher=Association for Computing Machinery|pages=188–194|doi=10.1145/1176887.1176915|isbn=978-1-59593-542-7|s2cid=15591457 }}</ref> या वह समय जब अनुकूलन पाइपलाइन निष्पादित की जाती है।<ref>{{Cite journal|last=Chambers|first=Craig|date=2002-01-14|title=Staged compilation|url=https://doi.org/10.1145/503032.503045|journal=Proceedings of the 2002 ACM SIGPLAN Workshop on Partial Evaluation and Semantics-based Program Manipulation|series=PEPM '02|location=Portland, Oregon|publisher=Association for Computing Machinery|pages=1–8|doi=10.1145/503032.503045|isbn=978-1-58113-455-1|s2cid=18546907 }}</ref> एक अकादमिक परियोजना<ref>{{Cite journal|last1=Zhuykov|first1=R.|last2=Sharygin|first2=E.|date=2017-01-01|title=Ahead-of-time compilation of JavaScript programs|url=https://doi.org/10.1134/S036176881701008X|journal=Programming and Computer Software|language=en|volume=43|issue=1|pages=51–59|doi=10.1134/S036176881701008X|s2cid=2338849 |issn=1608-3261}}</ref> इस शब्द का उपयोग [[V8 (जावास्क्रिप्ट इंजन)]] के लिए मशीन-निर्भर अनुकूलित इंटरमीडिएट प्रतिनिधित्व के लिए पूर्व-संकलित जावास्क्रिप्ट के कार्य के अर्थ के लिए करता है।<ref>{{Citation|title=ispras/v8-aotc|date=2021-01-30|url=https://github.com/ispras/v8-aotc|publisher=Ivannikov Institute for System Programming of the Russian Academy of Sciences|access-date=2021-03-17}}</ref> और WebKit#JavaScriptCore के लिए एक मशीन से स्वतंत्र बायटेकोड।<ref>{{Citation|title=ispras/webkit-aotc|date=2021-01-30|url=https://github.com/ispras/webkit-aotc|publisher=Ivannikov Institute for System Programming of the Russian Academy of Sciences|access-date=2021-03-17}}</ref> कुछ औद्योगिक भाषा कार्यान्वयन (जैसे [[क्लोजर]]<ref>{{Cite web|title=Clojure - Ahead-of-time Compilation and Class Generation|url=https://clojure.org/reference/compilation|access-date=2021-03-17|website=clojure.org}}</ref> और हेमीज़ [[जावास्क्रिप्ट इंजन]]<ref>{{Cite web|date=2019-07-12|title=Hermes: A new open source JavaScript engine optimized for mobile apps|url=https://engineering.fb.com/2019/07/12/android/hermes/|access-date=2021-03-17|website=Facebook Engineering|language=en-US}}</ref>) इस शब्द का उपयोग स्रोत भाषा को वीएम विशिष्ट बायटेकोड में पूर्व-संकलित करने के कार्य के अर्थ में करें। कोणीय (वेब ​​फ्रेमवर्क) इस शब्द का उपयोग अपने [[HTML]] टेम्पलेट और [[टाइपप्रति]] को [[जावास्क्रिप्ट]] में परिवर्तित करने के लिए करता है।<ref>{{Cite web|title=कोणीय|url=https://angular.io/guide/aot-compiler|access-date=2021-03-17|website=angular.io}}</ref> वास्तव में, चूंकि सभी स्थैतिक संकलन तकनीकी रूप से समय से पहले किए जाते हैं, इसलिए इस विशेष शब्द का प्रयोग अक्सर ऐसे पूर्व-संकलन के कार्य से कुछ प्रकार के प्रदर्शन लाभों पर जोर देने के लिए किया जाता है। जावा बाइटकोड में [[जावा (प्रोग्रामिंग भाषा)]] को संकलित करने का कार्य इसलिए शायद ही कभी एओटी के रूप में जाना जाता है क्योंकि यह आमतौर पर एक आवश्यकता है, अनुकूलन नहीं।
अधिक सामान्यतः बोलते हुए, एओटी संकलन की लक्ष्य भाषा मूल मशीन कोड के लिए आवश्यक नहीं है बल्कि मनमाने ढंग से परिभाषित की जाती है। कुछ अकादमिक पेपरवर्क इस शब्द का उपयोग जावा बाइटकोड को C में संकलित करने के कार्य के अर्थ के लिए करते हैं<ref>{{Cite journal|last1=Jung|first1=Dong-Heon|last2=Park|first2=Jong Kuk|last3=Bae|first3=Sung-Hwan|last4=Lee|first4=Jaemok|last5=Moon|first5=Soo-Mook|date=2006-10-22|title=Efficient exception handling in Java bytecode-to-c ahead-of-time compiler for smbedded systems|url=https://doi.org/10.1145/1176887.1176915|journal=Proceedings of the 6th ACM & IEEE International Conference on Embedded Software|series=EMSOFT '06|location=Seoul, Korea|publisher=Association for Computing Machinery|pages=188–194|doi=10.1145/1176887.1176915|isbn=978-1-59593-542-7|s2cid=15591457 }}</ref> या वह समय जब अनुकूलन पाइपलाइन निष्पादित की जाती है।<ref>{{Cite journal|last=Chambers|first=Craig|date=2002-01-14|title=Staged compilation|url=https://doi.org/10.1145/503032.503045|journal=Proceedings of the 2002 ACM SIGPLAN Workshop on Partial Evaluation and Semantics-based Program Manipulation|series=PEPM '02|location=Portland, Oregon|publisher=Association for Computing Machinery|pages=1–8|doi=10.1145/503032.503045|isbn=978-1-58113-455-1|s2cid=18546907 }}</ref> एक अकादमिक परियोजना<ref>{{Cite journal|last1=Zhuykov|first1=R.|last2=Sharygin|first2=E.|date=2017-01-01|title=Ahead-of-time compilation of JavaScript programs|url=https://doi.org/10.1134/S036176881701008X|journal=Programming and Computer Software|language=en|volume=43|issue=1|pages=51–59|doi=10.1134/S036176881701008X|s2cid=2338849 |issn=1608-3261}}</ref> इस शब्द का उपयोग [[V8 (जावास्क्रिप्ट इंजन)]] के लिए मशीन-निर्भर अनुकूलित इंटरमीडिएट प्रतिनिधित्व के लिए पूर्व-संकलित जावास्क्रिप्ट के कार्य के अर्थ के लिए करता है।<ref>{{Citation|title=ispras/v8-aotc|date=2021-01-30|url=https://github.com/ispras/v8-aotc|publisher=Ivannikov Institute for System Programming of the Russian Academy of Sciences|access-date=2021-03-17}}</ref> और वेब किट जावा स्क्रिप्ट कोर के लिए एक मशीन से स्वतंत्र बाइट कोड<ref>{{Citation|title=ispras/webkit-aotc|date=2021-01-30|url=https://github.com/ispras/webkit-aotc|publisher=Ivannikov Institute for System Programming of the Russian Academy of Sciences|access-date=2021-03-17}}</ref> कुछ औद्योगिक भाषा कार्यान्वयन (जैसे [[क्लोजर]]<ref>{{Cite web|title=Clojure - Ahead-of-time Compilation and Class Generation|url=https://clojure.org/reference/compilation|access-date=2021-03-17|website=clojure.org}}</ref> और हेमीज़ [[जावास्क्रिप्ट इंजन]]<ref>{{Cite web|date=2019-07-12|title=Hermes: A new open source JavaScript engine optimized for mobile apps|url=https://engineering.fb.com/2019/07/12/android/hermes/|access-date=2021-03-17|website=Facebook Engineering|language=en-US}}</ref>) इस शब्द का उपयोग स्रोत भाषा को वीएम विशिष्ट बाइट कोड में पूर्व-संकलित करने के कार्य के अर्थ में करें। कोणीय (वेब ​​फ्रेमवर्क) इस शब्द का उपयोग अपने [[HTML]] टेम्पलेट और [[टाइपप्रति]] को [[जावास्क्रिप्ट]] में परिवर्तित करने के लिए करता है।<ref>{{Cite web|title=कोणीय|url=https://angular.io/guide/aot-compiler|access-date=2021-03-17|website=angular.io}}</ref> वास्तव में, चूंकि सभी स्थैतिक संकलन तकनीकी रूप से समय से पहले किए जाते हैं, इसलिए इस विशेष शब्द का प्रयोग प्रायः ऐसे पूर्व-संकलन के कार्य से कुछ प्रकार के प्रदर्शन लाभों पर जोर देने के लिए किया जाता है। जावा बाइटकोड में [[जावा (प्रोग्रामिंग भाषा)]] को संकलित करने का कार्य इसलिए अनुमानतः ही कभी एओटी के रूप में जाना जाता है क्योंकि यह सामान्यतः एक आवश्यकता है, अनुकूलन नहीं।


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


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


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


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


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


== स्टोरेज ट्रेड-ऑफ ==
== स्टोरेज ट्रेड-ऑफ ==
{{Expand section|date=May 2021}}
{{Expand section|date=मई 2021}}




Line 43: Line 42:
== बाहरी संबंध ==
== बाहरी संबंध ==
* [http://msdn.microsoft.com/en-us/magazine/cc163808.aspx Speed: NGen Revs Up Your Performance with Powerful New Features – MSDN Magazine, April 2005]
* [http://msdn.microsoft.com/en-us/magazine/cc163808.aspx Speed: NGen Revs Up Your Performance with Powerful New Features – MSDN Magazine, April 2005]
* [http://www.mono-project.com/AOT Mono AOT]
* [http://www.mono-project.com/AOT Mono एओटी]
* [https://web.archive.org/web/20101216063748/http://www.excelsior-usa.com/jet.html Excelsior JET – Certified Java SE Implementation with AOT compiler]
* [https://web.archive.org/web/20101216063748/http://www.excelsior-usa.com/jet.html Excelsior JET – Certified Java SE Implementation with एओटी compiler]
* [https://web.archive.org/web/20160802232148/http://gcc.gnu.org/java/ GNU Compiler for Java]
* [https://web.archive.org/web/20160802232148/http://gcc.gnu.org/java/ GNU Compiler for Java]
* [https://blog.mozilla.org/luke/2014/01/14/asm-js-aot-compilation-and-startup-performance/ AOT compilation of asm.js]
* [https://blog.mozilla.org/luke/2014/01/14/asm-js-aot-compilation-and-startup-performance/ एओटी compilation of asm.js]
* [http://www.ibm.com/developerworks/java/library/j-rtj2/index.html#N10153 Real-time Java, Part 2: Comparing compilation techniques – IBM developerWorks, April 2007]
* [http://www.ibm.com/developerworks/java/library/j-rtj2/index.html#N10153 Real-time Java, Part 2: Comparing compilation techniques – IBM developerWorks, April 2007]
* [http://linux.sys-con.com/read/46901.htm Improving Swing Performance: JIT vs AOT Compilation – LinuxWorld Magazine, November 2004] {{Webarchive|url=https://web.archive.org/web/20080612163029/http://linux.sys-con.com/read/46901.htm |date=2008-06-12 }}
* [http://linux.sys-con.com/read/46901.htm Improving Swing Performance: जेआईटी vs एओटी Compilation – LinuxWorld Magazine, November 2004] {{Webarchive|url=https://web.archive.org/web/20080612163029/http://linux.sys-con.com/read/46901.htm |date=2008-06-12 }}
* [https://web.archive.org/web/20090507103601/http://www.cs.vu.nl/manta/ Manta]
* [https://web.archive.org/web/20090507103601/http://www.cs.vu.nl/manta/ Manta]
[[Category: संकलनकर्ता]]  
[[Category: संकलनकर्ता]]  

Revision as of 08:07, 24 February 2023

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

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

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

लो रनटाइम ओवरहेड

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

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

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

प्रदर्शन व्यापार-नापसंद

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

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

स्टोरेज ट्रेड-ऑफ


यह भी देखें


संदर्भ

  1. Jung, Dong-Heon; Park, Jong Kuk; Bae, Sung-Hwan; Lee, Jaemok; Moon, Soo-Mook (2006-10-22). "Efficient exception handling in Java bytecode-to-c ahead-of-time compiler for smbedded systems". Proceedings of the 6th ACM & IEEE International Conference on Embedded Software. EMSOFT '06. Seoul, Korea: Association for Computing Machinery: 188–194. doi:10.1145/1176887.1176915. ISBN 978-1-59593-542-7. S2CID 15591457.
  2. Chambers, Craig (2002-01-14). "Staged compilation". Proceedings of the 2002 ACM SIGPLAN Workshop on Partial Evaluation and Semantics-based Program Manipulation. PEPM '02. Portland, Oregon: Association for Computing Machinery: 1–8. doi:10.1145/503032.503045. ISBN 978-1-58113-455-1. S2CID 18546907.
  3. Zhuykov, R.; Sharygin, E. (2017-01-01). "Ahead-of-time compilation of JavaScript programs". Programming and Computer Software (in English). 43 (1): 51–59. doi:10.1134/S036176881701008X. ISSN 1608-3261. S2CID 2338849.
  4. ispras/v8-aotc, Ivannikov Institute for System Programming of the Russian Academy of Sciences, 2021-01-30, retrieved 2021-03-17
  5. ispras/webkit-aotc, Ivannikov Institute for System Programming of the Russian Academy of Sciences, 2021-01-30, retrieved 2021-03-17
  6. "Clojure - Ahead-of-time Compilation and Class Generation". clojure.org. Retrieved 2021-03-17.
  7. "Hermes: A new open source JavaScript engine optimized for mobile apps". Facebook Engineering (in English). 2019-07-12. Retrieved 2021-03-17.
  8. "कोणीय". angular.io. Retrieved 2021-03-17.


बाहरी संबंध