स्व-होस्टिंग (संकलक): 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
 
(7 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}}
{{More citations needed|date=April 2010}}
[[कंप्यूटर प्रोग्राम|कंप्यूटर प्रोग्रामिंग]] में, स्व-होस्टिंग [[toolchain|टूलचेन]] या [[ऑपरेटिंग सिस्टम]] के भाग के रूप में एक कंप्यूटर प्रोग्राम का उपयोग होता है जो उसी प्रोग्राम के नवीन संस्करण बनाता है - उदाहरण के लिए, एक [[संकलक]] जो अपने स्वयं के स्रोत कोड को संकलित कर सकता है। स्व-होस्टिंग [[सॉफ़्टवेयर]] व्यक्तिगत कंप्यूटर और बड़े सिस्टम पर सामान्य है। अन्य प्रोग्राम जो सामान्यतः स्व-होस्टिंग होते हैं उनमें [[कर्नेल (कंप्यूटर विज्ञान)|कर्नेल(कंप्यूटर विज्ञान)]] एस, [[असेंबली भाषा असेंबलर]], [[कमांड-लाइन दुभाषिया]] और [[संशोधन नियंत्रण]] सम्मिलित हैं।
[[[[कंप्यूटर प्रोग्राम]]िंग]] में, सेल्फ-होस्टिंग एक कंप्यूटर प्रोग्राम का उपयोग [[toolchain]] या [[ऑपरेटिंग सिस्टम]] के हिस्से के रूप में होता है जो उसी प्रोग्राम के नए संस्करण बनाता है - उदाहरण के लिए, एक [[संकलक]] जो अपने स्वयं के स्रोत कोड को संकलित कर सकता है। स्व-होस्टिंग [[सॉफ़्टवेयर]] व्यक्तिगत कंप्यूटर और बड़े सिस्टम पर सामान्य है। अन्य प्रोग्राम जो आमतौर पर स्वयं-होस्टिंग होते हैं उनमें [[कर्नेल (कंप्यूटर विज्ञान)]] एस, [[असेंबली भाषा असेंबलर]], [[कमांड-लाइन दुभाषिया]] और [[संशोधन नियंत्रण]] शामिल हैं।


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


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


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


== संकलक ==
== संकलक ==


संकलक या दुभाषियों का उपयोग करने वाले सॉफ़्टवेयर विकास को स्वयं होस्ट किया जा सकता है जब संकलक स्वयं को संकलित करने में सक्षम हो।<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"/>


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


{{columns-list|colwidth=30em|
कई [[प्रोग्रामिंग भाषा]]ओं में स्व-होस्ट किए गए कार्यान्वयन हैं: संकलक जो एक ही भाषा में और उसके लिए दोनों हैं। इनमें से कुछ स्थितियों में, [[बूटस्ट्रैपिंग (संकलक)|बूटस्ट्रैपिंग(संकलक)]]संकलक) का उपयोग करके प्रारंभिक कार्यान्वयन विकसित किया गया था, अर्थात एक अन्य उच्च-स्तरीय भाषा, असेंबलर या [[मशीन कोड]] का उपयोग करना।
* [[Ada (programming language)|Ada]]
 
* [[ALGOL]] ([[Burroughs B5000]])
== स्व-होस्टिंग संकलक् वाली भाषाओं की सूची ==
* [[BASIC]]<ref>[http://www.andreadrian.de/tbng/index.html BASICO compiler bootstrapping example]</ref>
निम्नलिखित प्रोग्रामिंग भाषाओं में स्व-होस्टिंग संकलक हैं:
* [[BCPL]]
 
* [[C (programming language)|C]]
{{columns-list|colwidth=30em|1=* [[एडा (प्रोग्रामिंग लैंग्वेज)|एडा]]
* [[C++]] ([[Visual C++]], [[clang]], [[GNU C Compiler|gcc]] 4.8)
* [[अल्गोल]] ([[बरोज बी5000]])
* [[C Sharp (programming language)|C#]] ([[Microsoft Roslyn]], [[Mono (software)|Mono]])
* [[बेसिक]]<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>
* [[CoffeeScript]]
* [[कॉफ़ीस्क्रिप्ट]]
* [[Crystal (programming language)|Crystal]]
* [[क्रिस्टल (प्रोग्रामिंग भाषा)|क्रिस्टल]]
* [[Curry (programming language)|Curry]]
* [[करी (प्रोग्रामिंग भाषा)|करी]]
* [[D (programming language)|D]]
* [[डी (प्रोग्रामिंग भाषा)|डी]]
* [[Dart (programming language)|Dart]]
* [[डार्ट (प्रोग्रामिंग भाषा)|डार्ट]]
* [[Delphi (programming language)|Delphi]]
* [[डेल्फी (प्रोग्रामिंग भाषा)|डेल्फी]]
* [[Dylan (programming language)|Dylan]]
* [[डायलन (प्रोग्रामिंग भाषा)|डायलन]]
* [[Eiffel (programming language)|Eiffel]]
* [[एफिल (प्रोग्रामिंग भाषा)|एफिल]]
* [[Elixir (programming language)|Elixir]]
* [[अमृत (प्रोग्रामिंग भाषा)|अमृत]]
* [[F Sharp (programming language)|F#]]
* [[एफ शार्प (प्रोग्रामिंग लैंग्वेज)|एफ#]]
* [[FASM]]<ref name="fasm">{{cite web |title=flat assembler |url=https://flatassembler.net/download.php |access-date=7 January 2022 |quote=The flat assembler is self-hosting and the complete source code is included.}}</ref>
* [[FASM]]<ref name="fasm">{{साइट वेब |टाइटल=फ्लैट असेंबलर |url=https://flatassembler.net/download.php |access-date=7 जनवरी 2022 |quote=फ्लैट असेंबलर स्वयं-होस्टिंग है और पूरा स्रोत कोड शामिल है।}}</ref>
* [[Factor (programming language)|Factor]]
* [[फैक्टर (प्रोग्रामिंग लैंग्वेज)|फैक्टर]]
* [[Forth (programming language)|Forth]]
* [[फोर्थ (प्रोग्रामिंग भाषा)|फोर्थ]]
* [[Gambas]]
* [[गाम्बास]]
* [[Go (programming language)|Go]]
* [[जाओ (प्रोग्रामिंग भाषा)|जाओ]]
* [[Haskell (programming language)|Haskell]]<ref name="haskell">{{Cite web|url=https://www.haskell.org/communities/05-2016/html/report.html#sect3.4|title = Haskell Communities and Activities Report}}</ref>
* [[हास्केल (प्रोग्रामिंग भाषा)|हास्केल]]<रेफरी नाम="हास्केल">{{वेब का हवाला दें|url=https://www.haskell.org/communities/05-2016/html/report.html#sect3 .4|शीर्षक = हास्केल समुदाय और गतिविधियां रिपोर्ट}}</ref>
* [[Idris (programming language)|Idris]]
* [[इदरीस (प्रोग्रामिंग भाषा)|इदरीस]]
* [[Java (programming language)|Java]]
* [[जावा (प्रोग्रामिंग भाषा)|जावा]]
* [[Kotlin (programming language)|Kotlin]]
* [[कोटलिन (प्रोग्रामिंग भाषा)|कोटलिन]]
* [[Lisp (programming language)|Lisp]] ([[Common Lisp]])
* [[लिस्प (प्रोग्रामिंग लैंग्वेज)|लिस्प]] ([[कॉमन लिस्प]])
* [[LiveScript (programming language)|LiveScript]]
* [[लाइवस्क्रिप्ट (प्रोग्रामिंग भाषा)|लाइवस्क्रिप्ट]]
* [[Mercury (programming language)|Mercury]]
* [[मरकरी (प्रोग्रामिंग लैंग्वेज)|मरकरी]]
* [[Nemerle]]
* [[नेमर्ले]]
* [[Nim (programming language)|Nim]]
* [[निम (प्रोग्रामिंग भाषा)|निम]]
* [[Oberon (programming language)|Oberon]]
* [[ओबेरॉन (प्रोग्रामिंग भाषा)|ओबेरॉन]]
* [[Object Pascal]] ([[Free Pascal]])
* [[ऑब्जेक्ट पास्कल]] ([[फ्री पास्कल]])
* [[OCaml]]
* [[ओकैमल]]
* [[Pascal (programming language)|Pascal]] ([[Free Pascal]])
* [[पास्कल (प्रोग्रामिंग भाषा)|पास्कल]] ([[फ्री पास्कल]])
* Pyret<ref>https://www.pyret.org {{webarchive|url=https://web.archive.org/web/20180410020849/https://www.pyret.org/ |date=2018-04-10 }}</ref>
* पायरेट<ref>https://www.pyret.org {{webarchive|url=https://web.archive.org/web/20180410020849/https://www.pyret.org/ |date=2018-04 -10}}</ref>
* [[Python (programming language)|Python]] ([[PyPy]])
* [[पायथन (प्रोग्रामिंग भाषा)|पायथन]] ([[पाइपी]])
* [[Raku (programming language)|Raku]] ([[Rakudo]])
* [[राकू (प्रोग्रामिंग भाषा)|राकू]] ([[राकुडो]])
 
* [[स्कैला (प्रोग्रामिंग भाषा)|स्कैला]]
* [[योजना (प्रोग्रामिंग भाषा)|योजना]]
* [[गपशप]]
* [[मानक एमएल]] ([[एमएलटन]])
* [[टीसीएल]]<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]] ([[माइक्रोसॉफ्ट रोजलिन]], [[मोनो (सॉफ्टवेयर)|मोनो]])}}
 
 
 
 
 
 
 
 
 


* [[Scala (programming language)|Scala]]
* [[Scheme (programming language)|Scheme]]
* [[Smalltalk]]
* [[Standard ML]] ([[MLton]])
* [[Tcl]]<ref>{{cite web |url=https://wiki.tcl.tk/12646 |title=Implement TCL in TCL |accessdate=2017-09-19 |url-status=live |archiveurl=https://web.archive.org/web/20170604205050/http://wiki.tcl.tk/12646 |archivedate=2017-06-04 }}</ref>
* [[TMG (language)|TMG]]
* [[TypeScript]]
* [[Vala (programming language)|Vala]]
* Virgil<ref>{{cite web |url=https://code.google.com/p/virgil/ |title=Google Code Archive - Long-term storage for Google Code Project Hosting |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>
* [[Visual Basic .NET]] ([[Microsoft Roslyn]], [[Mono (software)|Mono]])
}}




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


== संदर्भ ==
== संदर्भ ==
{{Reflist}}
{{Reflist}}
[[Category: कंप्यूटर प्रोग्रामिंग]] [[Category: स्व-होस्टिंग सॉफ्टवेयर]]


[[Category: Machine Translated Page]]
[[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(एक लोकप्रिय संपादक) पर निर्भर करता है, जिससे जीएनयू प्रोजेक्ट के लिए मुक्त सॉफ्टवेयर का स्व-निहित, अनुरक्षित और निरंतर विकास संभव हो जाता है।

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

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

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







यह भी देखें

संदर्भ

  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. बेसिको कंपाइलर बूटस्ट्रैपिंग उदाहरण
  6. ClojureScript Next
  7. Template:साइट वेब
  8. https://www.pyret.org Archived 2018-04-10 at the Wayback Machine
  9. Template:साइट वेब
  10. Template:साइट वेब