क्रॉस कंपाइलर: Difference between revisions
From Vigyanwiki
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
{{Short description|Cross-platform machine-code compiler}} | {{Short description|Cross-platform machine-code compiler}} | ||
{{Program execution}} | {{Program execution}} | ||
क्रॉस कंपाइलर एक कंपाइलर होता है, जो एक [[मंच (कंप्यूटिंग)|प्लेटफॉर्म (कंप्यूटिंग)]] के लिए [[निष्पादन]] योग्य कोड बनाने में सक्षम होता है, जिस पर कंपाइलर चलता है। उदाहरण के लिए, एक कंपाइलर जो एक [[निजी कंप्यूटर]] पर चलता है लेकिन कोड उत्पन्न करता है जो एंड्रॉइड ऑपरेटिंग प्रणाली [[स्मार्टफोन]] पर चलता है, यह एक क्रॉस कंपाइलर के रूप में होता है। | |||
एक | क्रॉस कंपाइलर, एक डेवलपमेंट होस्ट से एकाधिक प्लेटफॉर्म के लिए कोड को संकलित करने के लिए उपयोगी होते है। लक्ष्य प्लेटफार्म पर प्रत्यक्ष संकलन अपर्याप्त होता है, उदाहरण के लिए [[एम्बेडेड प्रणाली]] पर सीमित कंप्यूटिंग संसाधनों के साथ.उपयोगी होते है। | ||
क्रॉस कंपाइलर्स | क्रॉस कंपाइलर्स स्रोत से स्रोत [[संकलक|कंपाइलर]] के लिए भिन्न रूप में होते है। क्रॉस कंपाइलर, मशीन कोड के [[क्रॉस-प्लेटफॉर्म सॉफ्टवेयर|क्रॉस-प्लेटफ़ॉर्म सॉफ़्टवेयर]] उत्पादन के लिए होता है, जबकि स्रोत-से-स्रोत कंपाइलर, टेक्स्ट कोड में कोडिंग भाषा का दूसरी भाषा में अनुवाद करता है। दोनों [[प्रोग्रामिंग उपकरण]] हैं। | ||
== प्रयोग == | == प्रयोग == | ||
क्रॉस कंपाइलर का मौलिक उपयोग निर्माण वातावरण को लक्षित वातावरण से भिन्न करना है। यह कई स्थितियों में उपयोगी है | क्रॉस कंपाइलर का मौलिक उपयोग निर्माण वातावरण को लक्षित वातावरण से भिन्न करना है। यह कई स्थितियों में उपयोगी है | ||
* एम्बेडेड | * एम्बेडेड प्रणाली जहां डिवाइस में अत्यधिक सीमित संसाधन होते हैं। उदाहरण के लिए, एक माइक्रोवेव ओवन में अपने कीपैड और डोर सेंसर को पढ़ने, डिजिटल डिस्प्ले और स्पीकर को आउटपुट प्रदान करने और खाना पकाने के लिए माइक्रोवेव को नियंत्रित करने के लिए एक बहुत छोटा कंप्यूटर होगा। यह कंप्यूटर सामान्यतः एक कंपाइलर, फाइल सिस्टम, या विकास पर्यावरण चलाने के लिए पर्याप्त शक्तिशाली नहीं होता है। | ||
* कई मशीनों के लिए संकलन। उदाहरण के लिए, एक कंपनी [[ऑपरेटिंग सिस्टम]] के कई भिन्न -भिन्न संस्करणों का समर्थन करना चाहती है या कई भिन्न -भिन्न ऑपरेटिंग सिस्टमों का समर्थन करना चाहती है। एक क्रॉस कंपाइलर का उपयोग करके, इनमें से प्रत्येक लक्ष्य के लिए संकलन करने के लिए एक एकल निर्माण वातावरण स्थापित किया जा सकता है। | * कई मशीनों के लिए संकलन। उदाहरण के लिए, एक कंपनी [[ऑपरेटिंग सिस्टम|ऑपरेटिंग]] प्रणाली के कई भिन्न -भिन्न संस्करणों का समर्थन करना चाहती है या कई भिन्न -भिन्न ऑपरेटिंग सिस्टमों का समर्थन करना चाहती है। एक क्रॉस कंपाइलर का उपयोग करके, इनमें से प्रत्येक लक्ष्य के लिए संकलन करने के लिए एक एकल निर्माण वातावरण स्थापित किया जा सकता है। | ||
* एक [[सर्वर फार्म]] पर संकलन। कई मशीनों के लिए संकलन के समान, एक जटिल निर्माण जिसमें कई संकलन संचालन सम्मलित हैं, किसी भी मशीन पर निष्पादित किया जा सकता है, जो कि इसके अंतर्निहित हार्डवेयर या ऑपरेटिंग | * एक [[सर्वर फार्म]] पर संकलन। कई मशीनों के लिए संकलन के समान, एक जटिल निर्माण जिसमें कई संकलन संचालन सम्मलित हैं, किसी भी मशीन पर निष्पादित किया जा सकता है, जो कि इसके अंतर्निहित हार्डवेयर या ऑपरेटिंग प्रणाली संस्करण पर ध्यान दिए बिना मुक्त है। | ||
* [[बूटस्ट्रैपिंग (संकलक)]] एक नए | * [[बूटस्ट्रैपिंग (संकलक)]] एक नए प्लेटफॉर्म के लिए। एक नए प्लेटफ़ॉर्म के लिए सॉफ़्टवेयर विकसित करते समय, या भविष्य के प्लेटफ़ॉर्म के एमुलेटर, ऑपरेटिंग प्रणाली और एक देशी कंपाइलर जैसे आवश्यक टूल को संकलित करने के लिए एक क्रॉस कंपाइलर का उपयोग करता है। | ||
* कमोडोर 64 या ऐप्पल II जैसे पुराने अब-अप्रचलित प्लेटफार्मों के लिए एमुलेटर के लिए मूल कोड का संकलन उत्साही लोगों द्वारा किया जाता है जो वर्तमान प्लेटफॉर्म पर चलने वाले क्रॉस कंपाइलर्स का उपयोग करते हैं (जैसे कि एज़्टेक सी के एमएस-डॉस [[एमओएस टेक्नोलॉजी 6502]] क्रॉस कंपाइलर जो [[विन्डोज़ एक्सपी]] के अनुसार चल रहे हैं)। | * कमोडोर 64 या ऐप्पल II जैसे पुराने अब-अप्रचलित प्लेटफार्मों के लिए एमुलेटर के लिए मूल कोड का संकलन उत्साही लोगों द्वारा किया जाता है जो वर्तमान प्लेटफॉर्म पर चलने वाले क्रॉस कंपाइलर्स का उपयोग करते हैं (जैसे कि एज़्टेक सी के एमएस-डॉस [[एमओएस टेक्नोलॉजी 6502]] क्रॉस कंपाइलर जो [[विन्डोज़ एक्सपी]] के अनुसार चल रहे हैं)। | ||
[[ | [[जावा]] की जेवीएम जैसी [[आभासी मशीनों]] का उपयोग कुछ ऐसे कारणों को हल करता है, जिनके लिए क्रॉस कंपाइलर विकसित किए गए थे। वर्चुअल मशीन प्रतिमान एक ही कंपाइलर आउटपुट को कई लक्ष्य प्रणालियों में उपयोग करने की अनुमति देता है, चूंकि यह निरंतर आदर्श के रूप में नहीं होता है क्योंकि वर्चुअल मशीन अधिकांशतः धीमी होती हैं और संकलित प्रोग्राम केवल उस वर्चुअल मशीन वाले कंप्यूटर पर ही चलाया जा सकता है। | ||
सामान्यतः [[हार्डवेयर वास्तुकला]] भिन्न होता है | सामान्यतः [[हार्डवेयर वास्तुकला|हार्डवेयर आर्किटेक्चर]] भिन्न रूप में होता है, उदाहरण के लिए x[[86]] कंप्यूटर पर एमआईपीएस आर्किटेक्चर के लिए नियत प्रोग्राम को कोड करना होता है, लेकिन क्रॉस-संकलन तब उपयोगी होता है जब केवल ऑपरेटिंग प्रणाली का वातावरण भिन्न होता है, जैसे कि [[Linux|लिनक्स]] के अनुसार एकफ्री [[बीएसडी]] प्रोग्राम को संकलित किया जाता है या फिर सिर्फ एक प्रणाली लाइब्रेरी जैसे कि जब एक [[ग्लिक]] होस्ट पर [[यूक्लिबैक]] वाले प्रोग्राम को संकलित किया जाता है। | ||
== कैनेडियन क्रॉस == | == कैनेडियन क्रॉस == | ||
कैनेडियन क्रॉस अन्य मशीनों के लिए क्रॉस कंपाइलर्स बनाने की एक तकनीक है, जहां मूल मशीन लक्ष्य से बहुत धीमी या कम सुविधाजनक है। तीन मशीनों A, B, और C को देखते हुए, एक मशीन B पर चलने वाले क्रॉस कंपाइलर (जैसे [[x86-64]] प्रोसेसर पर [[Mac OS X]] चलाना) बनाने के लिए मशीन A (जैसे [[IA-32]] प्रोसेसर पर Windows XP चलाना) का उपयोग करता है। मशीन सी के लिए निष्पादन योग्य बनाएं (उदाहरण के लिए [[एआरएम वास्तुकला]] प्रोसेसर पर एंड्रॉइड (ऑपरेटिंग सिस्टम) चलाना)। इस उदाहरण में व्यावहारिक लाभ यह है कि मशीन A धीमी है, लेकिन उसके पास मालिकाना संकलक है, जबकि मशीन B तेज़ है, लेकिन उसका कोई संकलक नहीं है, और मशीन C संकलन के लिए उपयोग किए जाने के लिए अव्यावहारिक रूप से धीमी है। | कैनेडियन क्रॉस अन्य मशीनों के लिए क्रॉस कंपाइलर्स बनाने की एक तकनीक है, जहां मूल मशीन लक्ष्य से बहुत धीमी या कम सुविधाजनक है। तीन मशीनों A, B, और C को देखते हुए, एक मशीन B पर चलने वाले क्रॉस कंपाइलर (जैसे [[x86-64]] प्रोसेसर पर [[Mac OS X]] चलाना) बनाने के लिए मशीन A (जैसे [[IA-32]] प्रोसेसर पर Windows XP चलाना) का उपयोग करता है। मशीन सी के लिए निष्पादन योग्य बनाएं (उदाहरण के लिए [[एआरएम वास्तुकला|एआरएम आर्किटेक्चर]] प्रोसेसर पर एंड्रॉइड (ऑपरेटिंग सिस्टम) चलाना)। इस उदाहरण में व्यावहारिक लाभ यह है कि मशीन A धीमी है, लेकिन उसके पास मालिकाना संकलक है, जबकि मशीन B तेज़ है, लेकिन उसका कोई संकलक नहीं है, और मशीन C संकलन के लिए उपयोग किए जाने के लिए अव्यावहारिक रूप से धीमी है। | ||
जीसीसी के साथ कैनेडियन क्रॉस का उपयोग करते समय, और जैसा कि इस उदाहरण में है, इसमें चार कंपाइलर सम्मलित हो सकते हैं | जीसीसी के साथ कैनेडियन क्रॉस का उपयोग करते समय, और जैसा कि इस उदाहरण में है, इसमें चार कंपाइलर सम्मलित हो सकते हैं | ||
| Line 29: | Line 29: | ||
[[File:Example of Canadian Cross, scheme.svg|कैनेडियन क्रॉस, योजना का उदाहरण]]अंतिम-परिणाम क्रॉस कंपाइलर (4) बिल्ड मशीन A पर नहीं चल पाएगा; इस के अतिरिक्त यह एक एप्लिकेशन को निष्पादन योग्य कोड में संकलित करने के लिए मशीन बी पर चलेगा जिसे मशीन सी में कॉपी किया जाएगा और मशीन सी पर निष्पादित किया जाएगा। | [[File:Example of Canadian Cross, scheme.svg|कैनेडियन क्रॉस, योजना का उदाहरण]]अंतिम-परिणाम क्रॉस कंपाइलर (4) बिल्ड मशीन A पर नहीं चल पाएगा; इस के अतिरिक्त यह एक एप्लिकेशन को निष्पादन योग्य कोड में संकलित करने के लिए मशीन बी पर चलेगा जिसे मशीन सी में कॉपी किया जाएगा और मशीन सी पर निष्पादित किया जाएगा। | ||
उदाहरण के लिए, [[NetBSD]] एक [[POSIX]] Unix शेल स्क्रिप्ट प्रदान करता है जिसका नाम है <code>build.sh</code> जो पहले होस्ट के कंपाइलर के साथ अपना [[toolchain]] बनाएगा; बदले में, इसका उपयोग क्रॉस कंपाइलर बनाने के लिए किया जाएगा जिसका उपयोग पूरे | उदाहरण के लिए, [[NetBSD]] एक [[POSIX]] Unix शेल स्क्रिप्ट प्रदान करता है जिसका नाम है <code>build.sh</code> जो पहले होस्ट के कंपाइलर के साथ अपना [[toolchain]] बनाएगा; बदले में, इसका उपयोग क्रॉस कंपाइलर बनाने के लिए किया जाएगा जिसका उपयोग पूरे प्रणाली को बनाने के लिए किया जाएगा। | ||
कैनेडियन क्रॉस शब्द इसलिए आया क्योंकि जिस समय इन मुद्दों पर चर्चा चल रही थी, उस समय कनाडा में तीन राष्ट्रीय राजनीतिक दल थे।<ref>{{cite web|title=4.9 Canadian Crosses |work=CrossGCC |quote=This is called a `Canadian Cross' because at the time a name was needed, Canada had three national parties. |access-date=2012-08-08 |url=http://www.objsw.com/CrossGCC/FAQ-4.html#sec:CanadianCross |url-status=dead |archive-url=https://web.archive.org/web/20041009155533/http://www.objsw.com/CrossGCC/FAQ-4.html#sec:CanadianCross |archive-date=October 9, 2004 }}</ref> | कैनेडियन क्रॉस शब्द इसलिए आया क्योंकि जिस समय इन मुद्दों पर चर्चा चल रही थी, उस समय कनाडा में तीन राष्ट्रीय राजनीतिक दल थे।<ref>{{cite web|title=4.9 Canadian Crosses |work=CrossGCC |quote=This is called a `Canadian Cross' because at the time a name was needed, Canada had three national parties. |access-date=2012-08-08 |url=http://www.objsw.com/CrossGCC/FAQ-4.html#sec:CanadianCross |url-status=dead |archive-url=https://web.archive.org/web/20041009155533/http://www.objsw.com/CrossGCC/FAQ-4.html#sec:CanadianCross |archive-date=October 9, 2004 }}</ref> | ||
| Line 41: | Line 41: | ||
जीएनयू कंपाइलर संग्रह, कंपाइलरों का एक [[मुफ्त सॉफ्टवेयर]] संग्रह, संकलन को पार करने के लिए स्थापित किया जा सकता है। यह कई प्लेटफॉर्म और भाषाओं को सपोर्ट करता है। | जीएनयू कंपाइलर संग्रह, कंपाइलरों का एक [[मुफ्त सॉफ्टवेयर]] संग्रह, संकलन को पार करने के लिए स्थापित किया जा सकता है। यह कई प्लेटफॉर्म और भाषाओं को सपोर्ट करता है। | ||
GCC के लिए आवश्यक है कि प्रत्येक लक्षित प्लेटफॉर्म के लिए बिनुटिल्स की एक संकलित प्रति उपलब्ध हो। [[जीएनयू असेंबलर]] विशेष रूप से महत्वपूर्ण है। इसलिए, पहले बिनुटिल्स को स्विच के साथ सही ढंग से संकलित करना होगा <code>--target=some-target</code> [[स्क्रिप्ट कॉन्फ़िगर करें]] को भेजा गया। जीसीसी को भी उसी के साथ स्क्रिप्ट को कॉन्फ़िगर करना होगा <code>--target</code> विकल्प। तब GCC को सामान्य रूप से चलाया जा सकता है, बशर्ते कि उपकरण, जो बिनुटिल्स बनाता है, [[पथ (कंप्यूटिंग)]] में उपलब्ध हो, जिसे निम्नलिखित का उपयोग करके किया जा सकता है (यूनिक्स-जैसे ऑपरेटिंग | GCC के लिए आवश्यक है कि प्रत्येक लक्षित प्लेटफॉर्म के लिए बिनुटिल्स की एक संकलित प्रति उपलब्ध हो। [[जीएनयू असेंबलर]] विशेष रूप से महत्वपूर्ण है। इसलिए, पहले बिनुटिल्स को स्विच के साथ सही ढंग से संकलित करना होगा <code>--target=some-target</code> [[स्क्रिप्ट कॉन्फ़िगर करें]] को भेजा गया। जीसीसी को भी उसी के साथ स्क्रिप्ट को कॉन्फ़िगर करना होगा <code>--target</code> विकल्प। तब GCC को सामान्य रूप से चलाया जा सकता है, बशर्ते कि उपकरण, जो बिनुटिल्स बनाता है, [[पथ (कंप्यूटिंग)]] में उपलब्ध हो, जिसे निम्नलिखित का उपयोग करके किया जा सकता है (यूनिक्स-जैसे ऑपरेटिंग प्रणाली पर बैश के साथ): | ||
PATH=/path/to/binutils/bin:${PATH} बनाना | PATH=/path/to/binutils/bin:${PATH} बनाना | ||
क्रॉस-कंपाइलिंग जीसीसी के लिए आवश्यक है कि लक्ष्य प्लेटफॉर्म की सी मानक लाइब्रेरी का एक हिस्सा होस्ट प्लेटफॉर्म पर उपलब्ध हो। प्रोग्रामर पूर्ण [[सी पुस्तकालय]] को संकलित करना चुन सकता है, लेकिन यह विकल्प अविश्वसनीय हो सकता है। विकल्प [[newlib]] का उपयोग करना है, जो एक छोटी सी लाइब्रेरी है जिसमें [[सी (प्रोग्रामिंग भाषा)]] स्रोत कोड को संकलित करने के लिए आवश्यक सबसे आवश्यक घटक हैं। <!-- To configure GCC with newlib, use the switch <code>--with-newlib</code>. --> | क्रॉस-कंपाइलिंग जीसीसी के लिए आवश्यक है कि लक्ष्य प्लेटफॉर्म की सी मानक लाइब्रेरी का एक हिस्सा होस्ट प्लेटफॉर्म पर उपलब्ध हो। प्रोग्रामर पूर्ण [[सी पुस्तकालय]] को संकलित करना चुन सकता है, लेकिन यह विकल्प अविश्वसनीय हो सकता है। विकल्प [[newlib]] का उपयोग करना है, जो एक छोटी सी लाइब्रेरी है जिसमें [[सी (प्रोग्रामिंग भाषा)]] स्रोत कोड को संकलित करने के लिए आवश्यक सबसे आवश्यक घटक हैं। <!-- To configure GCC with newlib, use the switch <code>--with-newlib</code>. --> | ||
[[जीएनयू बिल्ड सिस्टम]] पैकेज (अर्थात [[autoconf]]़, [[automake]] और [[libtool]]) एक बिल्ड प्लेटफ़ॉर्म, एक होस्ट प्लेटफ़ॉर्म और एक लक्ष्य प्लेटफ़ॉर्म की धारणा का उपयोग करते हैं। बिल्ड प्लेटफॉर्म वह जगह है जहां कंपाइलर वास्तव में संकलित होता है। ज्यादातर स्थितियो में, बिल्ड को अपरिभाषित छोड़ दिया जाना चाहिए (यह होस्ट से डिफ़ॉल्ट होगा)। होस्ट प्लेटफ़ॉर्म निरंतर वह होता है जहाँ कंपाइलर से आउटपुट कलाकृतियों को निष्पादित किया जाएगा चाहे आउटपुट कोई अन्य कंपाइलर हो या नहीं। लक्ष्य प्लेटफ़ॉर्म का उपयोग तब किया जाता है जब क्रॉस-कंपाइलर क्रॉस-कंपाइलर होते हैं, यह दर्शाता है कि पैकेज किस प्रकार का ऑब्जेक्ट कोड उत्पन्न करेगा; अन्यथा लक्ष्य प्लेटफ़ॉर्म सेटिंग अप्रासंगिक है।<ref>{{Cite web|url=https://www.gnu.org/s/libtool/manual/automake/Cross_002dCompilation.html|title=Cross-Compilation (Automake)}}</ref> उदाहरण के लिए, एक [[कलाकारों का सपना]] पर चलने वाले वीडियो गेम को क्रॉस-कंपाइल करने पर विचार करें। मशीन जहां गेम को संकलित किया गया है वह बिल्ड प्लेटफॉर्म है जबकि ड्रीमकास्ट होस्ट प्लेटफॉर्म है। नाम मेजबान और लक्ष्य संकलक के सापेक्ष उपयोग किए जा रहे हैं और बेटे और पोते की तरह स्थानांतरित किए जा रहे हैं।<ref>{{Cite web|url=https://mesonbuild.com/Cross-compilation.html|title=Cross compilation}}</ref> | [[जीएनयू बिल्ड सिस्टम|जीएनयू बिल्ड]] प्रणाली पैकेज (अर्थात [[autoconf]]़, [[automake]] और [[libtool]]) एक बिल्ड प्लेटफ़ॉर्म, एक होस्ट प्लेटफ़ॉर्म और एक लक्ष्य प्लेटफ़ॉर्म की धारणा का उपयोग करते हैं। बिल्ड प्लेटफॉर्म वह जगह है जहां कंपाइलर वास्तव में संकलित होता है। ज्यादातर स्थितियो में, बिल्ड को अपरिभाषित छोड़ दिया जाना चाहिए (यह होस्ट से डिफ़ॉल्ट होगा)। होस्ट प्लेटफ़ॉर्म निरंतर वह होता है जहाँ कंपाइलर से आउटपुट कलाकृतियों को निष्पादित किया जाएगा चाहे आउटपुट कोई अन्य कंपाइलर हो या नहीं। लक्ष्य प्लेटफ़ॉर्म का उपयोग तब किया जाता है जब क्रॉस-कंपाइलर क्रॉस-कंपाइलर होते हैं, यह दर्शाता है कि पैकेज किस प्रकार का ऑब्जेक्ट कोड उत्पन्न करेगा; अन्यथा लक्ष्य प्लेटफ़ॉर्म सेटिंग अप्रासंगिक है।<ref>{{Cite web|url=https://www.gnu.org/s/libtool/manual/automake/Cross_002dCompilation.html|title=Cross-Compilation (Automake)}}</ref> उदाहरण के लिए, एक [[कलाकारों का सपना]] पर चलने वाले वीडियो गेम को क्रॉस-कंपाइल करने पर विचार करें। मशीन जहां गेम को संकलित किया गया है वह बिल्ड प्लेटफॉर्म है जबकि ड्रीमकास्ट होस्ट प्लेटफॉर्म है। नाम मेजबान और लक्ष्य संकलक के सापेक्ष उपयोग किए जा रहे हैं और बेटे और पोते की तरह स्थानांतरित किए जा रहे हैं।<ref>{{Cite web|url=https://mesonbuild.com/Cross-compilation.html|title=Cross compilation}}</ref> | ||
एम्बेडेड लिनक्स डेवलपर्स द्वारा लोकप्रिय रूप से उपयोग की जाने वाली एक अन्य विधि में [[scratchbox2]], [[स्क्रैचबॉक्स]] 2, या [http://proot.me PRoot] जैसे विशेष सैंडबॉक्स के साथ जीसीसी कंपाइलर्स का संयोजन सम्मलित है। ये उपकरण एक चिरोटेड सैंडबॉक्स बनाते हैं जहां प्रोग्रामर अतिरिक्त पथ सेट किए बिना आवश्यक उपकरण, libc और लाइब्रेरी बना सकता है। रनटाइम को धोखा देने के लिए सुविधाएं भी प्रदान की जाती हैं जिससे की यह विश्वास हो सके कि यह वास्तव में लक्षित लक्ष्य सीपीयू (जैसे एआरएम आर्किटेक्चर) पर चल रहा है; यह कॉन्फ़िगरेशन स्क्रिप्ट और बिना किसी त्रुटि के चलने की अनुमति देता है। स्क्रैचबॉक्स गैर-क्रोट किए गए तरीकों की तुलना में अधिक धीमी गति से चलता है, और अधिकांश उपकरण जो होस्ट पर हैं उन्हें कार्य करने के लिए स्क्रैचबॉक्स में ले जाना चाहिए। | एम्बेडेड लिनक्स डेवलपर्स द्वारा लोकप्रिय रूप से उपयोग की जाने वाली एक अन्य विधि में [[scratchbox2]], [[स्क्रैचबॉक्स]] 2, या [http://proot.me PRoot] जैसे विशेष सैंडबॉक्स के साथ जीसीसी कंपाइलर्स का संयोजन सम्मलित है। ये उपकरण एक चिरोटेड सैंडबॉक्स बनाते हैं जहां प्रोग्रामर अतिरिक्त पथ सेट किए बिना आवश्यक उपकरण, libc और लाइब्रेरी बना सकता है। रनटाइम को धोखा देने के लिए सुविधाएं भी प्रदान की जाती हैं जिससे की यह विश्वास हो सके कि यह वास्तव में लक्षित लक्ष्य सीपीयू (जैसे एआरएम आर्किटेक्चर) पर चल रहा है; यह कॉन्फ़िगरेशन स्क्रिप्ट और बिना किसी त्रुटि के चलने की अनुमति देता है। स्क्रैचबॉक्स गैर-क्रोट किए गए तरीकों की तुलना में अधिक धीमी गति से चलता है, और अधिकांश उपकरण जो होस्ट पर हैं उन्हें कार्य करने के लिए स्क्रैचबॉक्स में ले जाना चाहिए। | ||
| Line 54: | Line 54: | ||
मैक्स की एज़्टेक सीसी (प्रोग्रामिंग भाषा) [[MS-DOS]], [[Apple II]], Apple DOS|DOS 3.3 और [[ProDOS]], [[कमोडोर 64]], Mac (कंप्यूटर) 68k सहित विभिन्न प्लेटफार्मों के लिए उपलब्ध थी।<ref>{{Cite web |url=http://docs.info.apple.com/article.html?artnum=304210 |title=Obsolete Macintosh Computers |access-date=2008-03-10 |archive-url=https://web.archive.org/web/20080226113432/http://docs.info.apple.com/article.html?artnum=304210 |archive-date=2008-02-26 |url-status=dead }}</ref> और [[अमिगा]]। | मैक्स की एज़्टेक सीसी (प्रोग्रामिंग भाषा) [[MS-DOS]], [[Apple II]], Apple DOS|DOS 3.3 और [[ProDOS]], [[कमोडोर 64]], Mac (कंप्यूटर) 68k सहित विभिन्न प्लेटफार्मों के लिए उपलब्ध थी।<ref>{{Cite web |url=http://docs.info.apple.com/article.html?artnum=304210 |title=Obsolete Macintosh Computers |access-date=2008-03-10 |archive-url=https://web.archive.org/web/20080226113432/http://docs.info.apple.com/article.html?artnum=304210 |archive-date=2008-02-26 |url-status=dead }}</ref> और [[अमिगा]]। | ||
1980 के दशक से और 1990 के दशक तक जारी रहा जब तक कि मैनक्स सॉफ्टवेयर | 1980 के दशक से और 1990 के दशक तक जारी रहा जब तक कि मैनक्स सॉफ्टवेयर प्रणाली गायब नहीं हो गया, एज़्टेक सी का एमएस-डॉस संस्करण<ref>[http://www.clipshop.ca/Aztec/index.htm Aztec C]</ref> कमोडोर 64 सहित विभिन्न प्रोसेसर के साथ अन्य प्लेटफार्मों के लिए मूल मोड कंपाइलर या क्रॉस कंपाइलर के रूप में दोनों की पेशकश की गई थी<ref>[http://www.clipshop.ca/Aztec/index.htm#commodore Commodore 64]</ref> और एप्पल II।<ref>[http://www.clipshop.ca/Aztec/index.htm#apple Apple II]</ref> एज़्टेक सी के लिए उनके एमएस-डॉस आधारित क्रॉस कंपाइलर्स सहित इंटरनेट वितरण अभी भी उपलब्ध हैं। वे आज भी उपयोग में हैं। | ||
मैनक्स का एज़्टेक C86, उनका मूल मोड [[Intel 8086]] MS-DOS कंपाइलर भी एक क्रॉस कंपाइलर था। चूंकि यह कमोडोर 64 और ऐप्पल II के लिए उनके एज़्टेक सी 65 एमओएस टेक्नोलॉजी 6502 क्रॉस कंपाइलर्स जैसे एक भिन्न प्रोसेसर के लिए कोड संकलित नहीं करता था, इसने प्रोसेसर के 16-बिट 8086 परिवार के लिए तत्कालीन विरासत ऑपरेटिंग | मैनक्स का एज़्टेक C86, उनका मूल मोड [[Intel 8086]] MS-DOS कंपाइलर भी एक क्रॉस कंपाइलर था। चूंकि यह कमोडोर 64 और ऐप्पल II के लिए उनके एज़्टेक सी 65 एमओएस टेक्नोलॉजी 6502 क्रॉस कंपाइलर्स जैसे एक भिन्न प्रोसेसर के लिए कोड संकलित नहीं करता था, इसने प्रोसेसर के 16-बिट 8086 परिवार के लिए तत्कालीन विरासत ऑपरेटिंग प्रणाली के लिए बाइनरी एक्ज़ीक्यूटेबल्स बनाए। | ||
जब IBM PC पहली बार पेश किया गया था तो यह ऑपरेटिंग | जब IBM PC पहली बार पेश किया गया था तो यह ऑपरेटिंग प्रणाली के विकल्प के साथ उपलब्ध था, CP/M-86 और PC DOS उनमें से दो थे। एज़्टेक C86 को आईबीएम पीसी ऑपरेटिंग प्रणाली दोनों के लिए कोड बनाने के लिए लिंक लाइब्रेरी प्रदान की गई थी। 1980 के दशक के समय एज़्टेक C86 (3.xx, 4.xx और 5.xx) के बाद के संस्करणों ने MS-DOS अस्थायी संस्करण 1 और 2 के लिए समर्थन जोड़ा<ref>[http://members.fortunecity.com/pcmuseum/dos.htm MS-DOS Timeline] {{webarchive|url=https://web.archive.org/web/20080501141058/http://members.fortunecity.com/pcmuseum/dos.htm |date=2008-05-01 }}</ref> और जो बेसलाइन MS-DOS संस्करण 3 की तुलना में कम मजबूत थे और बाद में जिन्हें एज़्टेक C86 ने अपने अंत तक लक्षित किया। | ||
अंत में, एज़्टेक C86 ने C भाषा डेवलपर्स को ROM छवि बनाने की क्षमता प्रदान की। रोम-सक्षम हेक्साडेसिमल| हेक्स कोड जिसे तब [[केवल पढ़ने के लिये मेमोरी]] का उपयोग करके सीधे 8086 आधारित प्रोसेसर में स्थानांतरित किया जा सकता था। [[पैरावर्चुअलाइजेशन]] आज अधिक सामान्य हो सकता है, लेकिन निम्न-स्तरीय ROM कोड बनाने का अभ्यास उन वर्षों के समय प्रति व्यक्ति अधिक सामान्य था, जब [[डिवाइस ड्राइवर]] का विकास अधिकांशतः व्यक्तिगत अनुप्रयोगों के लिए एप्लिकेशन प्रोग्रामर द्वारा किया जाता था, और नए उपकरण एक कुटीर उद्योग के बराबर होते थे। निर्माता से समर्थन के बिना सीधे हार्डवेयर के साथ इंटरफ़ेस करने के लिए एप्लिकेशन प्रोग्रामर के लिए यह असामान्य नहीं था। यह अभ्यास आज के एम्बेडेड | अंत में, एज़्टेक C86 ने C भाषा डेवलपर्स को ROM छवि बनाने की क्षमता प्रदान की। रोम-सक्षम हेक्साडेसिमल| हेक्स कोड जिसे तब [[केवल पढ़ने के लिये मेमोरी]] का उपयोग करके सीधे 8086 आधारित प्रोसेसर में स्थानांतरित किया जा सकता था। [[पैरावर्चुअलाइजेशन]] आज अधिक सामान्य हो सकता है, लेकिन निम्न-स्तरीय ROM कोड बनाने का अभ्यास उन वर्षों के समय प्रति व्यक्ति अधिक सामान्य था, जब [[डिवाइस ड्राइवर]] का विकास अधिकांशतः व्यक्तिगत अनुप्रयोगों के लिए एप्लिकेशन प्रोग्रामर द्वारा किया जाता था, और नए उपकरण एक कुटीर उद्योग के बराबर होते थे। निर्माता से समर्थन के बिना सीधे हार्डवेयर के साथ इंटरफ़ेस करने के लिए एप्लिकेशन प्रोग्रामर के लिए यह असामान्य नहीं था। यह अभ्यास आज के एम्बेडेड प्रणाली के समान था। | ||
थॉमस फेनविक और जेम्स गुडनाउ II एज़्टेक-सी के दो प्रमुख डेवलपर थे। फेनविक बाद में [[माइक्रोसॉफ्ट]] [[विंडोज सीई]] [[कर्नेल (ऑपरेटिंग सिस्टम)]] या एनके (न्यू कर्नेल) के लेखक के रूप में उल्लेखनीय हो गया, क्योंकि इसे तब कहा जाता था।<ref>[https://www.amazon.com/Inside-Microsoft-Windows-John-Murray/dp/1199000361 Inside Windows CE (search for Fenwick)]</ref> | थॉमस फेनविक और जेम्स गुडनाउ II एज़्टेक-सी के दो प्रमुख डेवलपर थे। फेनविक बाद में [[माइक्रोसॉफ्ट]] [[विंडोज सीई]] [[कर्नेल (ऑपरेटिंग सिस्टम)]] या एनके (न्यू कर्नेल) के लेखक के रूप में उल्लेखनीय हो गया, क्योंकि इसे तब कहा जाता था।<ref>[https://www.amazon.com/Inside-Microsoft-Windows-John-Murray/dp/1199000361 Inside Windows CE (search for Fenwick)]</ref> | ||
| Line 80: | Line 80: | ||
एज़्टेक-सी जैसे कंपाइलर्स ने सब कुछ असेंबली भाषा में एक भिन्न पास के रूप में परिवर्तित कर दिया और फिर कोड को एक भिन्न पास में इकट्ठा किया, और उनके बहुत ही कुशल और छोटे कोड के लिए विख्यात थे, लेकिन 1987 तक Microsoft C में निर्मित ऑप्टिमाइज़र बहुत अच्छा था, और केवल किसी कार्यक्रम के मिशन के महत्वपूर्ण भागों को सामान्यतः पुनर्लेखन के लिए माना जाता था। वास्तव में, सी भाषा प्रोग्रामिंग ने सबसे निचले स्तर की भाषा के रूप में ले लिया था, प्रोग्रामिंग एक बहु-अनुशासनात्मक विकास उद्योग बन गया था और परियोजनाएं बड़ी हो रही थीं, प्रोग्रामर उच्च स्तरीय भाषाओं में उपयोगकर्ता इंटरफेस और डेटाबेस इंटरफेस लिख रहे थे, और एक आवश्यकता सामने आई थी क्रॉस लैंग्वेज डेवलपमेंट जो आज भी जारी है। | एज़्टेक-सी जैसे कंपाइलर्स ने सब कुछ असेंबली भाषा में एक भिन्न पास के रूप में परिवर्तित कर दिया और फिर कोड को एक भिन्न पास में इकट्ठा किया, और उनके बहुत ही कुशल और छोटे कोड के लिए विख्यात थे, लेकिन 1987 तक Microsoft C में निर्मित ऑप्टिमाइज़र बहुत अच्छा था, और केवल किसी कार्यक्रम के मिशन के महत्वपूर्ण भागों को सामान्यतः पुनर्लेखन के लिए माना जाता था। वास्तव में, सी भाषा प्रोग्रामिंग ने सबसे निचले स्तर की भाषा के रूप में ले लिया था, प्रोग्रामिंग एक बहु-अनुशासनात्मक विकास उद्योग बन गया था और परियोजनाएं बड़ी हो रही थीं, प्रोग्रामर उच्च स्तरीय भाषाओं में उपयोगकर्ता इंटरफेस और डेटाबेस इंटरफेस लिख रहे थे, और एक आवश्यकता सामने आई थी क्रॉस लैंग्वेज डेवलपमेंट जो आज भी जारी है। | ||
1987 तक, MSC 5.1 की रिलीज़ के साथ, Microsoft ने MS-DOS के लिए एक क्रॉस लैंग्वेज डेवलपमेंट एनवायरनमेंट की पेशकश की। असेंबली लैंग्वेज ([[MASM]]) और Microsoft की अन्य भाषाओं में [[QuickBASIC]], [[पास्कल (प्रोग्रामिंग भाषा)]], और [[फोरट्रान]] सहित लिखे गए 16-बिट बाइनरी ऑब्जेक्ट कोड को एक साथ एक प्रोग्राम में जोड़ा जा सकता है, एक प्रक्रिया में वे मिश्रित भाषा प्रोग्रामिंग और अब इंटरलैंग्वेज कॉलिंग कहलाते हैं।<ref>[http://support.microsoft.com/kb/35965 Which Basic Versions Can CALL C, FORTRAN, Pascal, MASM]</ref> यदि इस मिश्रण में [[BASIC]] का उपयोग किया गया था, तो आंतरिक [[रनटाइम सिस्टम]] का समर्थन करने के लिए मुख्य प्रोग्राम का BASIC में होना आवश्यक था, जो कचरा संग्रह के लिए आवश्यक BASIC को संकलित करता था और इसके अन्य प्रबंधित संचालन जो MS-DOS में [[QBasic]] जैसे BASIC [[दुभाषिया (कंप्यूटिंग)]] का अनुकरण करते थे। | 1987 तक, MSC 5.1 की रिलीज़ के साथ, Microsoft ने MS-DOS के लिए एक क्रॉस लैंग्वेज डेवलपमेंट एनवायरनमेंट की पेशकश की। असेंबली लैंग्वेज ([[MASM]]) और Microsoft की अन्य भाषाओं में [[QuickBASIC]], [[पास्कल (प्रोग्रामिंग भाषा)]], और [[फोरट्रान]] सहित लिखे गए 16-बिट बाइनरी ऑब्जेक्ट कोड को एक साथ एक प्रोग्राम में जोड़ा जा सकता है, एक प्रक्रिया में वे मिश्रित भाषा प्रोग्रामिंग और अब इंटरलैंग्वेज कॉलिंग कहलाते हैं।<ref>[http://support.microsoft.com/kb/35965 Which Basic Versions Can CALL C, FORTRAN, Pascal, MASM]</ref> यदि इस मिश्रण में [[BASIC]] का उपयोग किया गया था, तो आंतरिक [[रनटाइम सिस्टम|रनटाइम]] प्रणाली का समर्थन करने के लिए मुख्य प्रोग्राम का BASIC में होना आवश्यक था, जो कचरा संग्रह के लिए आवश्यक BASIC को संकलित करता था और इसके अन्य प्रबंधित संचालन जो MS-DOS में [[QBasic]] जैसे BASIC [[दुभाषिया (कंप्यूटिंग)]] का अनुकरण करते थे। | ||
सी कोड के लिए [[कॉलिंग कन्वेंशन]], विशेष रूप से, [[कॉल स्टैक]] पर रिवर्स ऑर्डर में पैरामीटर पास करना था और [[प्रोसेसर रजिस्टर]] के अतिरिक्त स्टैक पर मान वापस करना था। सभी भाषाओं को एक साथ काम करने के लिए अन्य प्रोग्रामिंग नियम थे, लेकिन यह विशेष नियम क्रॉस लैंग्वेज डेवलपमेंट के माध्यम से कायम रहा जो [[Microsoft Windows]] 16- और 32-बिट संस्करणों में और OS/2 के लिए कार्यक्रमों के विकास में जारी रहा, और जो अभी भी जारी है। इस दिन। इसे [[पास्कल कॉलिंग कन्वेंशन]] के रूप में जाना जाता है। | सी कोड के लिए [[कॉलिंग कन्वेंशन]], विशेष रूप से, [[कॉल स्टैक]] पर रिवर्स ऑर्डर में पैरामीटर पास करना था और [[प्रोसेसर रजिस्टर]] के अतिरिक्त स्टैक पर मान वापस करना था। सभी भाषाओं को एक साथ काम करने के लिए अन्य प्रोग्रामिंग नियम थे, लेकिन यह विशेष नियम क्रॉस लैंग्वेज डेवलपमेंट के माध्यम से कायम रहा जो [[Microsoft Windows]] 16- और 32-बिट संस्करणों में और OS/2 के लिए कार्यक्रमों के विकास में जारी रहा, और जो अभी भी जारी है। इस दिन। इसे [[पास्कल कॉलिंग कन्वेंशन]] के रूप में जाना जाता है। | ||
| Line 91: | Line 91: | ||
MS-DOS समर्थन अभी भी Microsoft के पहले C++ कंपाइलर, MSC 7 की रिलीज़ के साथ प्रदान किया गया था, जो C प्रोग्रामिंग भाषा और MS-DOS के साथ पिछड़ा संगत था और 16- और 32-बिट कोड जनरेशन दोनों का समर्थन करता था। | MS-DOS समर्थन अभी भी Microsoft के पहले C++ कंपाइलर, MSC 7 की रिलीज़ के साथ प्रदान किया गया था, जो C प्रोग्रामिंग भाषा और MS-DOS के साथ पिछड़ा संगत था और 16- और 32-बिट कोड जनरेशन दोनों का समर्थन करता था। | ||
एमएससी ने वहीं से पदभार संभाला जहां एज़्टेक सी ने छोड़ा था। सी कंपाइलर्स के लिए बाजार हिस्सेदारी क्रॉस कंपाइलर्स में बदल गई थी, जिसने नवीनतम और सबसे बड़ी विंडोज सुविधाओं का लाभ उठाया, एक ही बंडल में सी और सी ++ की पेशकश की, और अभी भी एमएस-डॉस | एमएससी ने वहीं से पदभार संभाला जहां एज़्टेक सी ने छोड़ा था। सी कंपाइलर्स के लिए बाजार हिस्सेदारी क्रॉस कंपाइलर्स में बदल गई थी, जिसने नवीनतम और सबसे बड़ी विंडोज सुविधाओं का लाभ उठाया, एक ही बंडल में सी और सी ++ की पेशकश की, और अभी भी एमएस-डॉस प्रणाली का समर्थन किया जो पहले से ही एक दशक पुराना था, और छोटी कंपनियां जो एज़्टेक सी जैसे उत्पादित संकलक अब प्रतिस्पर्धा नहीं कर सकते थे और या तो एम्बेडेड प्रणाली जैसे आला बाजारों में बदल गए या गायब हो गए। | ||
MS-DOS और 16-बिट कोड जनरेशन समर्थन MSC 8.00c तक जारी रहा, जिसे Microsoft C++ और Microsoft अनुप्रयोग स्टूडियो 1.5 के साथ बंडल किया गया था, जो Microsoft Visual Studio का अग्रदूत है जो आज Microsoft द्वारा प्रदान किया जाने वाला क्रॉस डेवलपमेंट वातावरण है। | MS-DOS और 16-बिट कोड जनरेशन समर्थन MSC 8.00c तक जारी रहा, जिसे Microsoft C++ और Microsoft अनुप्रयोग स्टूडियो 1.5 के साथ बंडल किया गया था, जो Microsoft Visual Studio का अग्रदूत है जो आज Microsoft द्वारा प्रदान किया जाने वाला क्रॉस डेवलपमेंट वातावरण है। | ||
| Line 98: | Line 98: | ||
MSC 12 को Microsoft Visual Studio 6 के साथ जारी किया गया था और अब MS-DOS 16-बिट बायनेरिज़ के लिए समर्थन प्रदान नहीं करता है, इस के अतिरिक्त 32-बिट कंसोल अनुप्रयोगों के लिए समर्थन प्रदान करता है, लेकिन [[Windows 95]] और [[Windows 98]] कोड जनरेशन के साथ-साथ Windows NT के लिए समर्थन प्रदान करता है। . Microsoft Windows चलाने वाले अन्य प्रोसेसर के लिए लिंक लाइब्रेरी उपलब्ध थी; एक प्रथा जो Microsoft आज भी जारी है। | MSC 12 को Microsoft Visual Studio 6 के साथ जारी किया गया था और अब MS-DOS 16-बिट बायनेरिज़ के लिए समर्थन प्रदान नहीं करता है, इस के अतिरिक्त 32-बिट कंसोल अनुप्रयोगों के लिए समर्थन प्रदान करता है, लेकिन [[Windows 95]] और [[Windows 98]] कोड जनरेशन के साथ-साथ Windows NT के लिए समर्थन प्रदान करता है। . Microsoft Windows चलाने वाले अन्य प्रोसेसर के लिए लिंक लाइब्रेरी उपलब्ध थी; एक प्रथा जो Microsoft आज भी जारी है। | ||
MSC 13 को [[Visual Studio 2003]] के साथ रिलीज़ किया गया था, और MSC 14 को [[Visual Studio 2005]] के साथ रिलीज़ किया गया था, जो दोनों अभी भी Windows 95 जैसे पुराने | MSC 13 को [[Visual Studio 2003]] के साथ रिलीज़ किया गया था, और MSC 14 को [[Visual Studio 2005]] के साथ रिलीज़ किया गया था, जो दोनों अभी भी Windows 95 जैसे पुराने प्रणाली के लिए कोड का उत्पादन करते हैं, लेकिन जो मोबाइल मार्केट और ARM आर्किटेक्चर सहित कई लक्षित प्लेटफॉर्म के लिए कोड तैयार करेगा। | ||
=== .NET और परे === | === .NET और परे === | ||
2001 में माइक्रोसॉफ्ट ने [[सामान्य भाषा रनटाइम]] (सीएलआर) विकसित किया, जिसने विजुअल स्टूडियो आईडीई में उनके .NET फ्रेमवर्क कंपाइलर के लिए कोर का गठन किया। ऑपरेटिंग | 2001 में माइक्रोसॉफ्ट ने [[सामान्य भाषा रनटाइम]] (सीएलआर) विकसित किया, जिसने विजुअल स्टूडियो आईडीई में उनके .NET फ्रेमवर्क कंपाइलर के लिए कोर का गठन किया। ऑपरेटिंग प्रणाली पर यह परत जो [[अप्लिकेशन प्रोग्रामिंग अंतरफलक]] में है, विंडोज ऑपरेटिंग प्रणाली चलाने वाले प्लेटफॉर्म पर संकलित विकास भाषाओं के मिश्रण की अनुमति देती है। | ||
.NET फ्रेमवर्क रनटाइम और सीएलआर लक्ष्य कंप्यूटर पर प्रोसेसर और उपकरणों के लिए कोर रूटीन के लिए मैपिंग परत प्रदान करते हैं। विजुअल स्टूडियो में कमांड-लाइन सी कंपाइलर विभिन्न प्रकार के प्रोसेसर के लिए मूल कोड संकलित करेगा और इसका उपयोग स्वयं कोर रूटीन बनाने के लिए किया जा सकता है। | .NET फ्रेमवर्क रनटाइम और सीएलआर लक्ष्य कंप्यूटर पर प्रोसेसर और उपकरणों के लिए कोर रूटीन के लिए मैपिंग परत प्रदान करते हैं। विजुअल स्टूडियो में कमांड-लाइन सी कंपाइलर विभिन्न प्रकार के प्रोसेसर के लिए मूल कोड संकलित करेगा और इसका उपयोग स्वयं कोर रूटीन बनाने के लिए किया जा सकता है। | ||
| Line 107: | Line 107: | ||
विभिन्न प्रकार के प्रोसेसर के साथ विंडोज मशीनों पर एआरएम आर्किटेक्चर क्रॉस-कंपाइल पर विंडोज मोबाइल जैसे लक्ष्य प्लेटफॉर्म के लिए माइक्रोसॉफ्ट .NET एप्लिकेशन और माइक्रोसॉफ्ट एमुलेटर और रिमोट परिनियोजन वातावरण भी प्रदान करता है, जिसके लिए बहुत कम कॉन्फ़िगरेशन की आवश्यकता होती है, क्रॉस कंपाइलर्स के विपरीत। अन्य प्लेटफार्म। | विभिन्न प्रकार के प्रोसेसर के साथ विंडोज मशीनों पर एआरएम आर्किटेक्चर क्रॉस-कंपाइल पर विंडोज मोबाइल जैसे लक्ष्य प्लेटफॉर्म के लिए माइक्रोसॉफ्ट .NET एप्लिकेशन और माइक्रोसॉफ्ट एमुलेटर और रिमोट परिनियोजन वातावरण भी प्रदान करता है, जिसके लिए बहुत कम कॉन्फ़िगरेशन की आवश्यकता होती है, क | ||