स्व-होस्टिंग (संकलक): Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Software that can produce new versions of itself}} {{More citations needed|date=April 2010}} [[कंप्यूटर प्रोग्रामि...")
 
No edit summary
Line 1: Line 1:
{{Short description|Software that can produce new versions of itself}}
{{Short description|Software that can produce new versions of itself}}
{{More citations needed|date=April 2010}}
{{More citations needed|date=April 2010}}
[[[[कंप्यूटर प्रोग्राम]]िंग]] में, सेल्फ-होस्टिंग एक कंप्यूटर प्रोग्राम का उपयोग [[toolchain]] या [[ऑपरेटिंग सिस्टम]] के हिस्से के रूप में होता है जो उसी प्रोग्राम के नए संस्करण बनाता है - उदाहरण के लिए, एक [[संकलक]] जो अपने स्वयं के स्रोत कोड को संकलित कर सकता है। स्व-होस्टिंग [[सॉफ़्टवेयर]] व्यक्तिगत कंप्यूटर और बड़े सिस्टम पर सामान्य है। अन्य प्रोग्राम जो आमतौर पर स्वयं-होस्टिंग होते हैं उनमें [[कर्नेल (कंप्यूटर विज्ञान)]] एस, [[असेंबली भाषा असेंबलर]], [[कमांड-लाइन दुभाषिया]] और [[संशोधन नियंत्रण]] शामिल हैं।
[[[[कंप्यूटर प्रोग्राम|कंप्यूटर प्रोग्रामिंग]]]] में, स्व-होस्टिंग [[toolchain|टूलचेन]] या [[ऑपरेटिंग सिस्टम]] के भाग के रूप में एक कंप्यूटर प्रोग्राम का उपयोग होता है जो उसी प्रोग्राम के नवीन संस्करण बनाता है - उदाहरण के लिए, एक [[संकलक]] जो अपने स्वयं के स्रोत कोड को संकलित कर सकता है। स्व-होस्टिंग [[सॉफ़्टवेयर]] व्यक्तिगत कंप्यूटर और बड़े सिस्टम पर सामान्य है। अन्य प्रोग्राम जो सामान्यतः स्व-होस्टिंग होते हैं उनमें [[कर्नेल (कंप्यूटर विज्ञान)|कर्नेल(कंप्यूटर विज्ञान)]] एस, [[असेंबली भाषा असेंबलर]], [[कमांड-लाइन दुभाषिया]] और [[संशोधन नियंत्रण]] सम्मिलित हैं।


== ऑपरेटिंग सिस्टम ==
== ऑपरेटिंग सिस्टम ==
{{Tone|date=January 2023}}
{{Tone|date=January 2023}}
एक ऑपरेटिंग सिस्टम स्वयं-होस्ट होता है जब ऑपरेटिंग सिस्टम बनाने के लिए टूलचेन उस ओएस पर चलता है। उदाहरण के लिए, विंडोज़ चलाने वाले कंप्यूटर पर विंडोज़ बनाया जा सकता है।{{cn|date=August 2022}}
एक ऑपरेटिंग सिस्टम स्व-होस्ट होता है जब ऑपरेटिंग सिस्टम बनाने के लिए टूलचेन उस ओएस पर चलता है। उदाहरण के लिए, विंडोज़ चलाने वाले कंप्यूटर पर विंडोज़ बनाया जा सकता है।{{cn|date=August 2022}}
हालाँकि, ऑपरेटिंग सिस्टम स्व-होस्टेड के रूप में प्रारंभ नहीं होते हैं। एक नए कंप्यूटर या ऑपरेटिंग सिस्टम के लिए विकसित करते समय, आपको डेवलपमेंट सॉफ़्टवेयर चलाने के लिए एक सिस्टम की आवश्यकता होती है, लेकिन ऑपरेटिंग सिस्टम को लिखने के लिए आपको डेवलपमेंट सॉफ़्टवेयर की आवश्यकता होती है। इसे [[बूटस्ट्रैपिंग]] समस्या या अधिक सामान्य रूप से चिकन या अंडे की दुविधा कहा जाता है।


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


एक बार जब सॉफ्टवेयर अपने स्वयं के कोड को संकलित करने के लिए पर्याप्त परिपक्व हो जाता है, तो क्रॉस-डेवलपमेंट डिपेंडेंसी समाप्त हो जाती है। इस बिंदु पर, एक ऑपरेटिंग सिस्टम को स्व-होस्टेड कहा जाता है।
एक बार जब सॉफ्टवेयर अपने स्वयं के कोड को संकलित करने के लिए पर्याप्त परिपक्व हो जाता है, तो क्रॉस-डेवलपमेंट डिपेंडेंसी समाप्त हो जाती है। इस बिंदु पर, एक ऑपरेटिंग सिस्टम को स्व-होस्टेड कहा जाता है।
Line 15: Line 16:


संकलक या दुभाषियों का उपयोग करने वाले सॉफ़्टवेयर विकास को स्वयं होस्ट किया जा सकता है जब संकलक स्वयं को संकलित करने में सक्षम हो।<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++, या यहां तक ​​​​कि पायथन या लुआ जैसी स्क्रिप्टिंग लैंग्वेज जैसी किसी चीज का इस्तेमाल कर सकता है। एक बार जब भाषा पर्याप्त रूप से परिपक्व हो जाती है, तो संकलक का विकास संकलक की मूल भाषा में स्थानांतरित हो सकता है, जिससे संकलक स्वयं का निर्माण कर सकता है।
 
चूंकि स्व-होस्ट किए गए संकलक ऑपरेटिंग सिस्टम के समान बूटस्ट्रैप समस्याओं से ग्रस्त हैं, एक नई प्रोग्रामिंग भाषा के लिए एक संकलक को वर्तमान भाषा में लिखा जाना चाहिए। इसलिए डेवलपर संकलक के पूर्व संस्करण को बनाने के लिए असेंबली लैंग्वेज, C/C++, या यहां तक ​​​​कि पायथन या लुआ जैसी स्क्रिप्टिंग लैंग्वेज जैसी किसी चीज का उपयोग कर सकता है। एक बार जब भाषा पर्याप्त रूप से परिपक्व हो जाती है, तो संकलक का विकास संकलक की मूल भाषा में स्थानांतरित हो सकता है, जिससे संकलक स्वयं का निर्माण कर सकता है।


== इतिहास ==
== इतिहास ==
{{Main|History of compiler construction}}
{{Main|संकलक निर्माण का इतिहास}}
1962 में MIT में हार्ट और लेविन द्वारा [[लिस्प प्रोग्रामिंग भाषा]] के लिए पहला सेल्फ-होस्टिंग कंपाइलर (असेंबलर्स को छोड़कर) लिखा गया था। उन्होंने लिस्प में एक लिस्प कंपाइलर लिखा, एक मौजूदा लिस्प [[दुभाषिया (कंप्यूटिंग)]] के अंदर इसका परीक्षण किया। एक बार जब उन्होंने कंपाइलर को उस बिंदु तक सुधार लिया था जहां वह अपने स्वयं के स्रोत कोड को संकलित कर सकता था, तो यह स्व-होस्टिंग था।<ref name="LEVIN"/>
 
1962 में एमआईटी में हार्ट और लेविन द्वारा [[लिस्प प्रोग्रामिंग भाषा]] के लिए प्रथम स्व-होस्टिंग संकलक(असेंबलर्स को छोड़कर) लिखा गया था। उन्होंने लिस्प में एक लिस्प संकलक लिखा, एक वर्तमान लिस्प [[दुभाषिया (कंप्यूटिंग)|दुभाषिया(कंप्यूटिंग)]] के अंदर इसका परीक्षण किया। एक बार जब उन्होंने संकलक को उस बिंदु तक सुधार लिया था जहां वह अपने स्वयं के स्रोत कोड को संकलित कर सकता था, तो यह स्व-होस्टिंग था।<ref name="LEVIN"/>
 
{{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>}}


{{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 |access-date=2008-05-23}}</ref>}}
यह तकनीक सामान्यतः मात्र तभी व्यावहारिक होती है जब एक दुभाषिया पूर्व से ही उसी भाषा के लिए स्थित होता है जिसे संकलित किया जाना है; यद्यपि संभव है, यह एक संकलक को मानवीय रूप से संकलित करने के लिए अत्यंत असामान्य है।<ref name="TMG in TMG" /> अवधारणा सीधे से स्वीकृत करती है और एक निविष्टि के रूप में स्वयं पर एक कार्यक्रम चलाने की व्यापक धारणा का एक उदाहरण है, [[सैद्धांतिक कंप्यूटर विज्ञान]] में विभिन्न प्रमाणों में भी उपयोग किया जाता है, जैसे प्रमाण है कि सविरामतः समस्या अनिर्णीत है।
यह तकनीक आमतौर पर केवल तभी व्यावहारिक होती है जब एक दुभाषिया पहले से ही उसी भाषा के लिए मौजूद होता है जिसे संकलित किया जाना है; हालांकि संभव है, यह एक कंपाइलर को मानवीय रूप से संकलित करने के लिए बेहद असामान्य है।<ref name="TMG in TMG" />अवधारणा सीधे से उधार लेती है और एक इनपुट के रूप में स्वयं पर एक कार्यक्रम चलाने की व्यापक धारणा का एक उदाहरण है, [[सैद्धांतिक कंप्यूटर विज्ञान]] में विभिन्न प्रमाणों में भी उपयोग किया जाता है, जैसे प्रमाण है कि हॉल्टिंग समस्या अनिर्णीत है।


== उदाहरण ==
== उदाहरण ==
[[केन थॉम्पसन]] ने 1968 में GE-600 श्रृंखला | GE-635 पर कार्यक्रम लिखकर और संकलित करके और उन्हें परीक्षण के लिए PDP-7 तक ले जाकर [[यूनिक्स]] पर विकास शुरू किया। आरंभिक यूनिक्स कर्नेल, एक [[कमांड दुभाषिया]], एक संपादक, एक असेंबलर और कुछ उपयोगिताओं के पूरा होने के बाद, यूनिक्स ऑपरेटिंग सिस्टम स्वयं-होस्टिंग था - [[पीडीपी-7]] पर ही प्रोग्राम लिखे और परीक्षण किए जा सकते थे।<ref>Dennis M. Ritchie. [https://www.bell-labs.com/usr/dmr/www/chist.html "The Development of the C Language"]. 1993.</ref>
[[केन थॉम्पसन]] ने 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>
[[डगलस मैक्लॉयय]] ने [[टीएमजी (भाषा)]] (एक [[संकलक-संकलक]]) को टीएमजी में कागज के एक टुकड़े पर लिखा और अपने कागज के टुकड़े को अपने कागज के टुकड़े को देने का फैसला किया, खुद गणना कर रहे थे, इस प्रकार एक टीएमजी कंपाइलर को विधानसभा भाषा में संकलित किया, जिसे उन्होंने केन थॉम्पसन के PDP-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>
 
GNU सिस्टम का विकास काफी हद तक GNU C कंपाइलर (GNU [[सी प्रोग्रामिंग भाषा]] कंपाइलर) और GNU [[Emacs]] (एक लोकप्रिय संपादक) पर निर्भर करता है, जिससे [[[[जीएनयू]] परियोजना]] के लिए [[मुफ्त सॉफ्टवेयर]] का स्व-निहित, अनुरक्षित और निरंतर विकास संभव हो जाता है।
[[डगलस मैक्लॉयय]] ने [[टीएमजी (भाषा)|टीएमजी(भाषा)]](एक [[संकलक-संकलक]]) को टीएमजी में कागज के एक टुकड़े पर लिखा और अपने कागज के टुकड़े को देने का निर्णय किया, स्वयं गणना कर रहे थे, इस प्रकार एक टीएमजी संकलक को विधानसभा भाषा में संकलित किया, जिसे उन्होंने केन थॉम्पसन के पीडीपी-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]](एक लोकप्रिय संपादक) पर निर्भर करता है, जिससे [[[[जीएनयू]] प्रोजेक्ट]] के लिए [[मुफ्त सॉफ्टवेयर|मुक्त सॉफ्टवेयर]] का स्व-निहित, अनुरक्षित और निरंतर विकास संभव हो जाता है।


कई [[प्रोग्रामिंग भाषा]]ओं में स्व-होस्ट किए गए कार्यान्वयन हैं: कंपाइलर जो एक ही भाषा में और उसके लिए दोनों हैं।
कई [[प्रोग्रामिंग भाषा]]ओं में स्व-होस्ट किए गए कार्यान्वयन हैं: संकलक जो एक ही भाषा में और उसके लिए दोनों हैं। इनमें से कुछ स्थितियों में, [[बूटस्ट्रैपिंग (संकलक)|बूटस्ट्रैपिंग(संकलक)]]संकलक) का उपयोग करके प्रारंभिक कार्यान्वयन विकसित किया गया था, अर्थात एक अन्य उच्च-स्तरीय भाषा, असेंबलर या [[मशीन कोड]] का उपयोग करना।
इनमें से कुछ मामलों में, [[बूटस्ट्रैपिंग (संकलक)]]कंपाइलर) का उपयोग करके प्रारंभिक कार्यान्वयन विकसित किया गया था, अर्थात एक अन्य उच्च-स्तरीय भाषा, असेंबलर या [[मशीन कोड]] का उपयोग करना।


== स्व-होस्टिंग कंपाइलर्स वाली भाषाओं की सूची ==
== स्व-होस्टिंग संकलक् वाली भाषाओं की सूची ==
निम्नलिखित प्रोग्रामिंग भाषाओं में सेल्फ-होस्टिंग कंपाइलर हैं:{{citation needed|date=November 2018}}
निम्नलिखित प्रोग्रामिंग भाषाओं में स्व-होस्टिंग संकलक हैं:{{citation needed|date=November 2018}}


{{columns-list|colwidth=30em|
{{columns-list|colwidth=30em|
Line 90: Line 95:


== यह भी देखें ==
== यह भी देखें ==
* बूटस्ट्रैपिंग (संकलक)
* बूटस्ट्रैपिंग(संकलक)
* कंपाइलर-कंपाइलर
* संकलक-संकलक
* [[पार संकलक]]
* [[पार संकलक|क्रॉस संकलक]]
* [[डॉगफूडिंग]]
* [[डॉगफूडिंग]]
* [[फुतामुरा प्रक्षेपण]]
* [[फुतामुरा प्रक्षेपण]]
* आत्म दुभाषिया
* स्व दुभाषिया
* आत्म-संदर्भ
* स्व-संदर्भ
* अप्रत्यक्ष आत्म-संशोधन
* अप्रत्यक्ष स्व-संशोधन


== संदर्भ ==
== संदर्भ ==

Revision as of 11:19, 24 February 2023

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

ऑपरेटिंग सिस्टम

एक ऑपरेटिंग सिस्टम स्व-होस्ट होता है जब ऑपरेटिंग सिस्टम बनाने के लिए टूलचेन उस ओएस पर चलता है। उदाहरण के लिए, विंडोज़ चलाने वाले कंप्यूटर पर विंडोज़ बनाया जा सकता है।[citation needed]

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

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

एक बार जब सॉफ्टवेयर अपने स्वयं के कोड को संकलित करने के लिए पर्याप्त परिपक्व हो जाता है, तो क्रॉस-डेवलपमेंट डिपेंडेंसी समाप्त हो जाती है। इस बिंदु पर, एक ऑपरेटिंग सिस्टम को स्व-होस्टेड कहा जाता है।

संकलक

संकलक या दुभाषियों का उपयोग करने वाले सॉफ़्टवेयर विकास को स्वयं होस्ट किया जा सकता है जब संकलक स्वयं को संकलित करने में सक्षम हो।[1]

चूंकि स्व-होस्ट किए गए संकलक ऑपरेटिंग सिस्टम के समान बूटस्ट्रैप समस्याओं से ग्रस्त हैं, एक नई प्रोग्रामिंग भाषा के लिए एक संकलक को वर्तमान भाषा में लिखा जाना चाहिए। इसलिए डेवलपर संकलक के पूर्व संस्करण को बनाने के लिए असेंबली लैंग्वेज, C/C++, या यहां तक ​​​​कि पायथन या लुआ जैसी स्क्रिप्टिंग लैंग्वेज जैसी किसी चीज का उपयोग कर सकता है। एक बार जब भाषा पर्याप्त रूप से परिपक्व हो जाती है, तो संकलक का विकास संकलक की मूल भाषा में स्थानांतरित हो सकता है, जिससे संकलक स्वयं का निर्माण कर सकता है।

इतिहास

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

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

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

यह तकनीक सामान्यतः मात्र तभी व्यावहारिक होती है जब एक दुभाषिया पूर्व से ही उसी भाषा के लिए स्थित होता है जिसे संकलित किया जाना है; यद्यपि संभव है, यह एक संकलक को मानवीय रूप से संकलित करने के लिए अत्यंत असामान्य है।[3] अवधारणा सीधे से स्वीकृत करती है और एक निविष्टि के रूप में स्वयं पर एक कार्यक्रम चलाने की व्यापक धारणा का एक उदाहरण है, सैद्धांतिक कंप्यूटर विज्ञान में विभिन्न प्रमाणों में भी उपयोग किया जाता है, जैसे प्रमाण है कि सविरामतः समस्या अनिर्णीत है।

उदाहरण

केन थॉम्पसन ने 1968 में जीई-600 श्रृंखला पर कार्यक्रम लिखकर और संकलित करके और उन्हें परीक्षण के लिए पीडीपी-7 तक ले जाकर यूनिक्स पर विकास प्रारम्भ किया। आरंभिक यूनिक्स कर्नेल, एक कमांड दुभाषिया, एक संपादक, एक असेंबलर और कुछ उपयोगिताओं के पूरा होने के बाद, यूनिक्स ऑपरेटिंग सिस्टम स्व-होस्टिंग था - पीडीपी-7 पर ही प्रोग्राम लिखे और परीक्षण किए जा सकते थे।[4]

डगलस मैक्लॉयय ने टीएमजी(भाषा)(एक संकलक-संकलक) को टीएमजी में कागज के एक टुकड़े पर लिखा और अपने कागज के टुकड़े को देने का निर्णय किया, स्वयं गणना कर रहे थे, इस प्रकार एक टीएमजी संकलक को विधानसभा भाषा में संकलित किया, जिसे उन्होंने केन थॉम्पसन के पीडीपी-7 पर टाइप और असेंबल किया गया।[3]

जीएनयू सिस्टम का विकास व्यापक रूप से जीएनयू C संकलक(जीएनयू सी प्रोग्रामिंग भाषा संकलक) और जीएनयू Emacs(एक लोकप्रिय संपादक) पर निर्भर करता है, जिससे [[जीएनयू प्रोजेक्ट]] के लिए मुक्त सॉफ्टवेयर का स्व-निहित, अनुरक्षित और निरंतर विकास संभव हो जाता है।

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

स्व-होस्टिंग संकलक् वाली भाषाओं की सूची

निम्नलिखित प्रोग्रामिंग भाषाओं में स्व-होस्टिंग संकलक हैं:[citation needed]


यह भी देखें

संदर्भ

  1. Heaton, Robert. "What is a self-hosting compiler?". robertheaton.com/.
  2. 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. 3.0 3.1 Ken Thompson. "VCF East 2019 -- Brian Kernighan interviews Ken Thompson". YouTube. Retrieved 2019-10-28.
  4. Dennis M. Ritchie. "The Development of the C Language". 1993.
  5. BASICO compiler bootstrapping example
  6. ClojureScript Next
  7. "flat assembler". Retrieved 7 January 2022. The flat assembler is self-hosting and the complete source code is included.
  8. "Haskell Communities and Activities Report".
  9. https://www.pyret.org Archived 2018-04-10 at the Wayback Machine
  10. "Implement TCL in TCL". Archived from the original on 2017-06-04. Retrieved 2017-09-19.
  11. "Google Code Archive - Long-term storage for Google Code Project Hosting". Archived from the original on 2014-12-28. Retrieved 2015-05-27.