बूटस्ट्रैपिंग (संकलक): Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Process of writing a self-compiling compiler}} {{About|bootstrapping compilers|the general concept|Bootstrapping}} कंप्यूटर विज्...")
 
No edit summary
 
(16 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Short description|Process of writing a self-compiling compiler}}
{{Short description|Process of writing a self-compiling compiler}}
{{About|bootstrapping compilers|the general concept|Bootstrapping}}
[[कंप्यूटर विज्ञान]] में, '''बूटस्ट्रैपिंग''' एक स्वयं संकलन संकलक बनाने की प्रविधि है अर्थात, संकलक कोडांतरक जो स्रोत प्रोग्रामिंग भाषा में लिखा गया है जिसे वह संकलित करना चाहता है। संकलक का प्रारंभिक कोर संस्करण "बूटस्ट्रैप संकलक" अलग भाषा में उत्पन्न होता है, जो कोडांतरक भाषा हो सकती है। भाषा के इस न्यूनतम उपसमुच्चय का उपयोग करके संकलक के क्रमिक विस्तारित संस्करण विकसित किए गए हैं। स्वयं संकलन संकलक को संकलित करने की समस्या को संकलक रचना में [[मुर्गी या अंडा]] की समस्या कहा गया है और बूटस्ट्रैपिंग इस समस्या का समाधान है।<ref>{{cite journal|last=Reynolds|first=John H.|date=December 2003|department=CCSC: Eastern Conference|issue=2|journal=Journal of Computing Sciences in Colleges|pages=175–181|title=Bootstrapping a self-compiling compiler from machine X to machine Y|url=https://dl.acm.org/doi/10.5555/948785.948811|volume=19|quote=The idea of a compiler written in the language it compiles stirs up the old 'chicken-or-the-egg' conundrum: Where does the first one come from?}}</ref><ref>{{cite conference|last=Glück|first=Robert|editor1-last=Clarke|editor1-first=Edmund|editor2-last=Virbitskaite|editor2-first=Irina|editor3-last=Voronkov|editor3-first=Andrei|contribution=Bootstrapping compiler generators from partial evaluators|doi=10.1007/978-3-642-29709-0_13|pages=125–141|publisher=Springer|series=Lecture Notes in Computer Science|title=Perspectives of Systems Informatics: 8th International Andrei Ershov Memorial Conference, PSI 2011, Novosibirsk, Russia, June 27 – July 1, 2011, Revised Selected Papers|volume=7162|year=2012|quote=Getting started presents the chicken-and-egg problem familiar from compiler construction: one needs a compiler to bootstrap a compiler, and bootstrapping compiler generators is no exception.}}</ref>[[बुनियादी|आधारभूत]], [[ALGOL|ऐल्गॉल]], सी प्रोग्रामिंग भाषा, सी शार्प प्रोग्रामिंग भाषा सी, डी प्रोग्रामिंग भाषा, [[पास्कल (प्रोग्रामिंग भाषा)]], आईपीएल/आई, [[हास्केल|हैस्कल]], मोडुला के लिए संकलक सहित कई प्रोग्रामिंग भाषा के लिए कई संकलक बूटस्ट्रैप्ड हैं। -2, [[बेसिक (BASIC)|बेसिक]], [[एल्गोल 58|एल्गोल]], [[सी (प्रोग्रामिंग भाषा)|सी]], [[सी++|सी#]], [[डी (प्रोग्रामिंग भाषा)|डी]], [[पास्कल (प्रोग्रामिंग भाषा)|पास्कल]], [[पीएल/आई]], [[हास्केल]], [[मोडुला-2]], [[ओबेरॉन (प्रोग्रामिंग भाषा)|ओबेरॉन(प्रोग्रामिंग भाषा)]], [[ओकैमल]], [[सामान्य लिस्प]], [[स्कीम (प्रोग्रामिंग भाषा)|स्कीम(प्रोग्रामिंग भाषा)]], [[जाओ (प्रोग्रामिंग भाषा)|गो(प्रोग्रामिंग भाषा)]], [[जावा (सॉफ्टवेयर प्लेटफॉर्म)|जावा(प्रोग्रामिंग भाषा)]], [[एलिक्सिर]], [[जंग (प्रोग्रामिंग भाषा)|रस्ट(प्रोग्रामिंग भाषा)]], [[पायथन (प्रोग्रामिंग भाषा)|पायथन(प्रोग्रामिंग भाषा)]], [[स्काला (प्रोग्रामिंग भाषा)|स्काला(प्रोग्रामिंग भाषा)]], [[निम (प्रोग्रामिंग भाषा)|निम(प्रोग्रामिंग भाषा)]], [[एफिल (प्रोग्रामिंग भाषा)|एफिल(प्रोग्रामिंग भाषा)]], [[टाइपप्रति|टाइपस्क्रिप्ट]], [[वाला (प्रोग्रामिंग लैंग्वेज)|वाला(प्रोग्रामिंग भाषा)]] , [[ज़िग (प्रोग्रामिंग भाषा)|ज़िग(प्रोग्रामिंग भाषा)]] और बहुत कुछ है।
[[कंप्यूटर विज्ञान]] में, बूटस्ट्रैपिंग एक [[स्व-होस्टिंग ([[संकलक]])]]कंपाइलर) बनाने की तकनीक है। सेल्फ-कंपाइलिंग कंपाइलर - यानी, एक कंपाइलर (या असेंबली लैंग्वेज#असेंबलर) जिसे सोर्स [[प्रोग्रामिंग भाषा]] में लिखा जाता है जिसे वह कंपाइल करना चाहता है। कंपाइलर का प्रारंभिक कोर संस्करण ("बूटस्ट्रैप कंपाइलर") एक अलग भाषा में उत्पन्न होता है (जो असेंबली भाषा हो सकती है); भाषा के इस न्यूनतम उपसमुच्चय का उपयोग करके संकलक के क्रमिक विस्तारित संस्करण विकसित किए गए हैं। स्व-संकलन संकलक को संकलित करने की समस्या को संकलक डिजाइन में [[मुर्गी या अंडा]]|चिकन-या-अंडे की समस्या कहा गया है, और बूटस्ट्रैपिंग इस समस्या का समाधान है।<ref>{{cite journal|last=Reynolds|first=John H.|date=December 2003|department=CCSC: Eastern Conference|issue=2|journal=Journal of Computing Sciences in Colleges|pages=175–181|title=Bootstrapping a self-compiling compiler from machine X to machine Y|url=https://dl.acm.org/doi/10.5555/948785.948811|volume=19|quote=The idea of a compiler written in the language it compiles stirs up the old 'chicken-or-the-egg' conundrum: Where does the first one come from?}}</ref><ref>{{cite conference|last=Glück|first=Robert|editor1-last=Clarke|editor1-first=Edmund|editor2-last=Virbitskaite|editor2-first=Irina|editor3-last=Voronkov|editor3-first=Andrei|contribution=Bootstrapping compiler generators from partial evaluators|doi=10.1007/978-3-642-29709-0_13|pages=125–141|publisher=Springer|series=Lecture Notes in Computer Science|title=Perspectives of Systems Informatics: 8th International Andrei Ershov Memorial Conference, PSI 2011, Novosibirsk, Russia, June 27 – July 1, 2011, Revised Selected Papers|volume=7162|year=2012|quote=Getting started presents the chicken-and-egg problem familiar from compiler construction: one needs a compiler to bootstrap a compiler, and bootstrapping compiler generators is no exception.}}</ref>
[[बुनियादी]], [[ALGOL]], C (प्रोग्रामिंग लैंग्वेज), C Sharp (प्रोग्रामिंग लैंग्वेज) | C#, D (प्रोग्रामिंग लैंग्वेज), [[पास्कल (प्रोग्रामिंग भाषा)]], PL/I, [[हास्केल]], मोडुला के लिए कंपाइलर सहित कई प्रोग्रामिंग लैंग्वेज के लिए कई कंपाइलर बूटस्ट्रैप्ड हैं। -2, [[ओबेरॉन (प्रोग्रामिंग भाषा)]], [[OCaml]], [[सामान्य लिस्प]], स्कीम (प्रोग्रामिंग लैंग्वेज), [[जाओ (प्रोग्रामिंग भाषा)]], [[जावा (प्रोग्रामिंग भाषा)]], [[अमृत ​​​​(प्रोग्रामिंग भाषा)]], [[जंग (प्रोग्रामिंग भाषा)]], पायथन (प्रोग्रामिंग लैंग्वेज), [[स्काला (प्रोग्रामिंग भाषा)]], [[निम (प्रोग्रामिंग भाषा)]], एफिल (प्रोग्रामिंग लैंग्वेज), [[टाइपप्रति]], [[वाला (प्रोग्रामिंग लैंग्वेज)]], [[ज़िग (प्रोग्रामिंग भाषा)]] और बहुत कुछ।


== प्रक्रिया ==
== प्रक्रिया ==
एक विशिष्ट बूटस्ट्रैप प्रक्रिया तीन या चार चरणों में काम करती है:<ref name=gcc>{{cite web |title=Installing GCC: Building |url=https://gcc.gnu.org/install/build.html |website=GNU Project - Free Software Foundation (FSF)}}</ref><ref>{{cite web |title=rust-lang/rust: bootstrap |url=https://github.com/rust-lang/rust/tree/master/src/bootstrap |website=GitHub |language=en}}</ref><ref>{{cite web |title=Advanced Build Configurations — LLVM 10 documentation |url=https://llvm.org/docs/AdvancedBuilds.html#stage-non-determinism |website=llvm.org}}</ref>
विशिष्ट बूटस्ट्रैप प्रक्रिया तीन या चार चरणों में कार्य करती है।<ref name=gcc>{{cite web |title=Installing GCC: Building |url=https://gcc.gnu.org/install/build.html |website=GNU Project - Free Software Foundation (FSF)}}</ref><ref>{{cite web |title=rust-lang/rust: bootstrap |url=https://github.com/rust-lang/rust/tree/master/src/bootstrap |website=GitHub |language=en}}</ref><ref>{{cite web |title=Advanced Build Configurations — LLVM 10 documentation |url=https://llvm.org/docs/AdvancedBuilds.html#stage-non-determinism |website=llvm.org}}</ref>
* स्टेज 0: बूटस्ट्रैप कंपाइलर के साथ काम करने के लिए एक वातावरण तैयार करना। यहीं पर बूटस्ट्रैप कंपाइलर की सोर्स लैंग्वेज और आउटपुट लैंग्वेज को चुना जाता है। एक [[नंगे मशीन]] के मामले में (जहां किसी भी भाषा के लिए कोई संकलक मौजूद नहीं है) स्रोत और आउटपुट को बाइनरी [[मशीन कोड]] के रूप में लिखा जाता है, या लक्ष्य के अलावा किसी अन्य मशीन पर [[क्रॉस कंपाइलर]] द्वारा बनाया जा सकता है। अन्यथा, बूटस्ट्रैप कंपाइलर को प्रोग्रामिंग भाषाओं में से एक में लिखा जाना है जो लक्ष्य मशीन पर मौजूद है, और वह कंपाइलर कुछ ऐसा उत्पन्न करेगा जो लक्ष्य पर निष्पादित हो सकता है, जिसमें [[उच्च स्तरीय प्रोग्रामिंग भाषा]], एक असेंबली भाषा, एक वस्तु शामिल है। फ़ाइल, या मशीन कोड भी।
* चरण 0: बूटस्ट्रैप संकलक के साथ कार्य करने के लिए वातावरण तैयार करना। यहीं पर बूटस्ट्रैप संकलक की स्रोत भाषा और आउटपुट भाषा को चुना जाता है। [[नंगे मशीन|संहिता]] [[नंगे मशीन|मशीन]] के स्थितियों में जहां किसी भी भाषा के लिए कोई संकलक उपस्तिथ नहीं है स्रोत और आउटपुट को द्विआधारी [[बेर मशीन|मशीन संहिता]] के रूप में लिखा जाता है। लक्ष्य के अतिरिक्त किसी अन्य मशीन पर [[क्रॉस कंपाइलर|क्रमादेश संकलक]] द्वारा बनाया जा सकता है। अन्यथा, बूटस्ट्रैप संकलक को प्रोग्रामिंग भाषाओं में से में लिखा जाना है जो लक्ष्य मशीन पर उपस्तिथ है। वह संकलक कुछ ऐसा उत्पन्न करेगा जो लक्ष्य पर निष्पादित हो सकता है, जिसमें [[उच्च स्तरीय प्रोग्रामिंग भाषा]], कोडांतरक भाषा, वस्तु सम्मलित है। फ़ाइल या मशीन संहिता भी है।
* स्टेज 1: बूटस्ट्रैप कंपाइलर तैयार किया जाता है। यह कंपाइलर अपने स्रोत को एक प्रोग्राम में अनुवाद करने के लिए पर्याप्त है जिसे लक्षित मशीन पर निष्पादित किया जा सकता है। इस बिंदु पर, बूटस्ट्रैप कंपाइलर द्वारा परिभाषित भाषा का उपयोग करके आगे का विकास किया जाता है, और चरण 2 शुरू होता है।
* चरण 1: बूटस्ट्रैप संकलक तैयार किया जाता है। यह संकलक अपने स्रोत को प्रोग्राम में अनुवाद करने के लिए पर्याप्त है जिसे लक्षित मशीन पर निष्पादित किया जा सकता है। इस बिंदु पर बूटस्ट्रैप संकलक द्वारा परिभाषित भाषा का उपयोग करके आगे का विकास किया जाता है और चरण 2 प्रारंभ होता है।
* स्टेज 2: बूटस्ट्रैप कंपाइलर द्वारा एक पूर्ण कंपाइलर तैयार किया जाता है। यह आमतौर पर आवश्यकतानुसार चरणों में किया जाता है, उदा। भाषा के संस्करण X के लिए संकलक, संस्करण X+1 से सुविधाओं को संकलित करने में सक्षम होगा, लेकिन वह संकलक वास्तव में उन सुविधाओं का उपयोग नहीं करता है। एक बार इस कंपाइलर का परीक्षण हो जाने के बाद और खुद को संकलित कर सकता है, अब संस्करण X + 1 सुविधाओं का उपयोग कंपाइलर के बाद के रिलीज द्वारा किया जा सकता है।
* चरण 2: बूटस्ट्रैप संकलक द्वारा पूर्ण संकलक तैयार किया जाता है। यह सामान्यतः आवश्यकतानुसार चरणों में किया जाता है। उदाहरण, भाषा के संस्करण X के लिए संकलक, संस्करण X+1 से सुविधाओं को संकलित करने में सक्षम होगा, किन्तु वह संकलक वास्तव में उन सुविधाओं का उपयोग नहीं करता है। बार इस संकलक का परीक्षण हो जाने के बाद और स्वयं को संकलित कर सकता है, अब संस्करण X + 1 सुविधाओं का उपयोग संकलक के बाद के रिलीज द्वारा किया जा सकता है।
* स्टेज 3: एक फुल कंपाइलर स्टेज 2 फुल कंपाइलर द्वारा तैयार किया जाता है। यदि अधिक सुविधाओं को जोड़ा जाना है, तो बूटस्ट्रैप कंपाइलर की जगह वर्तमान चरण 3 पूर्ण संकलक के साथ, चरण 2 पर काम फिर से शुरू होता है।
* चरण 3: पूर्ण संकलक चरण 2 पूर्ण संकलक द्वारा तैयार किया जाता है। यदि अधिक सुविधाओं को जोड़ा जाना है, तो बूटस्ट्रैप संकलक की जगह वर्तमान चरण 3 पूर्ण संकलक के साथ, चरण 2 पर कार्य फिर से प्रारंभ होता है।


दो चरणों के आउटपुट की तुलना करने के लिए पूर्ण संकलक दो बार बनाया गया है। यदि वे भिन्न हैं, तो या तो बूटस्ट्रैप या पूर्ण संकलक में एक बग है।<ref name=gcc/>
दो चरणों के आउटपुट की तुलना करने के लिए पूर्ण संकलक दो बार बनाया गया है। यदि वे भिन्न हैं, तो बूटस्ट्रैप पूर्ण संकलक में दोष है।<ref name=gcc/>




== लाभ ==
== लाभ ==
कंपाइलर को बूटस्ट्रैप करने के निम्नलिखित फायदे हैं:<ref>Compilers and Compiler Generators: An Introduction With C++.  Patrick D. Terry 1997. International Thomson Computer Press. {{ISBN|1-85032-298-8}}</ref><ref name="terry">"Compiler Construction and Bootstrapping" by P.D.Terry 2000. [http://www.oopweb.com/Compilers/Documents/Compilers/Volume/cha03s.htm HTML] {{webarchive|url=https://web.archive.org/web/20091123154911/http://www.oopweb.com/Compilers/Documents/Compilers/Volume/cha03s.htm |date=2009-11-23 }}. [http://webster.cs.ucr.edu/AsmTools/RollYourOwn/CompilerBook/CHAP03.PDF PDF]  {{webarchive|url=https://web.archive.org/web/20101214135219/http://webster.cs.ucr.edu/AsmTools/RollYourOwn/CompilerBook/CHAP03.PDF |date=December 14, 2010 }}.</ref>
संकलक को बूटस्ट्रैप करने के निम्नलिखित लाभ हैं।<ref>Compilers and Compiler Generators: An Introduction With C++.  Patrick D. Terry 1997. International Thomson Computer Press. {{ISBN|1-85032-298-8}}</ref><ref name="terry">"Compiler Construction and Bootstrapping" by P.D.Terry 2000. [http://www.oopweb.com/Compilers/Documents/Compilers/Volume/cha03s.htm HTML] {{webarchive|url=https://web.archive.org/web/20091123154911/http://www.oopweb.com/Compilers/Documents/Compilers/Volume/cha03s.htm |date=2009-11-23 }}. [http://webster.cs.ucr.edu/AsmTools/RollYourOwn/CompilerBook/CHAP03.PDF PDF]  {{webarchive|url=https://web.archive.org/web/20101214135219/http://webster.cs.ucr.edu/AsmTools/RollYourOwn/CompilerBook/CHAP03.PDF |date=December 14, 2010 }}.</ref>
* यह संकलित की जा रही भाषा का एक गैर-तुच्छ परीक्षण है, और यह अपने कुत्ते के भोजन को खाने का एक रूप है।
* यह संकलित की जा रही भाषा का -तुच्छ परीक्षण है और यह अपने कुत्ते के भोजन को खाने का रूप है।
* कंपाइलर डेवलपर्स और बग रिपोर्टर्स को केवल संकलित की जा रही भाषा जानने की जरूरत है।
* संकलक डेवलपर्स और दोष संवाददाताओं को केवल संकलित की जा रही भाषा जानने की आवश्यकता है।
* संकलित की जा रही उच्च-स्तरीय भाषा में संकलक विकास किया जा सकता है।
* संकलित की जा रही उच्च-स्तरीय भाषा में संकलक विकास किया जा सकता है।
* कंपाइलर के बैक-एंड में सुधार न केवल सामान्य-उद्देश्य वाले कार्यक्रमों में बल्कि स्वयं कंपाइलर में भी सुधार करता है।
* संकलक के बैक-एंड में सुधार न केवल सामान्य-उद्देश्य वाले कार्यक्रमों में जबकि स्वयं संकलक में भी सुधार करता है।
* यह एक व्यापक स्थिरता जाँच है क्योंकि इसे अपने स्वयं के ऑब्जेक्ट कोड को पुन: पेश करने में सक्षम होना चाहिए।
* यह व्यापक स्थिरता जाँच है, क्योंकि इसे अपने स्वयं के वस्तु संहिता को पुन: प्रस्तुत करने में सक्षम होना चाहिए।


ध्यान दें कि इनमें से कुछ बिंदु मानते हैं कि भाषा [[रनटाइम सिस्टम]] भी उसी भाषा में लिखा गया है।
ध्यान दें कि इनमें से कुछ बिंदु मानते हैं कि भाषा [[रनटाइम सिस्टम|क्रम प्रणाली]] भी उसी भाषा में लिखा गया है।


== तरीके ==
== विधियाँ ==
यदि किसी को भाषा X में लिखी गई भाषा X के लिए एक कंपाइलर को संकलित करने की आवश्यकता है, तो यह मुद्दा है कि पहले कंपाइलर को कैसे संकलित किया जा सकता है। अभ्यास में उपयोग की जाने वाली विभिन्न विधियों में शामिल हैं:
यदि किसी को भाषा X में लिखी गई भाषा X के लिए संकलक को संकलित करने की आवश्यकता है, तो यह विवाद है कि पहले संकलक को कैसे संकलित किया जा सकता है। अभ्यास में उपयोग की जाने वाली विभिन्न विधियों में सम्मलित हैं।


* भाषा X के लिए भाषा Y में एक [[दुभाषिया (कंप्यूटिंग)]] या कंपाइलर को लागू करना। [[निकोलस विर्थ]] ने बताया कि उन्होंने [[फोरट्रान]] में पहला [[पास्कल प्रोग्रामिंग भाषा]] कंपाइलर लिखा था।<ref>Niklaus Wirth. 2021. 50 years of Pascal. Commun. ACM 64, 3 (March 2021), 39–41. DOI:https://doi.org/10.1145/3447525</ref>
* भाषा X के लिए भाषा Y में [[दुभाषिया (कंप्यूटिंग)]] संकलक को लागू करना। [[निकोलस विर्थ]] ने बताया कि उन्होंने [[फोरट्रान]] में पहला [[पास्कल (प्रोग्रामिंग भाषा)|पास्कल प्रोग्रामिंग भाषा]] संकलक लिखा था।<ref>Niklaus Wirth. 2021. 50 years of Pascal. Commun. ACM 64, 3 (March 2021), 39–41. DOI:https://doi.org/10.1145/3447525</ref>
* X के लिए एक अन्य दुभाषिया या संकलक पहले से ही दूसरी भाषा Y में लिखा जा चुका है; इस प्रकार योजना (प्रोग्रामिंग भाषा) को अक्सर बूटस्ट्रैप किया जाता है।
* X के लिए अन्य दुभाषिया या संकलक पहले से ही दूसरी भाषा Y में लिखा जा चुका है, इस प्रकार योजना प्रोग्रामिंग भाषा को अधिकांशतः बूटस्ट्रैप किया जाता है।
* कंपाइलर के पहले के संस्करण X के एक सबसेट में लिखे गए थे जिसके लिए कुछ अन्य कंपाइलर मौजूद थे; इस प्रकार जावा (प्रोग्रामिंग भाषा), [[हास्केल (प्रोग्रामिंग भाषा)]] के कुछ सुपरसेट, और शुरुआती [[फ़्री पास्कल]] कंपाइलर बूटस्ट्रैप किए गए हैं।
* संकलक के पहले के संस्करण X के -उप-समूचय में लिखे गए थे जिसके लिए कुछ अन्य संकलक उपस्तिथ थे, इस प्रकार जावा प्रोग्रामिंग भाषा, [[हास्केल|हैस्कल (प्रोग्रामिंग भाषा)]] के कुछ सुपरसेट और प्रारंभिक [[फ़्री पास्कल|मुक्त पास्कल]] संकलक बूटस्ट्रैप किए गए हैं।
* गैर-मानक भाषा एक्सटेंशन या वैकल्पिक भाषा सुविधाओं का समर्थन करने वाला एक कंपाइलर उन एक्सटेंशन और सुविधाओं का उपयोग किए बिना लिखा जा सकता है, ताकि इसे उसी आधार भाषा का समर्थन करने वाले दूसरे कंपाइलर के साथ संकलित किया जा सके, लेकिन एक्सटेंशन और सुविधाओं का एक अलग सेट। [[C++]] कंपाइलर [[बजना]] के मुख्य भाग C++ के एक सबसेट में लिखे गए थे जिन्हें [[g++]] और [[Microsoft Visual C++]] दोनों द्वारा संकलित किया जा सकता है। कुछ GCC एक्सटेंशन के साथ उन्नत सुविधाएँ लिखी गई हैं।
* -मानक भाषा विस्तार वैकल्पिक भाषा सुविधाओं का समर्थन करने वाला संकलक उन विस्तार और सुविधाओं का उपयोग किए बिना लिखा जा सकता है, जिससे इसे उसी आधार भाषा का समर्थन करने वाले दूसरे संकलक के साथ संकलित किया जा सके, किन्तु विस्तार और सुविधाओं का अलग समूह हैं। [[C++|सी++]] संकलक [[बजना|झनकना]] के मुख्य भाग [[सी++]] के -उप-समूचय में लिखे गए थे जिन्हें [[g++|जी++]] और [[Microsoft Visual C++|माइक्रोसॉफ्ट विजुअल सी++]] दोनों द्वारा संकलित किया जा सकता है। कुछ जीसीसी विस्तार के साथ उन्नत सुविधाएँ लिखी गई हैं।
* एक्स के लिए कंपाइलर किसी अन्य आर्किटेक्चर से क्रॉस-संकलन है जहां एक्स के लिए एक कंपाइलर मौजूद है; इस प्रकार सी (प्रोग्रामिंग भाषा) के लिए कंपाइलर आमतौर पर अन्य प्लेटफॉर्म पर पोर्ट किए जाते हैं। प्रारंभिक बूटस्ट्रैप के बाद फ्री पास्कल के लिए भी यही तरीका इस्तेमाल किया जाता है।
* एक्स के लिए संकलक किसी अन्य आर्किटेक्चर से क्रमादेश-संकलन है, जहां एक्स के लिए संकलक उपस्तिथ है। इस प्रकार सी प्रोग्रामिंग भाषा के लिए संकलक सामान्यतः अन्य प्लेटफॉर्म पर पोर्ट किए जाते हैं। प्रारंभिक बूटस्ट्रैप के बाद मुक्त पास्कल के लिए भी यही विधि उपयोग किया जाता है।
* एक्स में कंपाइलर लिखना; फिर इसे स्रोत से हाथ से संकलित करना (संभवतः एक गैर-अनुकूलित तरीके से) और अनुकूलित कंपाइलर प्राप्त करने के लिए कोड पर चल रहा है। [[डोनाल्ड नुथ]] ने इसका इस्तेमाल अपने [[WEB]] [[साक्षर प्रोग्रामिंग]] सिस्टम के लिए किया।
* एक्स में संकलक लिखना, फिर इसे स्रोत से हाथ से संकलित करना। संभवतः -अनुकूलित विधियाँ और अनुकूलित संकलक प्राप्त करने के लिए संहिता पर चल रहा है। [[डोनाल्ड नुथ]] ने इसका उपयोग अपने [[WEB|वेब]] [[साक्षर प्रोग्रामिंग]] प्रणाली के लिए किया।


स्रोत कोड में कंपाइलर्स को वितरित करने के तरीकों में कंपाइलर का एक पोर्टेबल [[बाईटकोड]] संस्करण प्रदान करना शामिल है, ताकि कंपाइलर को अपने साथ संकलित करने की प्रक्रिया को बूटस्ट्रैप किया जा सके। टी-आरेख इन संकलक बूटस्ट्रैप तकनीकों को समझाने के लिए उपयोग किया जाने वाला एक संकेतन है।<ref name="terry"/>कुछ मामलों में, एक सिस्टम पर चलने वाले एक जटिल कंपाइलर को प्राप्त करने का सबसे सुविधाजनक तरीका जिसमें बहुत कम या कोई सॉफ़्टवेयर नहीं है, इसमें कभी अधिक परिष्कृत असेंबलरों और कंपाइलर्स की एक श्रृंखला शामिल होती है।<ref>
स्रोत संहिता में संकलनकर्ता को वितरित करने के विधियाँ में संकलक का सुवाहय़ [[बाईटकोड|बाईटसंहिता]] संस्करण प्रदान करना सम्मलित है, जिससे संकलक को अपने साथ संकलित करने की प्रक्रिया को बूटस्ट्रैप किया जा सके। टी-आरेख इन संकलक बूटस्ट्रैप प्रविधिों को समझाने के लिए उपयोग किया जाने वाला संकेतन है।<ref name="terry"/>कुछ स्थितियों में, प्रणाली पर चलने वाले जटिल संकलक को प्राप्त करने का सबसे सुविधाजनक विधि जिसमें बहुत कम कोई सॉफ़्टवेयर नहीं है। इसमें कभी अधिक परिष्कृत संहिताांतरकों और संकलनकर्ता की श्रृंखला सम्मलित होती है।<ref>
[http://homepage.ntlworld.com/edmund.grimley-evans/bcompiler.html "Bootstrapping a simple compiler from nothing"] {{webarchive |url=https://web.archive.org/web/20100303235322/http://homepage.ntlworld.com/edmund.grimley-evans/bcompiler.html |date=March 3, 2010 }}
[http://homepage.ntlworld.com/edmund.grimley-evans/bcompiler.html "Bootstrapping a simple compiler from nothing"] {{webarchive |url=https://web.archive.org/web/20100303235322/http://homepage.ntlworld.com/edmund.grimley-evans/bcompiler.html |date=March 3, 2010 }}
by Edmund GRIMLEY EVANS 2001</ref>
by Edmund GRIMLEY EVANS 2001</ref>
Line 40: Line 38:


== इतिहास ==
== इतिहास ==
{{Main|History of compiler construction}}
{{Main|संकलक निर्माण का इतिहास}}
असेंबलर खुद को बूटस्ट्रैप करने वाले पहले भाषा उपकरण थे।
संहिताांतरक स्वयं को बूटस्ट्रैप करने वाले पहले भाषा उपकरण थे।


ऐसा बूटस्ट्रैप प्रदान करने वाली पहली उच्च-स्तरीय भाषा 1958 में [[NELIAC]] थी। ऐसा करने वाली पहली व्यापक रूप से इस्तेमाल की जाने वाली भाषाएं 1961 में [[बरोज़ B5000]] अल्गोल और 1962 में [[लिस्प प्रोग्रामिंग भाषा]] थीं।
ऐसा बूटस्ट्रैप प्रदान करने वाली पहली उच्च-स्तरीय भाषा 1958 में [[NELIAC|नेलियाक]] थी। ऐसा करने वाली पहली व्यापक रूप से उपयोग की जाने वाली भाषाएं 1961 में [[बरोज़ B5000|बरोज़ बी5000]] अल्गोल और 1962 में [[लिस्प प्रोग्रामिंग भाषा]] थीं।


हार्ट और लेविन ने 1962 में एमआईटी में एलआईएसपी में एक एलआईएसपी कंपाइलर लिखा, एक मौजूदा एलआईएसपी दुभाषिया के अंदर इसका परीक्षण किया। एक बार जब उन्होंने कंपाइलर को उस बिंदु तक सुधार लिया था जहां वह अपने स्वयं के स्रोत कोड को संकलित कर सकता था, तो यह स्व-होस्टिंग था।<ref name="LEVIN"/>
हार्ट और लेविन ने 1962 में एमआईटी में एलआईएसपी में एलआईएसपी संकलक लिखा, उपस्तिथा एलआईएसपी दुभाषिया के अंदर इसका परीक्षण किया। बार जब उन्होंने संकलक को उस बिंदु तक सुधार लिया था जहां वह अपने स्वयं के स्रोत संहिता को संकलित कर सकता था, तो यह स्व-संकलन था।<ref name="LEVIN"/>


{{blockquote|The compiler as it exists on the standard compiler tape is a machine language program that was obtained by having the [[S-expression]] definition of the compiler work on itself through the interpreter.|AI Memo 39<ref name="LEVIN">{{Cite web| title=AI Memo 39-The new compiler| author=Tim Hart and Mike Levin| url=ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-039.pdf| archive-url=https://web.archive.org/web/20201213195043/ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-039.pdf| url-status=dead| archive-date=2020-12-13| accessdate=2008-05-23}}</ref>}}
{{blockquote|संकलक जैसा कि यह मानक संकलक टेप पर उपस्तिथ है, एक मशीनी भाषा का प्रोग्राम है, जिसे इंटरप्रेटर के माध्यम से कंपाइलर की [[एस-अभिव्यक्ति]] परिभाषा द्वारा प्राप्त किया गया था।|एआई मेमो 39<ref name="LEVIN">{{साइट वेब| शीर्षक = एआई मेमो 39-नया संकलक | लेखक = टिम हार्ट और माइक लेविन | url=ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-039.pdf| संग्रह-url=https://web.archive.org/web/20201213195043/ftp://publications.ai.mit.edu/ai-publications/pdf/AIM-039.pdf| यूआरएल-स्थिति = मृत | संग्रह-तारीख=2020-12-13| एक्सेसडेट=2008-05-23}}</ref>}}
यह तकनीक तभी संभव है जब एक दुभाषिया पहले से ही उसी भाषा के लिए मौजूद हो जिसे संकलित किया जाना है। यह इनपुट के रूप में अपने आप में एक प्रोग्राम चलाने की धारणा से सीधे उधार लेता है, जिसका उपयोग [[सैद्धांतिक कंप्यूटर विज्ञान]] में विभिन्न प्रमाणों में भी किया जाता है, जैसे कि सबूत की भिन्नता कि हॉल्टिंग समस्या अनिर्णीत है जो राइस के प्रमेय का उपयोग करती है।
 
यह प्रविधि तभी संभव है जब दुभाषिया पहले से ही उसी भाषा के लिए उपस्तिथ हो, जिसे संकलित किया जाना है। यह इनपुट के रूप में अपने आप में प्रोग्राम चलाने की धारणा से सीधे उधार लेता है, जिसका उपयोग [[सैद्धांतिक कंप्यूटर विज्ञान]] में विभिन्न प्रमाणों में भी किया जाता है। जैसे कि प्रमाण की भिन्नता कि हॉल्टिंग समस्या अनिर्णीत है जो राइस के प्रमेय का उपयोग करती है।


== वर्तमान प्रयास ==
== वर्तमान प्रयास ==
[[भरोसे का भरोसा]] और बाइनरी ट्रस्टवर्थनेस के खिलाफ विभिन्न हमलों के संबंध में सुरक्षा चिंताओं के कारण, कई परियोजनाएं न केवल स्रोत से बूटस्ट्रैपिंग के प्रयास को कम करने के लिए काम कर रही हैं बल्कि सभी को उस स्रोत और निष्पादन योग्य अनुरूप को सत्यापित करने की अनुमति भी दे रही हैं। इनमें बूटस्ट्रैपेबल बिल्ड प्रोजेक्ट शामिल है<ref>{{Cite web|url=https://bootstrappable.org/|title=Bootstrappable builds|website=bootstrappable.org}}</ref> और प्रतिलिपि प्रस्तुत करने योग्य परियोजना बनाता है।<ref>{{Cite web|url=https://reproducible-builds.org/|title=Reproducible Builds — a set of software development practices that create an independently-verifiable path from source to binary code|website=reproducible-builds.org}}</ref>
[[भरोसे का भरोसा|भरोसेमंद का आक्रमण]] और द्विआधारी विश्वसनीयता के खिलाफ विभिन्न आक्रमण के संबंध में सुरक्षा चिंताओं के कारण, कई परियोजनाएं न केवल स्रोत से बूटस्ट्रैपिंग के प्रयास को कम करने के लिए कार्य कर रही हैं। जबकि, सभी को उस स्रोत और निष्पादन योग्य अनुरूप को सत्यापित करने की अनुमति भी दे रही हैं। इनमें बूटस्ट्रैपेबल निर्माण प्रोजेक्ट सम्मलित है<ref>{{Cite web|url=https://bootstrappable.org/|title=Bootstrappable builds|website=bootstrappable.org}}</ref> और प्रतिलिपि प्रस्तुत करने योग्य परियोजना बनाता है।<ref>{{Cite web|url=https://reproducible-builds.org/|title=Reproducible Builds — a set of software development practices that create an independently-verifiable path from source to binary code|website=reproducible-builds.org}}</ref>




== यह भी देखें ==
== यह भी देखें ==
* सेल्फ-होस्टिंग (संकलक)|सेल्फ-होस्टिंग
* स्वयं संकलन संकलक
* आत्म दुभाषिया
* आत्म दुभाषिया
* अप्रत्यक्ष आत्म-संशोधन
* अप्रत्यक्ष आत्म-संशोधन
Line 64: Line 63:
<references/>
<references/>


{{DEFAULTSORT:Bootstrapping (Compilers)}}[[Category: संकलनकर्ता]] [[Category: संकलक निर्माण]] [[Category: संकलक सिद्धांत]]
{{DEFAULTSORT:Bootstrapping (Compilers)}}
 
 


[[Category: Machine Translated Page]]
[[Category:Articles with hatnote templates targeting a nonexistent page|Bootstrapping (Compilers)]]
[[Category:Created On 17/02/2023]]
[[Category:CS1 English-language sources (en)]]
[[Category:Created On 17/02/2023|Bootstrapping (Compilers)]]
[[Category:Lua-based templates|Bootstrapping (Compilers)]]
[[Category:Machine Translated Page|Bootstrapping (Compilers)]]
[[Category:Pages with script errors|Bootstrapping (Compilers)]]
[[Category:Short description with empty Wikidata description|Bootstrapping (Compilers)]]
[[Category:Templates Vigyan Ready|Bootstrapping (Compilers)]]
[[Category:Templates that add a tracking category|Bootstrapping (Compilers)]]
[[Category:Templates that generate short descriptions|Bootstrapping (Compilers)]]
[[Category:Templates using TemplateData|Bootstrapping (Compilers)]]
[[Category:Webarchive template wayback links]]
[[Category:संकलक निर्माण|Bootstrapping (Compilers)]]
[[Category:संकलक सिद्धांत|Bootstrapping (Compilers)]]
[[Category:संकलनकर्ता|Bootstrapping (Compilers)]]

Latest revision as of 16:26, 11 March 2023

कंप्यूटर विज्ञान में, बूटस्ट्रैपिंग एक स्वयं संकलन संकलक बनाने की प्रविधि है अर्थात, संकलक कोडांतरक जो स्रोत प्रोग्रामिंग भाषा में लिखा गया है जिसे वह संकलित करना चाहता है। संकलक का प्रारंभिक कोर संस्करण "बूटस्ट्रैप संकलक" अलग भाषा में उत्पन्न होता है, जो कोडांतरक भाषा हो सकती है। भाषा के इस न्यूनतम उपसमुच्चय का उपयोग करके संकलक के क्रमिक विस्तारित संस्करण विकसित किए गए हैं। स्वयं संकलन संकलक को संकलित करने की समस्या को संकलक रचना में मुर्गी या अंडा की समस्या कहा गया है और बूटस्ट्रैपिंग इस समस्या का समाधान है।[1][2]आधारभूत, ऐल्गॉल, सी प्रोग्रामिंग भाषा, सी शार्प प्रोग्रामिंग भाषा सी, डी प्रोग्रामिंग भाषा, पास्कल (प्रोग्रामिंग भाषा), आईपीएल/आई, हैस्कल, मोडुला के लिए संकलक सहित कई प्रोग्रामिंग भाषा के लिए कई संकलक बूटस्ट्रैप्ड हैं। -2, बेसिक, एल्गोल, सी, सी#, डी, पास्कल, पीएल/आई, हास्केल, मोडुला-2, ओबेरॉन(प्रोग्रामिंग भाषा), ओकैमल, सामान्य लिस्प, स्कीम(प्रोग्रामिंग भाषा), गो(प्रोग्रामिंग भाषा), जावा(प्रोग्रामिंग भाषा), एलिक्सिर, रस्ट(प्रोग्रामिंग भाषा), पायथन(प्रोग्रामिंग भाषा), स्काला(प्रोग्रामिंग भाषा), निम(प्रोग्रामिंग भाषा), एफिल(प्रोग्रामिंग भाषा), टाइपस्क्रिप्ट, वाला(प्रोग्रामिंग भाषा) , ज़िग(प्रोग्रामिंग भाषा) और बहुत कुछ है।

प्रक्रिया

विशिष्ट बूटस्ट्रैप प्रक्रिया तीन या चार चरणों में कार्य करती है।[3][4][5]

  • चरण 0: बूटस्ट्रैप संकलक के साथ कार्य करने के लिए वातावरण तैयार करना। यहीं पर बूटस्ट्रैप संकलक की स्रोत भाषा और आउटपुट भाषा को चुना जाता है। संहिता मशीन के स्थितियों में जहां किसी भी भाषा के लिए कोई संकलक उपस्तिथ नहीं है स्रोत और आउटपुट को द्विआधारी मशीन संहिता के रूप में लिखा जाता है। लक्ष्य के अतिरिक्त किसी अन्य मशीन पर क्रमादेश संकलक द्वारा बनाया जा सकता है। अन्यथा, बूटस्ट्रैप संकलक को प्रोग्रामिंग भाषाओं में से में लिखा जाना है जो लक्ष्य मशीन पर उपस्तिथ है। वह संकलक कुछ ऐसा उत्पन्न करेगा जो लक्ष्य पर निष्पादित हो सकता है, जिसमें उच्च स्तरीय प्रोग्रामिंग भाषा, कोडांतरक भाषा, वस्तु सम्मलित है। फ़ाइल या मशीन संहिता भी है।
  • चरण 1: बूटस्ट्रैप संकलक तैयार किया जाता है। यह संकलक अपने स्रोत को प्रोग्राम में अनुवाद करने के लिए पर्याप्त है जिसे लक्षित मशीन पर निष्पादित किया जा सकता है। इस बिंदु पर बूटस्ट्रैप संकलक द्वारा परिभाषित भाषा का उपयोग करके आगे का विकास किया जाता है और चरण 2 प्रारंभ होता है।
  • चरण 2: बूटस्ट्रैप संकलक द्वारा पूर्ण संकलक तैयार किया जाता है। यह सामान्यतः आवश्यकतानुसार चरणों में किया जाता है। उदाहरण, भाषा के संस्करण X के लिए संकलक, संस्करण X+1 से सुविधाओं को संकलित करने में सक्षम होगा, किन्तु वह संकलक वास्तव में उन सुविधाओं का उपयोग नहीं करता है। बार इस संकलक का परीक्षण हो जाने के बाद और स्वयं को संकलित कर सकता है, अब संस्करण X + 1 सुविधाओं का उपयोग संकलक के बाद के रिलीज द्वारा किया जा सकता है।
  • चरण 3: पूर्ण संकलक चरण 2 पूर्ण संकलक द्वारा तैयार किया जाता है। यदि अधिक सुविधाओं को जोड़ा जाना है, तो बूटस्ट्रैप संकलक की जगह वर्तमान चरण 3 पूर्ण संकलक के साथ, चरण 2 पर कार्य फिर से प्रारंभ होता है।

दो चरणों के आउटपुट की तुलना करने के लिए पूर्ण संकलक दो बार बनाया गया है। यदि वे भिन्न हैं, तो बूटस्ट्रैप पूर्ण संकलक में दोष है।[3]


लाभ

संकलक को बूटस्ट्रैप करने के निम्नलिखित लाभ हैं।[6][7]

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

ध्यान दें कि इनमें से कुछ बिंदु मानते हैं कि भाषा क्रम प्रणाली भी उसी भाषा में लिखा गया है।

विधियाँ

यदि किसी को भाषा X में लिखी गई भाषा X के लिए संकलक को संकलित करने की आवश्यकता है, तो यह विवाद है कि पहले संकलक को कैसे संकलित किया जा सकता है। अभ्यास में उपयोग की जाने वाली विभिन्न विधियों में सम्मलित हैं।

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

स्रोत संहिता में संकलनकर्ता को वितरित करने के विधियाँ में संकलक का सुवाहय़ बाईटसंहिता संस्करण प्रदान करना सम्मलित है, जिससे संकलक को अपने साथ संकलित करने की प्रक्रिया को बूटस्ट्रैप किया जा सके। टी-आरेख इन संकलक बूटस्ट्रैप प्रविधिों को समझाने के लिए उपयोग किया जाने वाला संकेतन है।[7]कुछ स्थितियों में, प्रणाली पर चलने वाले जटिल संकलक को प्राप्त करने का सबसे सुविधाजनक विधि जिसमें बहुत कम कोई सॉफ़्टवेयर नहीं है। इसमें कभी अधिक परिष्कृत संहिताांतरकों और संकलनकर्ता की श्रृंखला सम्मलित होती है।[9]


इतिहास

संहिताांतरक स्वयं को बूटस्ट्रैप करने वाले पहले भाषा उपकरण थे।

ऐसा बूटस्ट्रैप प्रदान करने वाली पहली उच्च-स्तरीय भाषा 1958 में नेलियाक थी। ऐसा करने वाली पहली व्यापक रूप से उपयोग की जाने वाली भाषाएं 1961 में बरोज़ बी5000 अल्गोल और 1962 में लिस्प प्रोग्रामिंग भाषा थीं।

हार्ट और लेविन ने 1962 में एमआईटी में एलआईएसपी में एलआईएसपी संकलक लिखा, उपस्तिथा एलआईएसपी दुभाषिया के अंदर इसका परीक्षण किया। बार जब उन्होंने संकलक को उस बिंदु तक सुधार लिया था जहां वह अपने स्वयं के स्रोत संहिता को संकलित कर सकता था, तो यह स्व-संकलन था।[10]

संकलक जैसा कि यह मानक संकलक टेप पर उपस्तिथ है, एक मशीनी भाषा का प्रोग्राम है, जिसे इंटरप्रेटर के माध्यम से कंपाइलर की एस-अभिव्यक्ति परिभाषा द्वारा प्राप्त किया गया था।

— एआई मेमो 39[10]

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

वर्तमान प्रयास

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


यह भी देखें

संदर्भ

  1. Reynolds, John H. (December 2003). "Bootstrapping a self-compiling compiler from machine X to machine Y". CCSC: Eastern Conference. Journal of Computing Sciences in Colleges. 19 (2): 175–181. The idea of a compiler written in the language it compiles stirs up the old 'chicken-or-the-egg' conundrum: Where does the first one come from?
  2. Glück, Robert (2012). "Bootstrapping compiler generators from partial evaluators". In Clarke, Edmund; Virbitskaite, Irina; Voronkov, Andrei (eds.). Perspectives of Systems Informatics: 8th International Andrei Ershov Memorial Conference, PSI 2011, Novosibirsk, Russia, June 27 – July 1, 2011, Revised Selected Papers. Lecture Notes in Computer Science. Vol. 7162. Springer. pp. 125–141. doi:10.1007/978-3-642-29709-0_13. Getting started presents the chicken-and-egg problem familiar from compiler construction: one needs a compiler to bootstrap a compiler, and bootstrapping compiler generators is no exception.
  3. 3.0 3.1 "Installing GCC: Building". GNU Project - Free Software Foundation (FSF).
  4. "rust-lang/rust: bootstrap". GitHub (in English).
  5. "Advanced Build Configurations — LLVM 10 documentation". llvm.org.
  6. Compilers and Compiler Generators: An Introduction With C++. Patrick D. Terry 1997. International Thomson Computer Press. ISBN 1-85032-298-8
  7. 7.0 7.1 "Compiler Construction and Bootstrapping" by P.D.Terry 2000. HTML Archived 2009-11-23 at the Wayback Machine. PDF Archived December 14, 2010, at the Wayback Machine.
  8. Niklaus Wirth. 2021. 50 years of Pascal. Commun. ACM 64, 3 (March 2021), 39–41. DOI:https://doi.org/10.1145/3447525
  9. "Bootstrapping a simple compiler from nothing" Archived March 3, 2010, at the Wayback Machine by Edmund GRIMLEY EVANS 2001
  10. 10.0 10.1 Template:साइट वेब
  11. "Bootstrappable builds". bootstrappable.org.
  12. "Reproducible Builds — a set of software development practices that create an independently-verifiable path from source to binary code". reproducible-builds.org.