स्व-होस्टिंग (संकलक)

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

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

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

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

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

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

"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." यह तकनीक आमतौर पर केवल तभी व्यावहारिक होती है जब एक दुभाषिया पहले से ही उसी भाषा के लिए मौजूद होता है जिसे संकलित किया जाना है; हालांकि संभव है, यह एक कंपाइलर को मानवीय रूप से संकलित करने के लिए बेहद असामान्य है। अवधारणा सीधे से उधार लेती है और एक इनपुट के रूप में स्वयं पर एक कार्यक्रम चलाने की व्यापक धारणा का एक उदाहरण है, सैद्धांतिक कंप्यूटर विज्ञान में विभिन्न प्रमाणों में भी उपयोग किया जाता है, जैसे प्रमाण है कि हॉल्टिंग समस्या अनिर्णीत है।

उदाहरण
केन थॉम्पसन ने 1968 में GE-600 श्रृंखला | GE-635 पर कार्यक्रम लिखकर और संकलित करके और उन्हें परीक्षण के लिए PDP-7 तक ले जाकर यूनिक्स पर विकास शुरू किया। आरंभिक यूनिक्स कर्नेल, एक कमांड दुभाषिया, एक संपादक, एक असेंबलर और कुछ उपयोगिताओं के पूरा होने के बाद, यूनिक्स ऑपरेटिंग सिस्टम स्वयं-होस्टिंग था - पीडीपी-7 पर ही प्रोग्राम लिखे और परीक्षण किए जा सकते थे। डगलस मैक्लॉयय ने टीएमजी (भाषा) (एक संकलक-संकलक) को टीएमजी में कागज के एक टुकड़े पर लिखा और अपने कागज के टुकड़े को अपने कागज के टुकड़े को देने का फैसला किया, खुद गणना कर रहे थे, इस प्रकार एक टीएमजी कंपाइलर को विधानसभा भाषा में संकलित किया, जिसे उन्होंने केन थॉम्पसन के PDP-7 पर टाइप और असेंबल किया गया। GNU सिस्टम का विकास काफी हद तक GNU C कंपाइलर (GNU सी प्रोग्रामिंग भाषा कंपाइलर) और GNU Emacs (एक लोकप्रिय संपादक) पर निर्भर करता है, जिससे [[जीएनयू परियोजना]] के लिए मुफ्त सॉफ्टवेयर का स्व-निहित, अनुरक्षित और निरंतर विकास संभव हो जाता है।

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

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

• Ada

• ALGOL (Burroughs B5000)

• BASIC

• BCPL

• C

• C++ (Visual C++, clang, gcc 4.8)

• C# (Microsoft Roslyn, Mono)

• ClojureScript

• CoffeeScript

• Crystal

• Curry

• D

• Dart

• Delphi

• Dylan

• Eiffel

• Elixir

• F#

• FASM

• Factor

• Forth

• Gambas

• Go

• Haskell

• Idris

• Java

• Kotlin

• Lisp (Common Lisp)

• LiveScript

• Mercury

• Nemerle

• Nim

• Oberon

• Object Pascal (Free Pascal)

• OCaml

• Pascal (Free Pascal)

• Pyret

• Python (PyPy)

• Raku (Rakudo)

• Scala

• Scheme

• Smalltalk

• Standard ML (MLton)

• Tcl

• TMG

• TypeScript

• Vala

• Virgil

• Visual Basic .NET (Microsoft Roslyn, Mono)

यह भी देखें

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