स्व-होस्टिंग (संकलक): Difference between revisions
No edit summary |
No edit summary |
||
(5 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{Short description|Software that can produce new versions of itself}} | {{Short description|Software that can produce new versions of itself}} | ||
[[कंप्यूटर प्रोग्राम|कंप्यूटर प्रोग्रामिंग]] में, स्व-होस्टिंग [[toolchain|टूलचेन]] या [[ऑपरेटिंग सिस्टम]] के भाग के रूप में एक कंप्यूटर प्रोग्राम का उपयोग होता है जो उसी प्रोग्राम के नवीन संस्करण बनाता है - उदाहरण के लिए, एक [[संकलक]] जो अपने स्वयं के स्रोत कोड को संकलित कर सकता है। स्व-होस्टिंग [[सॉफ़्टवेयर]] व्यक्तिगत कंप्यूटर और बड़े सिस्टम पर सामान्य है। अन्य प्रोग्राम जो सामान्यतः स्व-होस्टिंग होते हैं उनमें [[कर्नेल (कंप्यूटर विज्ञान)|कर्नेल(कंप्यूटर विज्ञान)]] एस, [[असेंबली भाषा असेंबलर]], [[कमांड-लाइन दुभाषिया]] और [[संशोधन नियंत्रण]] सम्मिलित हैं। | |||
== ऑपरेटिंग सिस्टम == | == ऑपरेटिंग सिस्टम == | ||
ऑपरेटिंग सिस्टम स्व-होस्ट होता है जब ऑपरेटिंग सिस्टम बनाने के लिए टूलचेन उस ओएस पर चलता है। उदाहरण के लिए, विंडोज़ चलाने वाले कंप्यूटर पर विंडोज़ बनाया जा सकता है। | |||
ऑपरेटिंग सिस्टम स्व-होस्ट होता है जब ऑपरेटिंग सिस्टम बनाने के लिए टूलचेन उस ओएस पर चलता है। उदाहरण के लिए, विंडोज़ चलाने वाले कंप्यूटर पर विंडोज़ बनाया जा सकता है। | |||
यद्यपि, ऑपरेटिंग सिस्टम स्व-होस्टेड के रूप में प्रारंभ नहीं होते हैं। | यद्यपि, ऑपरेटिंग सिस्टम स्व-होस्टेड के रूप में प्रारंभ नहीं होते हैं। नवीन कंप्यूटर या ऑपरेटिंग सिस्टम के लिए विकसित करते समय, आपको डेवलपमेंट सॉफ़्टवेयर चलाने के लिए एक सिस्टम की आवश्यकता होती है, परन्तु ऑपरेटिंग सिस्टम को लिखने के लिए आपको डेवलपमेंट सॉफ़्टवेयर की आवश्यकता होती है। इसे [[बूटस्ट्रैपिंग]] समस्या या अधिक सामान्य रूप से चिकन या अंडे की दुविधा कहा जाता है। | ||
इस समस्या का हल [[क्रॉस कंपाइलर|क्रॉस संकलक]](या असेंबली भाषा के साथ कार्य करते समय क्रॉस असेंबलर) है। एक क्रॉस संकलक आपको अलग मशीन या ऑपरेटिंग सिस्टम के लिए [[सॉफ्टवेयर डेवलपमेंट]] सॉफ़्टवेयर के लिए कंप्यूटर का उपयोग करने की अनुमति देता है, जिससे उस मशीन के लिए एक ऑपरेटिंग सिस्टम बनाना संभव हो जाता है जिसके लिए कोई अभी तक स्थित नहीं है। एक बार लिखे जाने के बाद, सॉफ़्टवेयर को सामान्य साधनों का उपयोग करके लक्ष्य प्रणाली में तैनात किया जा सकता है: एक [[EPROM|ईपीरोम]], [[फ्लॉपी डिस्क]], [[फ्लैश मेमोरी]](जैसे USB थंब ड्राइव), या [[JTAG|जेटीजी]] | इस समस्या का हल [[क्रॉस कंपाइलर|क्रॉस संकलक]](या असेंबली भाषा के साथ कार्य करते समय क्रॉस असेंबलर) है। एक क्रॉस संकलक आपको अलग मशीन या ऑपरेटिंग सिस्टम के लिए [[सॉफ्टवेयर डेवलपमेंट]] सॉफ़्टवेयर के लिए कंप्यूटर का उपयोग करने की अनुमति देता है, जिससे उस मशीन के लिए एक ऑपरेटिंग सिस्टम बनाना संभव हो जाता है जिसके लिए कोई अभी तक स्थित नहीं है। एक बार लिखे जाने के बाद, सॉफ़्टवेयर को सामान्य साधनों का उपयोग करके लक्ष्य प्रणाली में तैनात किया जा सकता है: एक [[EPROM|ईपीरोम]], [[फ्लॉपी डिस्क]], [[फ्लैश मेमोरी]] (जैसे USB थंब ड्राइव), या [[JTAG|जेटीजी]] उपकरण था। यह गेमिंग कंसोल या हैंडहेल्ड उपकरण जैसे सेल्युलर फोन या टैबलेट के लिए सॉफ़्टवेयर लिखने के लिए उपयोग की जाने वाली विधि के समान है, जो अपने स्वयं के विकास टूल को होस्ट नहीं करते हैं। | ||
एक बार जब सॉफ्टवेयर अपने स्वयं के कोड को संकलित करने के लिए पर्याप्त परिपक्व हो जाता है, तो क्रॉस-विकास निर्भरता समाप्त हो जाती है। इस बिंदु पर, एक ऑपरेटिंग सिस्टम को स्व-होस्टेड कहा जाता है। | एक बार जब सॉफ्टवेयर अपने स्वयं के कोड को संकलित करने के लिए पर्याप्त परिपक्व हो जाता है, तो क्रॉस-विकास निर्भरता समाप्त हो जाती है। इस बिंदु पर, एक ऑपरेटिंग सिस्टम को स्व-होस्टेड कहा जाता है। | ||
Line 17: | Line 15: | ||
संकलक या दुभाषियों का उपयोग करने वाले सॉफ़्टवेयर विकास को स्वयं होस्ट किया जा सकता है जब संकलक स्वयं को संकलित करने में सक्षम हो।<ref name="heaton">{{cite web |last1=Heaton |first1=Robert |title=What is a self-hosting compiler? |url=https://robertheaton.com/2017/10/24/what-is-a-self-hosting-compiler/ |website=robertheaton.com/}}</ref> | संकलक या दुभाषियों का उपयोग करने वाले सॉफ़्टवेयर विकास को स्वयं होस्ट किया जा सकता है जब संकलक स्वयं को संकलित करने में सक्षम हो।<ref name="heaton">{{cite web |last1=Heaton |first1=Robert |title=What is a self-hosting compiler? |url=https://robertheaton.com/2017/10/24/what-is-a-self-hosting-compiler/ |website=robertheaton.com/}}</ref> | ||
चूंकि स्व-होस्ट किए गए संकलक ऑपरेटिंग सिस्टम के समान बूटस्ट्रैप समस्याओं से ग्रस्त हैं, एक | चूंकि स्व-होस्ट किए गए संकलक ऑपरेटिंग सिस्टम के समान बूटस्ट्रैप समस्याओं से ग्रस्त हैं, एक नवीन प्रोग्रामिंग भाषा के लिए एक संकलक को वर्तमान भाषा में लिखा जाना चाहिए। इसलिए विकासक संकलक के पूर्व संस्करण को बनाने के लिए असेंबली भाषा, C/C++, या यहां तक कि पायथन या लुआ जैसी पटकथा भाषा जैसी किसी चीज का उपयोग कर सकता है। एक बार जब भाषा पर्याप्त रूप से परिपक्व हो जाती है, तो संकलक का विकास संकलक की मूल भाषा में स्थानांतरित हो सकता है, जिससे संकलक स्वयं का निर्माण कर सकता है। | ||
== इतिहास == | == इतिहास == | ||
Line 24: | Line 22: | ||
1962 में एमआईटी में हार्ट और लेविन द्वारा [[लिस्प प्रोग्रामिंग भाषा]] के लिए प्रथम स्व-होस्टिंग संकलक(असेंबलर्स को छोड़कर) लिखा गया था। उन्होंने लिस्प में एक लिस्प संकलक लिखा, एक वर्तमान लिस्प [[दुभाषिया (कंप्यूटिंग)|दुभाषिया(कंप्यूटिंग)]] के अंदर इसका परीक्षण किया। एक बार जब उन्होंने संकलक को उस बिंदु तक सुधार लिया था जहां वह अपने स्वयं के स्रोत कोड को संकलित कर सकता था, तो यह स्व-होस्टिंग था।<ref name="LEVIN"/> | 1962 में एमआईटी में हार्ट और लेविन द्वारा [[लिस्प प्रोग्रामिंग भाषा]] के लिए प्रथम स्व-होस्टिंग संकलक(असेंबलर्स को छोड़कर) लिखा गया था। उन्होंने लिस्प में एक लिस्प संकलक लिखा, एक वर्तमान लिस्प [[दुभाषिया (कंप्यूटिंग)|दुभाषिया(कंप्यूटिंग)]] के अंदर इसका परीक्षण किया। एक बार जब उन्होंने संकलक को उस बिंदु तक सुधार लिया था जहां वह अपने स्वयं के स्रोत कोड को संकलित कर सकता था, तो यह स्व-होस्टिंग था।<ref name="LEVIN"/> | ||
{{blockquote| | {{blockquote|संकलक जैसा कि यह मानक संकलक टेप पर स्थित है, एक मशीनी भाषा का प्रोग्राम है, जिसे इंटरप्रेटर के माध्यम से संकलक की [[एस-अभिव्यक्ति]] परिभाषा द्वारा प्राप्त किया गया था।|एआई मेमो 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 |access-date=2008-05-23}}</ref>}} | ||
यह तकनीक सामान्यतः मात्र तभी | यह तकनीक सामान्यतः मात्र तभी संभव होती है जब एक दुभाषिया पूर्व से ही उसी भाषा के लिए स्थित होता है जिसे संकलित किया जाना है; यद्यपि संभव है, यह एक संकलक को मानवीय रूप से संकलित करने के लिए अत्यंत असामान्य है।<ref name="TMG in TMG" /> अवधारणा सीधे से स्वीकृत करती है और एक निविष्टि के रूप में स्वयं पर प्रोग्राम चलाने की व्यापक धारणा का एक उदाहरण है, [[सैद्धांतिक कंप्यूटर विज्ञान]] में विभिन्न प्रमाणों में भी उपयोग किया जाता है, जैसे प्रमाण है कि सविरामतः समस्या अनिर्णीत है। | ||
== उदाहरण == | == उदाहरण == | ||
[[केन थॉम्पसन]] ने 1968 में जीई-600 श्रृंखला पर | [[केन थॉम्पसन]] ने 1968 में जीई-600 श्रृंखला पर प्रोग्राम लिखकर और संकलित करके और उन्हें परीक्षण के लिए पीडीपी-7 तक ले जाकर [[यूनिक्स]] पर विकास प्रारम्भ किया। आरंभिक यूनिक्स कर्नेल, एक [[कमांड दुभाषिया]], एक संपादक, एक असेंबलर और कुछ उपयोगिताओं के पूरा होने के बाद, यूनिक्स ऑपरेटिंग सिस्टम स्व-होस्टिंग था - [[पीडीपी-7]] पर ही प्रोग्राम लिखे और परीक्षण किए जा सकते थे।<ref>Dennis M. Ritchie. [https://www.bell-labs.com/usr/dmr/www/chist.html "The Development of the C Language"]. 1993.</ref> | ||
[[डगलस मैक्लॉयय]] ने [[टीएमजी (भाषा)|टीएमजी(भाषा)]](एक [[संकलक-संकलक]]) को टीएमजी में | [[डगलस मैक्लॉयय]] ने [[टीएमजी (भाषा)|टीएमजी(भाषा)]] (एक [[संकलक-संकलक]]) को टीएमजी में पृष्ठ के एक टुकड़े पर लिखा और अपने पृष्ठ के टुकड़े को देने का निर्णय किया, स्वयं गणना कर रहे थे, इस प्रकार एक टीएमजी संकलक को विधानसभा भाषा में संकलित किया, जिसे उन्होंने केन थॉम्पसन के पीडीपी-7 पर टाइप और असेंबल किया गया।<ref name="TMG in TMG">{{cite web |title=VCF East 2019 -- Brian Kernighan interviews Ken Thompson |author=Ken Thompson |website=[[YouTube]] |url=https://www.youtube.com/watch?v=EY6q5dv_B-o&t=2330 |access-date=2019-10-28}}</ref> | ||
जीएनयू सिस्टम का विकास व्यापक रूप से जीएनयू C संकलक(जीएनयू [[सी प्रोग्रामिंग भाषा]] संकलक) और जीएनयू [[Emacs]](एक लोकप्रिय संपादक) पर निर्भर करता है, जिससे | जीएनयू सिस्टम का विकास व्यापक रूप से जीएनयू C संकलक(जीएनयू [[सी प्रोग्रामिंग भाषा]] संकलक) और जीएनयू [[Emacs]](एक लोकप्रिय संपादक) पर निर्भर करता है, जिससे [[जीएनयू]] प्रोजेक्ट के लिए [[मुफ्त सॉफ्टवेयर|मुक्त सॉफ्टवेयर]] का स्व-निहित, अनुरक्षित और निरंतर विकास संभव हो जाता है। | ||
कई [[प्रोग्रामिंग भाषा]]ओं में स्व-होस्ट किए गए कार्यान्वयन हैं: संकलक जो एक ही भाषा में और उसके लिए दोनों हैं। इनमें से कुछ स्थितियों में, [[बूटस्ट्रैपिंग (संकलक)|बूटस्ट्रैपिंग(संकलक)]]संकलक) का उपयोग करके प्रारंभिक कार्यान्वयन विकसित किया गया था, अर्थात एक अन्य उच्च-स्तरीय भाषा, असेंबलर या [[मशीन कोड]] का उपयोग करना। | कई [[प्रोग्रामिंग भाषा]]ओं में स्व-होस्ट किए गए कार्यान्वयन हैं: संकलक जो एक ही भाषा में और उसके लिए दोनों हैं। इनमें से कुछ स्थितियों में, [[बूटस्ट्रैपिंग (संकलक)|बूटस्ट्रैपिंग(संकलक)]]संकलक) का उपयोग करके प्रारंभिक कार्यान्वयन विकसित किया गया था, अर्थात एक अन्य उच्च-स्तरीय भाषा, असेंबलर या [[मशीन कोड]] का उपयोग करना। | ||
== स्व-होस्टिंग संकलक् वाली भाषाओं की सूची == | == स्व-होस्टिंग संकलक् वाली भाषाओं की सूची == | ||
निम्नलिखित प्रोग्रामिंग भाषाओं में स्व-होस्टिंग संकलक हैं: | निम्नलिखित प्रोग्रामिंग भाषाओं में स्व-होस्टिंग संकलक हैं: | ||
{{columns-list|colwidth=30em| | {{columns-list|colwidth=30em|1=* [[एडा (प्रोग्रामिंग लैंग्वेज)|एडा]] | ||
* [[ | * [[अल्गोल]] ([[बरोज बी5000]]) | ||
* [[ | * [[बेसिक]]<ref>[http://www.andreadrian.de/tbng/index.html बेसिको कंपाइलर बूटस्ट्रैपिंग उदाहरण]</ref> | ||
* [[ | * [[बीसीपीएल]] | ||
* [[ | * [[सी (प्रोग्रामिंग भाषा)|सी]] | ||
* [[ | * [[सी++]] ([[विजुअल सी++]], [[क्लैंग]], [[जीएनयू सी कंपाइलर|जीसीसी]] 4.8) | ||
* [[ | * [[सी शार्प (प्रोग्रामिंग लैंग्वेज)|सी#]] ([[माइक्रोसॉफ्ट रोजलिन]], [[मोनो (सॉफ्टवेयर)|मोनो]]) | ||
* [[ | |||
* [[Clojure|ClojureScript]]<ref name=cljs>[https://swannodette.github.io/2015/07/29/clojurescript-17/ ClojureScript Next]</ref> | * [[Clojure|ClojureScript]]<ref name=cljs>[https://swannodette.github.io/2015/07/29/clojurescript-17/ ClojureScript Next]</ref> | ||
* [[ | * [[कॉफ़ीस्क्रिप्ट]] | ||
* [[ | * [[क्रिस्टल (प्रोग्रामिंग भाषा)|क्रिस्टल]] | ||
* [[ | * [[करी (प्रोग्रामिंग भाषा)|करी]] | ||
* [[ | * [[डी (प्रोग्रामिंग भाषा)|डी]] | ||
* [[ | * [[डार्ट (प्रोग्रामिंग भाषा)|डार्ट]] | ||
* [[ | * [[डेल्फी (प्रोग्रामिंग भाषा)|डेल्फी]] | ||
* [[ | * [[डायलन (प्रोग्रामिंग भाषा)|डायलन]] | ||
* [[ | * [[एफिल (प्रोग्रामिंग भाषा)|एफिल]] | ||
* [[ | * [[अमृत (प्रोग्रामिंग भाषा)|अमृत]] | ||
* [[ | * [[एफ शार्प (प्रोग्रामिंग लैंग्वेज)|एफ#]] | ||
* [[FASM]]<ref name="fasm">{{ | * [[FASM]]<ref name="fasm">{{साइट वेब |टाइटल=फ्लैट असेंबलर |url=https://flatassembler.net/download.php |access-date=7 जनवरी 2022 |quote=फ्लैट असेंबलर स्वयं-होस्टिंग है और पूरा स्रोत कोड शामिल है।}}</ref> | ||
* [[ | * [[फैक्टर (प्रोग्रामिंग लैंग्वेज)|फैक्टर]] | ||
* [[ | * [[फोर्थ (प्रोग्रामिंग भाषा)|फोर्थ]] | ||
* [[ | * [[गाम्बास]] | ||
* [[ | * [[जाओ (प्रोग्रामिंग भाषा)|जाओ]] | ||
* [[ | * [[हास्केल (प्रोग्रामिंग भाषा)|हास्केल]]<रेफरी नाम="हास्केल">{{वेब का हवाला दें|url=https://www.haskell.org/communities/05-2016/html/report.html#sect3 .4|शीर्षक = हास्केल समुदाय और गतिविधियां रिपोर्ट}}</ref> | ||
* [[ | * [[इदरीस (प्रोग्रामिंग भाषा)|इदरीस]] | ||
* [[ | * [[जावा (प्रोग्रामिंग भाषा)|जावा]] | ||
* [[ | * [[कोटलिन (प्रोग्रामिंग भाषा)|कोटलिन]] | ||
* [[ | * [[लिस्प (प्रोग्रामिंग लैंग्वेज)|लिस्प]] ([[कॉमन लिस्प]]) | ||
* [[ | * [[लाइवस्क्रिप्ट (प्रोग्रामिंग भाषा)|लाइवस्क्रिप्ट]] | ||
* [[ | * [[मरकरी (प्रोग्रामिंग लैंग्वेज)|मरकरी]] | ||
* [[ | * [[नेमर्ले]] | ||
* [[ | * [[निम (प्रोग्रामिंग भाषा)|निम]] | ||
* [[ | * [[ओबेरॉन (प्रोग्रामिंग भाषा)|ओबेरॉन]] | ||
* [[ | * [[ऑब्जेक्ट पास्कल]] ([[फ्री पास्कल]]) | ||
* [[ | * [[ओकैमल]] | ||
* [[ | * [[पास्कल (प्रोग्रामिंग भाषा)|पास्कल]] ([[फ्री पास्कल]]) | ||
* | * पायरेट<ref>https://www.pyret.org {{webarchive|url=https://web.archive.org/web/20180410020849/https://www.pyret.org/ |date=2018-04 -10}}</ref> | ||
* [[ | * [[पायथन (प्रोग्रामिंग भाषा)|पायथन]] ([[पाइपी]]) | ||
* [[ | * [[राकू (प्रोग्रामिंग भाषा)|राकू]] ([[राकुडो]]) | ||
* [[स्कैला (प्रोग्रामिंग भाषा)|स्कैला]] | |||
* [[योजना (प्रोग्रामिंग भाषा)|योजना]] | |||
* [[गपशप]] | |||
* [[मानक एमएल]] ([[एमएलटन]]) | |||
* [[टीसीएल]]<ref>{{साइट वेब |url=https://wiki.tcl.tk/12646 |title=टीसीएल में टीसीएल लागू करें |एक्सेसडेट=2017-09-19 |url-status=live |archiveurl =https://web.archive.org/web/20170604205050/http://wiki.tcl.tk/12646 |archivedate=2017-06-04 }}</ref> | |||
* [[टीएमजी (भाषा)|टीएमजी]] | |||
* [[टाइपस्क्रिप्ट]] | |||
* [[वाला (प्रोग्रामिंग भाषा) | वाला]] | |||
* वर्जिल<ref>{{साइट वेब |url=https://code.google.com/p/virgil/ |title=Google Code Archive - Google Code प्रोजेक्ट होस्टिंग के लिए दीर्घकालिक भंडारण |accessdate=2015-05-27 |url-status=live |archiveurl=https://web.archive.org/web/20141228130251/https://code.google.com/p/virgil/ |archivedate=2014-12-28 }}</ref > | |||
* [[विजुअल बेसिक .NET]] ([[माइक्रोसॉफ्ट रोजलिन]], [[मोनो (सॉफ्टवेयर)|मोनो]])}} | |||
Line 106: | Line 112: | ||
== संदर्भ == | == संदर्भ == | ||
{{Reflist}} | {{Reflist}} | ||
[[Category: | [[Category:Articles with hatnote templates targeting a nonexistent page]] | ||
[[Category:Created On 17/02/2023]] | [[Category:Created On 17/02/2023]] | ||
[[Category:Lua-based templates]] | |||
[[Category:Machine Translated Page]] | |||
[[Category:Multi-column templates]] | |||
[[Category:Pages using div col with small parameter]] | |||
[[Category:Pages with reference errors]] | |||
[[Category:Pages with script errors]] | |||
[[Category:Short description with empty Wikidata description]] | |||
[[Category:Template documentation pages|Short description/doc]] | |||
[[Category:Templates Vigyan Ready]] | |||
[[Category:Templates that add a tracking category]] | |||
[[Category:Templates that generate short descriptions]] | |||
[[Category:Templates using TemplateData]] | |||
[[Category:Templates using under-protected Lua modules]] | |||
[[Category:Webarchive template wayback links]] | |||
[[Category:Wikipedia fully protected templates|Div col]] | |||
[[Category:कंप्यूटर प्रोग्रामिंग]] | |||
[[Category:स्व-होस्टिंग सॉफ्टवेयर]] |
Latest revision as of 16:11, 2 March 2023
कंप्यूटर प्रोग्रामिंग में, स्व-होस्टिंग टूलचेन या ऑपरेटिंग सिस्टम के भाग के रूप में एक कंप्यूटर प्रोग्राम का उपयोग होता है जो उसी प्रोग्राम के नवीन संस्करण बनाता है - उदाहरण के लिए, एक संकलक जो अपने स्वयं के स्रोत कोड को संकलित कर सकता है। स्व-होस्टिंग सॉफ़्टवेयर व्यक्तिगत कंप्यूटर और बड़े सिस्टम पर सामान्य है। अन्य प्रोग्राम जो सामान्यतः स्व-होस्टिंग होते हैं उनमें कर्नेल(कंप्यूटर विज्ञान) एस, असेंबली भाषा असेंबलर, कमांड-लाइन दुभाषिया और संशोधन नियंत्रण सम्मिलित हैं।
ऑपरेटिंग सिस्टम
ऑपरेटिंग सिस्टम स्व-होस्ट होता है जब ऑपरेटिंग सिस्टम बनाने के लिए टूलचेन उस ओएस पर चलता है। उदाहरण के लिए, विंडोज़ चलाने वाले कंप्यूटर पर विंडोज़ बनाया जा सकता है।
यद्यपि, ऑपरेटिंग सिस्टम स्व-होस्टेड के रूप में प्रारंभ नहीं होते हैं। नवीन कंप्यूटर या ऑपरेटिंग सिस्टम के लिए विकसित करते समय, आपको डेवलपमेंट सॉफ़्टवेयर चलाने के लिए एक सिस्टम की आवश्यकता होती है, परन्तु ऑपरेटिंग सिस्टम को लिखने के लिए आपको डेवलपमेंट सॉफ़्टवेयर की आवश्यकता होती है। इसे बूटस्ट्रैपिंग समस्या या अधिक सामान्य रूप से चिकन या अंडे की दुविधा कहा जाता है।
इस समस्या का हल क्रॉस संकलक(या असेंबली भाषा के साथ कार्य करते समय क्रॉस असेंबलर) है। एक क्रॉस संकलक आपको अलग मशीन या ऑपरेटिंग सिस्टम के लिए सॉफ्टवेयर डेवलपमेंट सॉफ़्टवेयर के लिए कंप्यूटर का उपयोग करने की अनुमति देता है, जिससे उस मशीन के लिए एक ऑपरेटिंग सिस्टम बनाना संभव हो जाता है जिसके लिए कोई अभी तक स्थित नहीं है। एक बार लिखे जाने के बाद, सॉफ़्टवेयर को सामान्य साधनों का उपयोग करके लक्ष्य प्रणाली में तैनात किया जा सकता है: एक ईपीरोम, फ्लॉपी डिस्क, फ्लैश मेमोरी (जैसे USB थंब ड्राइव), या जेटीजी उपकरण था। यह गेमिंग कंसोल या हैंडहेल्ड उपकरण जैसे सेल्युलर फोन या टैबलेट के लिए सॉफ़्टवेयर लिखने के लिए उपयोग की जाने वाली विधि के समान है, जो अपने स्वयं के विकास टूल को होस्ट नहीं करते हैं।
एक बार जब सॉफ्टवेयर अपने स्वयं के कोड को संकलित करने के लिए पर्याप्त परिपक्व हो जाता है, तो क्रॉस-विकास निर्भरता समाप्त हो जाती है। इस बिंदु पर, एक ऑपरेटिंग सिस्टम को स्व-होस्टेड कहा जाता है।
संकलक
संकलक या दुभाषियों का उपयोग करने वाले सॉफ़्टवेयर विकास को स्वयं होस्ट किया जा सकता है जब संकलक स्वयं को संकलित करने में सक्षम हो।[1]
चूंकि स्व-होस्ट किए गए संकलक ऑपरेटिंग सिस्टम के समान बूटस्ट्रैप समस्याओं से ग्रस्त हैं, एक नवीन प्रोग्रामिंग भाषा के लिए एक संकलक को वर्तमान भाषा में लिखा जाना चाहिए। इसलिए विकासक संकलक के पूर्व संस्करण को बनाने के लिए असेंबली भाषा, C/C++, या यहां तक कि पायथन या लुआ जैसी पटकथा भाषा जैसी किसी चीज का उपयोग कर सकता है। एक बार जब भाषा पर्याप्त रूप से परिपक्व हो जाती है, तो संकलक का विकास संकलक की मूल भाषा में स्थानांतरित हो सकता है, जिससे संकलक स्वयं का निर्माण कर सकता है।
इतिहास
1962 में एमआईटी में हार्ट और लेविन द्वारा लिस्प प्रोग्रामिंग भाषा के लिए प्रथम स्व-होस्टिंग संकलक(असेंबलर्स को छोड़कर) लिखा गया था। उन्होंने लिस्प में एक लिस्प संकलक लिखा, एक वर्तमान लिस्प दुभाषिया(कंप्यूटिंग) के अंदर इसका परीक्षण किया। एक बार जब उन्होंने संकलक को उस बिंदु तक सुधार लिया था जहां वह अपने स्वयं के स्रोत कोड को संकलित कर सकता था, तो यह स्व-होस्टिंग था।[2]
संकलक जैसा कि यह मानक संकलक टेप पर स्थित है, एक मशीनी भाषा का प्रोग्राम है, जिसे इंटरप्रेटर के माध्यम से संकलक की एस-अभिव्यक्ति परिभाषा द्वारा प्राप्त किया गया था।
— एआई मेमो 39[2]
यह तकनीक सामान्यतः मात्र तभी संभव होती है जब एक दुभाषिया पूर्व से ही उसी भाषा के लिए स्थित होता है जिसे संकलित किया जाना है; यद्यपि संभव है, यह एक संकलक को मानवीय रूप से संकलित करने के लिए अत्यंत असामान्य है।[3] अवधारणा सीधे से स्वीकृत करती है और एक निविष्टि के रूप में स्वयं पर प्रोग्राम चलाने की व्यापक धारणा का एक उदाहरण है, सैद्धांतिक कंप्यूटर विज्ञान में विभिन्न प्रमाणों में भी उपयोग किया जाता है, जैसे प्रमाण है कि सविरामतः समस्या अनिर्णीत है।
उदाहरण
केन थॉम्पसन ने 1968 में जीई-600 श्रृंखला पर प्रोग्राम लिखकर और संकलित करके और उन्हें परीक्षण के लिए पीडीपी-7 तक ले जाकर यूनिक्स पर विकास प्रारम्भ किया। आरंभिक यूनिक्स कर्नेल, एक कमांड दुभाषिया, एक संपादक, एक असेंबलर और कुछ उपयोगिताओं के पूरा होने के बाद, यूनिक्स ऑपरेटिंग सिस्टम स्व-होस्टिंग था - पीडीपी-7 पर ही प्रोग्राम लिखे और परीक्षण किए जा सकते थे।[4]
डगलस मैक्लॉयय ने टीएमजी(भाषा) (एक संकलक-संकलक) को टीएमजी में पृष्ठ के एक टुकड़े पर लिखा और अपने पृष्ठ के टुकड़े को देने का निर्णय किया, स्वयं गणना कर रहे थे, इस प्रकार एक टीएमजी संकलक को विधानसभा भाषा में संकलित किया, जिसे उन्होंने केन थॉम्पसन के पीडीपी-7 पर टाइप और असेंबल किया गया।[3]
जीएनयू सिस्टम का विकास व्यापक रूप से जीएनयू C संकलक(जीएनयू सी प्रोग्रामिंग भाषा संकलक) और जीएनयू Emacs(एक लोकप्रिय संपादक) पर निर्भर करता है, जिससे जीएनयू प्रोजेक्ट के लिए मुक्त सॉफ्टवेयर का स्व-निहित, अनुरक्षित और निरंतर विकास संभव हो जाता है।
कई प्रोग्रामिंग भाषाओं में स्व-होस्ट किए गए कार्यान्वयन हैं: संकलक जो एक ही भाषा में और उसके लिए दोनों हैं। इनमें से कुछ स्थितियों में, बूटस्ट्रैपिंग(संकलक)संकलक) का उपयोग करके प्रारंभिक कार्यान्वयन विकसित किया गया था, अर्थात एक अन्य उच्च-स्तरीय भाषा, असेंबलर या मशीन कोड का उपयोग करना।
स्व-होस्टिंग संकलक् वाली भाषाओं की सूची
निम्नलिखित प्रोग्रामिंग भाषाओं में स्व-होस्टिंग संकलक हैं:
- एडा
- अल्गोल (बरोज बी5000)
- बेसिक[5]
- बीसीपीएल
- सी
- सी++ (विजुअल सी++, क्लैंग, जीसीसी 4.8)
- सी# (माइक्रोसॉफ्ट रोजलिन, मोनो)
- ClojureScript[6]
- कॉफ़ीस्क्रिप्ट
- क्रिस्टल
- करी
- डी
- डार्ट
- डेल्फी
- डायलन
- एफिल
- अमृत
- एफ#
- FASM[7]
- फैक्टर
- फोर्थ
- गाम्बास
- जाओ
- हास्केल<रेफरी नाम="हास्केल">Template:वेब का हवाला दें</ref>
- इदरीस
- जावा
- कोटलिन
- लिस्प (कॉमन लिस्प)
- लाइवस्क्रिप्ट
- मरकरी
- नेमर्ले
- निम
- ओबेरॉन
- ऑब्जेक्ट पास्कल (फ्री पास्कल)
- ओकैमल
- पास्कल (फ्री पास्कल)
- पायरेट[8]
- पायथन (पाइपी)
- राकू (राकुडो)
यह भी देखें
- बूटस्ट्रैपिंग(संकलक)
- संकलक-संकलक
- क्रॉस संकलक
- डॉगफूडिंग
- फुतामुरा प्रक्षेपण
- स्व दुभाषिया
- स्व-संदर्भ
- अप्रत्यक्ष स्व-संशोधन
संदर्भ
- ↑ Heaton, Robert. "What is a self-hosting compiler?". robertheaton.com/.
- ↑ 2.0 2.1 Tim Hart and Mike Levin. "AI Memo 39-The new compiler" (PDF). Archived from the original (PDF) on 2020-12-13. Retrieved 2008-05-23.
- ↑ 3.0 3.1 Ken Thompson. "VCF East 2019 -- Brian Kernighan interviews Ken Thompson". YouTube. Retrieved 2019-10-28.
- ↑ Dennis M. Ritchie. "The Development of the C Language". 1993.
- ↑ बेसिको कंपाइलर बूटस्ट्रैपिंग उदाहरण
- ↑ ClojureScript Next
- ↑ Template:साइट वेब
- ↑ https://www.pyret.org Archived 2018-04-10 at the Wayback Machine
- ↑ Template:साइट वेब
- ↑ Template:साइट वेब