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

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

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

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

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

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

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

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

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

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

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

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

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

जीएनयू सिस्टम का विकास व्यापक रूप से जीएनयू C संकलक(जीएनयू सी प्रोग्रामिंग भाषा संकलक) और जीएनयू 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)

यह भी देखें

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