जीएनयू कंपाइलर कलेक्शन: Difference between revisions
No edit summary |
No edit summary |
||
(23 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
{{Short description|Free and open-source compiler for various programming languages}} | |||
'''जीएनयू कंपाइलर कलेक्शन''' (जीसीसी) जीएनयू प्रोजेक्ट द्वारा निर्मित ऑप्टिमाइज़िंग कंपाइलर है जो विभिन्न [[प्रोग्रामिंग भाषा|प्रोग्रामिंग लैंग्वेजेज]], [[कंप्यूटर आर्किटेक्चर]] और [[ऑपरेटिंग सिस्टम]] को सपोर्ट करता है। [[फ्री सॉफ्टवेयर फाउंडेशन]] (एफएसएफ) [[जीएनयू जनरल पब्लिक लाइसेंस]] (जीएनयू जीपीएल) के अंतर्गत जीसीसी को [[मुफ्त सॉफ्टवेयर|फ्री सॉफ्टवेयर]] के रूप में वितरित करता है। जीसीसी जीएनयू टूलचेन का प्रमुख घटक है और जीएनयू तथा [[लिनक्स कर्नेल]] से संबंधित अधिकांश प्रोजेक्ट्स के लिए स्टैण्डर्ड कंपाइलर है। 2019 में कोड की लगभग 15 मिलियन लाइनों के साथ, जीसीसी अस्तित्व में सबसे बड़े फ्री प्रोग्रामों में से एक है।<ref name="loc"/> इसने फ्री सॉफ़्टवेयर के विकास में टूल और उदाहरण दोनों के रूप में महत्वपूर्ण भूमिका निभाई है। | |||
जब इसे | जब इसे सर्वप्रथम 1987 में [[ रिचर्ड स्टालमैन |रिचर्ड स्टालमैन]] द्वारा प्रस्तावित किया गया था, तो जीसीसी 1.0 को जीएनयू C कंपाइलर नाम दिया गया था क्योंकि यह केवल C (प्रोग्रामिंग लैंग्वेज) को हैंडल करता था।<ref name="release-history" /> इसे उसी वर्ष दिसंबर में C++ कंपाइल करने के लिए विस्तारित किया गया था। कंपाइलर फ्रंट एंड को पश्चात में [[ उद्देश्य सी |ऑब्जेक्टिव C]], ऑब्जेक्टिव-[[ सी ++ | C ++]], [[फोरट्रान]], [[एडा (प्रोग्रामिंग भाषा)|एडा (प्रोग्रामिंग लैंग्वेज)]], [[डी (प्रोग्रामिंग भाषा)|डी (प्रोग्रामिंग लैंग्वेज)]], गो (प्रोग्रामिंग लैंग्वेज) और रस्ट (प्रोग्रामिंग लैंग्वेज) के लिए विकसित किया गया था।<ref>{{Citation |title=GCC Rust |date=2023-06-04 |url=https://github.com/Rust-GCC/gccrs |access-date=2023-06-04 |publisher=Rust GCC}}</ref><ref>{{cite web|url=https://gcc.gnu.org/frontends.html|title=जीसीसी द्वारा समर्थित प्रोग्रामिंग भाषाएँ|access-date=2014-06-23|publisher=GNU Project }}</ref> [[OpenMP|ओपनएमपी]] और [[OpenACC|ओपनएसीसी]] स्पेसिफिकेशन्स C और C++ कंपाइलरों में भी समर्थित हैं।<ref name="gcc6">{{Cite web|url=https://gcc.gnu.org/gcc-6/changes.html|title=GCC 6 Release Series — Changes, New Features, and Fixes - GNU Project|website=gcc.gnu.org}}</ref><ref name=":2">{{Cite web|url=https://gcc.gnu.org/wiki/OpenACC|title=ओपनएसीसी - जीसीसी विकी|website=gcc.gnu.org}}</ref> | ||
[[जीएनयू ऑपरेटिंग सिस्टम | जीसीसी किसी भी अन्य कंपाइलर की उपमा में अधिक प्लेटफार्मों और [[ अनुदेश सेट वास्तुकला |इंस्ट्रक्शन सेट आर्चिटेक्टर्स]] पर [[में porting|पोर्टिंग]] कर रहा है, और फ्री तथा [[मालिकाना सॉफ्टवेयर|प्रोप्राइटरी सॉफ्टवेयर]] दोनों के विकास में टूल के रूप में इसे व्यापक रूप से नियुक्त किया गया है। जीसीसी कई [[ अंतः स्थापित प्रणाली |एम्बेडेड सिस्टम्स]] के लिए भी उपलब्ध है, जिसमें एआरएम आर्किटेक्चर एआरएम-बेस्ड और पावर आईएसए-बेस्ड चिप्स सम्मिलित हैं। | ||
[[जीएनयू ऑपरेटिंग सिस्टम]] का आधिकारिक कंपाइलर होने के साथ-साथ, जीसीसी को अधिकांश [[लिनक्स]] वितरण सहित कई अन्य आधुनिक यूनिक्स-जैसे कंप्यूटर ऑपरेटिंग सिस्टम द्वारा स्टैण्डर्ड कंपाइलर के रूप में स्वीकार किया गया है। [[बर्कले सॉफ्टवेयर वितरण|बर्कले सॉफ्टवेयर डिस्ट्रीब्यूशन]] फैमिली के अधिकांश ऑपरेटिंग सिस्टम भी रिलीज़ होने के पश्चात् जीसीसी में परिवर्तित हो गए, यद्यपि तब से, मुख्यतः लाइसेंसिंग कारणों से [[FreeBSD|फ्रीबीएसडी]], [[OpenBSD|ओपनबीएसडी]] और [[MacOS|मैकओएस]] [[बजना|क्लान्ग]] कंपाइलर में चले गए हैं।<ref>{{Cite web|url=https://llvm.org/Users.html|title=एलएलवीएम कंपाइलर इंफ्रास्ट्रक्चर प्रोजेक्ट|website=llvm.org}}</ref><ref>{{Cite web|title=Apple's GPLv3 purge|url=http://meta.ath0.com/2012/02/05/apples-great-gpl-purge/|access-date=2021-01-12|website=meta.ath0.com|language=en-us}}</ref><ref>{{Cite web|last=Linnemann|first=Reid|date=June 20, 2012|title=क्यों बजना|url=https://lists.freebsd.org/pipermail/freebsd-questions/2012-June/242495.html|access-date=2021-01-12}}</ref><ref>{{Cite web|date=2007-10-11|title=August 29, 2007: FreeBSD Foundation Newsletter, August 29, 2007|url=http://www.freebsdfoundation.org/press/2007Aug-newsletter.shtml#Letter|access-date=2021-01-12|archive-url=https://web.archive.org/web/20071011023649/http://www.freebsdfoundation.org/press/2007Aug-newsletter.shtml#Letter|archive-date=October 11, 2007}}</ref> जीसीसी [[Microsoft Windows|माइक्रोसॉफ़्ट विंडोज़]], [[Android (ऑपरेटिंग सिस्टम)|एंड्रॉयड (ऑपरेटिंग सिस्टम)]], [[iOS|आईओएस]], [[सोलारिस (ऑपरेटिंग सिस्टम)]], [[HP-UX|एचपी-यूएक्स]], [[IBM AIX|आईबीएम एईएक्स]] और [[DOS|डॉस]] के लिए भी कोड कंपाइल कर सकता है।<ref>{{Cite web|title=Installing GCC: Binaries - GNU Project - Free Software Foundation (FSF)|url=https://gcc.gnu.org/install/binaries.html|access-date=2021-01-12|website=gcc.gnu.org}}</ref> | |||
== इतिहास == | == इतिहास == | ||
1983 के अंत में, जीएनयू ऑपरेटिंग | 1983 के अंत में, जीएनयू ऑपरेटिंग सिस्टम को [[बूटस्ट्रैपिंग (संकलक)]]कंपाइलर) करने के प्रयास में, रिचर्ड स्टॉलमैन ने [[एम्स्टर्डम कंपाइलर किट]] (जिसे [[व्रीजे यूनिवर्सिटिट एम्स्टर्डम]] कंपाइलर किट के रूप में भी जाना जाता है) के लेखक एंड्रयू एस. टैनेनबाम से उस सॉफ़्टवेयर का उपयोग करने की अनुमति मांगी। जीएनयू. जब टैनेनबाम ने उन्हें सलाह दी कि कंपाइलर फ्री नहीं है, और केवल विश्वविद्यालय फ्री है, तो स्टॉलमैन ने एक अलग कंपाइलर पर काम करने का फैसला किया।<ref>{{cite book |last=von Hagen |first=William |date=2006 |title=जीसीसी के लिए निश्चित गाइड|edition=2nd |series=Definitive Guides |publisher=Apress |isbn=978-1-4302-0219-6 |page=XXVII |quote=इसलिए उन्होंने VUCK के लेखक को पत्र लिखकर पूछा कि क्या GNU इसका उपयोग कर सकता है। जाहिर तौर पर, VUCK का डेवलपर असहयोगी था, उसने जवाब दिया कि विश्वविद्यालय मुफ़्त था लेकिन कंपाइलर नहीं था।|url=https://books.google.com/books?id=wQ6r3UTivJgC}}</ref> उनकी प्रारंभिक योजना [[ लॉरेंस लिवरमोर राष्ट्रीय प्रयोगशाला |लॉरेंस लिवरमोर राष्ट्रीय प्रयोगशाला]] के एक मौजूदा कंपाइलर को लियोनार्ड एच. टॉवर जूनियर और अन्य की मदद से [[पेस्टल (प्रोग्रामिंग भाषा)|पेस्टल (प्रोग्रामिंग लैंग्वेज)]] से सी में फिर से लिखने की थी।<ref name=LLLCompiler>{{cite web | last = Stallman | first = Richard | title = जीएनयू प्रोजेक्ट के बारे में| publisher = The GNU Project | date = September 20, 2011 | url = https://www.gnu.org/gnu/thegnuproject.html | access-date = October 9, 2011 }}</ref><ref>{{cite journal | editor-last = Puzo | editor-first = Jerome E. | title = ग्नू का चिड़ियाघर| journal = GNU's Bulletin | volume = 1 | issue = 1 | date = February 1986 | publisher = Free Software Foundation | url = https://www.gnu.org/bulletins/bull1.txt | access-date = 2007-08-11 }}</ref> स्टॉलमैन ने लिवरमोर कंपाइलर के लिए एक नया सी फ्रंट एंड लिखा, लेकिन फिर उन्हें एहसास हुआ कि इसके लिए मेगाबाइट स्टैक स्पेस की आवश्यकता है, केवल 64 केबी वाले [[मोटोरोला 68000]] यूनिक्स सिस्टम पर असंभवता, और उन्होंने निष्कर्ष निकाला कि उन्हें स्क्रैच से एक नया कंपाइलर लिखना होगा।<ref name=LLLCompiler />पेस्टल कंपाइलर कोड में से कोई भी जीसीसी में समाप्त नहीं हुआ, हालांकि स्टॉलमैन ने अपने द्वारा लिखे गए सी फ्रंट एंड का उपयोग किया था।<ref name=LLLCompiler /><ref name=":6">{{cite book |last=von Hagen |first=William |date=2006 |title=जीसीसी के लिए निश्चित गाइड|edition=2nd |series=Definitive Guides |publisher=Apress |isbn=978-1-4302-0219-6 |page=XXVII |url=https://books.google.com/books?id=wQ6r3UTivJgC}}</ref> | ||
जीसीसी को पहली बार 22 मार्च 1987 को | जीसीसी को पहली बार 22 मार्च 1987 को जारी किया गया था, जो [[मैसाचुसेट्स की तकनीकी संस्था]] से [[फाइल ट्रांसफर प्रोटोकॉल]] द्वारा उपलब्ध था।<ref>{{cite newsgroup | title = जीएनयू सी कंपाइलर बीटा परीक्षण रिलीज| author = Richard M. Stallman (forwarded by Leonard H. Tower Jr.) | date = March 22, 1987 | newsgroup = comp.lang.c | url = https://groups.google.com/group/comp.lang.misc/msg/32eda22392c20f98 | access-date = October 9, 2011 }}</ref> स्टॉलमैन को लेखक के रूप में सूचीबद्ध किया गया था, लेकिन उनके योगदान के लिए दूसरों का हवाला दिया गया, जिसमें पार्सर के कुछ हिस्सों, आरटीएल जनरेटर, आरटीएल परिभाषाओं और वैक्स मशीन विवरण के लिए टॉवर[[स्थानांतरण भाषा पंजीकृत करें|स्थानांतरण लैंग्वेज पंजीकृत करें]] लैंग्वेज का उपयोग करने के विचार के लिए जैक डेविडसन और क्रिस्टोफर डब्ल्यू फ्रेजर सम्मिलित थे। एक मध्यवर्ती लैंग्वेज, और अधिकांश प्रीप्रोसेसर लिखने के लिए पॉल रुबिन।<ref name=GccContributors>{{ citation | last = Stallman | first = Richard M. | title = Using and Porting the GNU Compiler Collection (GCC) | chapter-url = https://gcc.gnu.org/onlinedocs/gcc-2.95.3/gcc_23.html | publisher = Free Software Foundation, Inc. | date = June 22, 2001 | orig-year = First published 1988 | chapter = Contributors to GNU CC | page = 7 | access-date = June 18, 2015 |postscript=.}}</ref> पीटर एच. सैलस द्वारा हिट किए गए पहले फ्री सॉफ्टवेयर के रूप में वर्णित, जीएनयू कंपाइलर ठीक उस समय आया जब [[सन माइक्रोसिस्टम्स]] सनओएस से अपने विकास टूल को अनबंडल कर रहा था, उन्हें पिछले बंडल की तुलना में अधिक संयुक्त मूल्य पर अलग से बेच रहा था, जिसने सन के कई को आगे बढ़ाया। उपयोगकर्ता विक्रेता के टूल के बजाय जीसीसी खरीद या डाउनलोड कर सकते हैं।<ref name="penguin">{{cite book |first=Peter H. |last=Salus |author-link=Peter H. Salus |title=डेमन, ग्नू और पेंगुइन|chapter=Chapter 10. SUN and gcc |chapter-url=http://www.groklaw.net/article.php?story=20050525231654621 |publisher=[[Groklaw]] |year=2005}}</ref> जबकि स्टॉलमैन ने [[GNU Emacs|जीएनयू Emacs]] को अपना मुख्य प्रोजेक्ट माना, 1990 तक, जीसीसी ने तेरह कंप्यूटर आर्किटेक्चर का समर्थन किया, कई विक्रेता कंपाइलरों से बेहतर प्रदर्शन कर रहा था, और कई कंपनियों द्वारा व्यावसायिक रूप से उपयोग किया गया था।<ref>{{cite news|last=Garfinkel|first=Simson L.|author-link=Simson Garfinkel|date=6 August 1990|title=जीएनयू सॉफ्टवेयर के लिए तैयार हो जाइए|page=102|newspaper=Computerworld|url=https://books.google.com/books?id=mZ0kj6qvsvYC&pg=PT101|access-date=}}</ref> | ||
=== ईजीसीएस | === ईजीसीएस फोर्क === | ||
चूंकि जीसीसी को जीपीएल के तहत लाइसेंस दिया गया था, प्रोग्रामर जो अन्य दिशाओं में काम करना चाहते थे - विशेष रूप से सी के अलावा अन्य लैंग्वेजेज के लिए इंटरफेस लिखने वाले - कंपाइलर का अपना फोर्क (सॉफ्टवेयर विकास) विकसित करने के लिए स्वतंत्र थे, बशर्ते वे जीपीएल की शर्तों को पूरा करते हों, जिसमें इसकी शर्तें भी सम्मिलित हैं सोर्स कोड वितरित करने की आवश्यकताएँ। यद्यपि, एकाधिक कांटे अकुशल और बोझिल साबित हुए, और आधिकारिक जीसीसी प्रोजेक्ट द्वारा स्वीकार किए गए काम को प्राप्त करने में कठिनाई कई लोगों के लिए बहुत निराशाजनक थी, क्योंकि प्रोजेक्ट ने नई सुविधाओं पर स्थिरता का समर्थन किया था।<ref name="egcs">{{citation | last = Henkel-Wallace | first = David | title = A new compiler project to merge the existing GCC forks | url = https://gcc.gnu.org/news/announcement.html | date = August 15, 1997 | access-date = May 25, 2012 |postscript=.}}</ref> FSF ने जीसीसी 2.x (1992 से विकसित) के आधिकारिक वर्जन में जो कुछ भी जोड़ा गया था, उस पर इतना करीबी नियंत्रण रखा कि जीसीसी का उपयोग एरिक एस. रेमंड के निबंध [[कैथेड्रल और बाज़ार]] में कैथेड्रल विकास मॉडल के एक उदाहरण के रूप में किया गया था। | |||
1997 में, | 1997 में, डेवलपर्स के एक समूह ने कई प्रायोगिक फोर्क्स को एक ही प्रोजेक्ट में मर्ज करने के लिए प्रायोगिक/उन्नत जीएनयू कंपाइलर सिस्टम (ईजीसीएस) का गठन किया।<ref name="egcs" /><ref name=":6" />विलय का आधार जीसीसी का एक विकास स्नैपशॉट था (2.7.2 के निकट लिया गया और पश्चात में 2.8.1 रिलीज तक लिया गया)। विलय में g77 (फोरट्रान), PGCC ([[P5 (माइक्रोआर्किटेक्चर)]] [[पेंटियम]]-अनुकूलित जीसीसी), सम्मिलित हैं।<ref name=":6" />कई C++ सुधार, और कई नए आर्किटेक्चर और ऑपरेटिंग सिस्टम वेरिएंट।<ref>{{Cite web|title=जीसीसी विकास का संक्षिप्त इतिहास|url=http://www.softpanorama.org/People/Stallman/history_of_gcc_development.shtml|access-date=2021-01-24|website=www.softpanorama.org}}</ref> | ||
जबकि दोनों | जबकि दोनों प्रोजेक्ट्स ने एक-दूसरे के परिवर्तनों का बारीकी से पालन किया, ईजीसीएस विकास काफी जोरदार साबित हुआ, इतना कि एफएसएफ ने आधिकारिक तौर पर अपने जीसीसी 2.x कंपाइलर पर विकास रोक दिया, ईजीसीएस को जीसीसी के आधिकारिक वर्जन के रूप में आशीर्वाद दिया, और ईजीसीएस प्रोजेक्ट को जीसीसी के रूप में नियुक्त किया। अप्रैल 1999 में अनुरक्षक, जुलाई 1999 में जीसीसी 2.95 की रिलीज़ के साथ दोनों परियोजनाएं एक बार फिर एकजुट हो गईं।<ref>{{Cite web|title=इतिहास - जीसीसी विकी|url=https://gcc.gnu.org/wiki/History#Reunification|access-date=2020-09-28|website=gcc.gnu.org}}</ref><ref name=":6" />जीसीसी का रखरखाव तब से एक संचालन समिति के निर्देशन में विश्व के प्रोग्रामरों के एक विविध समूह द्वारा किया जाता है।<ref name=":0">{{Cite web|url=https://gcc.gnu.org/steering.html|title=जीसीसी संचालन समिति - जीएनयू परियोजना|website=gcc.gnu.org}}</ref> | ||
जीसीसी 3 (2002) ने रखरखाव की कमी के कारण [[CHILL]] के लिए फ्रंट-एंड को हटा दिया।<ref>{{cite web|title=PATCH] Remove chill|url=https://gcc.gnu.org/ml/gcc-patches/2002-04/msg00887.html|access-date=July 29, 2010|website=gcc.gnu.org}}</ref> | |||
रेफरी>{{Cite web|url=https://gcc.gnu.org/gcc-4.8/changes.html|title= | |||
वर्जन 4.0 से पहले फोरट्रान फ्रंट एंड था <code>g77</code>, जो केवल [[फोरट्रान 77]] का समर्थन करता था, लेकिन पश्चात में इसे नए [[जीएनयू फोरट्रान]] फ्रंट एंड के पक्ष में छोड़ दिया गया जो [[फोरट्रान 95]] और [[फोरट्रान 2003]] और [[फोरट्रान 2008]] के बड़े हिस्सों का भी समर्थन करता है।<ref name="gcc_wiki_f2003">{{cite web|title=जीएनयू फोरट्रान द्वारा समर्थित फोरट्रान 2003 सुविधाओं का चार्ट|url=https://gcc.gnu.org/wiki/Fortran2003Status|access-date=2009-06-25|publisher=[[GNU]]}}</ref><ref name="gcc_wiki_f2008">{{cite web|title=जीएनयू फोरट्रान द्वारा समर्थित फोरट्रान 2008 सुविधाओं का चार्ट|url=https://gcc.gnu.org/wiki/Fortran2008Status|access-date=2009-06-25|publisher=[[GNU]]}}</ref> | |||
वर्जन 4.8 से, जीसीसी को C++ में लागू किया गया है। | |||
रेफरी>{{Cite web|url=https://gcc.gnu.org/gcc-4.8/changes.html|title=जीसीसी 4.8 रिलीज़ श्रृंखला - परिवर्तन, नई सुविधाएँ और सुधार - जीएनयू प्रोजेक्ट|website=gcc.gnu.org}}</ref> | |||
[[ रेशम अधिक | रेशम अधिक]] के लिए समर्थन जीसीसी 5 से जीसीसी 7 तक मौजूद था। | |||
रेफरी>{{Cite web|url=https://gcc.gnu.org/gcc-5/changes.html#c-family|title=जीसीसी 5 रिलीज़ श्रृंखला - परिवर्तन, नई सुविधाएँ और सुधार|website=gcc.gnu.org}}</ref><ref>{{Cite web|url=https://gcc.gnu.org/gcc-8/changes.html|title=GCC 8 Release Series — Changes, New Features, and Fixes|website=gcc.gnu.org}}</ref> | |||
जीसीसी विभिन्न प्रकार के निर्देश सेट आर्किटेक्चर को पोर्ट कर रहा है, और फ्री और मालिकाना सॉफ्टवेयर दोनों के विकास में एक उपकरण के रूप में व्यापक रूप से तैनात किया गया है। जीसीसी [[सिम्बियन]] (जिसे जीसीसीई कहा जाता है) सहित कई एम्बेडेड सिस्टम के लिए भी उपलब्ध है।<ref>{{cite web|url=http://www.inf.u-szeged.hu/symbian-gcc/|title=सिम्बियन जीसीसी सुधार परियोजना|access-date=2007-11-08 }}</ref> एआरएम आर्किटेक्चर परिवार-आधारित, और पावर आईएसए-आधारित चिप्स।<ref name="लिनक्स बोर्ड सपोर्ट पैकेज">{{cite web|last=|first=|date=|title=लिनक्स बोर्ड सपोर्ट पैकेज|url=http://www.freescale.com/webapp/sps/site/overview.jsp?code=CW_BSP&fsrch=1|url-status=dead|archive-url=https://web.archive.org/web/20110607140609/http://www.freescale.com/webapp/sps/site/overview.jsp?code=CW_BSP&fsrch=1|archive-date=2011-06-07|access-date=2021-01-24|website=}}</ref> कंपाइलर विभिन्न प्रकार के प्लेटफ़ॉर्म को लक्षित कर सकता है, जिसमें [[PlayStation 2]] जैसे [[ विडियो गेम कंसोल |विडियो गेम कंसोल]] भी सम्मिलित है,<ref name=":3">{{cite web|url=http://ps2stuff.playstation2-linux.com/gcc_build.html |title=जीसीसी को एक क्रॉस-कंपाइलर के रूप में स्थापित करना|work=ps2stuff |date=2002-06-08 |access-date=2008-12-12 |url-status=dead |archive-url=https://web.archive.org/web/20081211044658/http://ps2stuff.playstation2-linux.com/gcc_build.html |archive-date=December 11, 2008 }}</ref> प्लेस्टेशन 3 का सेल एसपीई,<ref name=":4">{{Cite web|url=https://gcc.gnu.org/wiki/CompileFarm|title=कंपाइलफार्म - जीसीसी विकी|website=gcc.gnu.org}}</ref> और [[ कलाकारों का सपना |कलाकारों का सपना]] ।<ref name=":5">{{cite web |url=http://www.ngine.de/gccguide.html |title=sh4 g++ guide |archive-url=https://web.archive.org/web/20021220025554/http://www.ngine.de/gccguide.html |archive-date=2002-12-20 |access-date=2008-12-12 }}</ref> इसे किसी भी अन्य कंपाइलर की तुलना में अधिक प्रकार की [[सेंट्रल प्रोसेसिंग यूनिट]] और ऑपरेटिंग सिस्टम में पोर्ट किया गया है।<ref name=":1">{{cite web|last=|first=|date=|title=लिनक्स सूचना परियोजना|url=http://www.linfo.org/gcc.html|access-date=2010-04-27|website=|publisher=LINFO|quote=The GCC has been ported to (i.e., modified to run on) more than 60 platforms, which is more than for any other compiler.}}</ref> | |||
== सपोर्टेड लैंग्वेजेज == | |||
{{As of|2021|May}}, जीसीसी की हालिया 11.1 रिलीज में [[सी (प्रोग्रामिंग भाषा)|सी (प्रोग्रामिंग लैंग्वेज)]] के लिए फ्रंट एंड सम्मिलित हैं (<code>gcc</code>), सी++ (<code>g++</code>), ऑब्जेक्टिव-सी, फोरट्रान (<code>[[gfortran]]</code>), एडा (प्रोग्रामिंग लैंग्वेज) (जीएनएटी), गो (प्रोग्रामिंग लैंग्वेज) (<code>gccgo</code>) और डी (प्रोग्रामिंग लैंग्वेज) (<code>gdc</code>, 9.1 से)<ref>{{Cite web|title=The D Language Front-End Finally Merged Into GCC 9 - Phoronix|url=https://phoronix.com/scan.php?page=news_item&px=GCC-9-Merges-D-Language|access-date=2021-01-19|website=phoronix.com}}</ref> प्रोग्रामिंग लैंग्वेज,<ref name=":7">{{cite web|url=https://gcc.gnu.org/frontends.html|title=जीसीसी फ्रंट एंड|publisher=gnu.org|access-date=November 25, 2011}}</ref> जीसीसी 5.1 के पश्चात से ओपनएमपी और ओपनएसीसी समानांतर लैंग्वेज एक्सटेंशन का समर्थन किया जा रहा है।<ref name=":2" /><ref>{{Cite web|url=https://gcc.gnu.org/gcc-5/changes.html|title=GCC 5 Release Series — Changes, New Features, and Fixes - GNU Project|website=gcc.gnu.org}}</ref> जीसीसी 7 से पहले के वर्जन भी [[जावा (प्रोग्रामिंग भाषा)|जावा (प्रोग्रामिंग लैंग्वेज)]] का समर्थन करते थे (<code>[[GNU Compiler for Java|gcj]]</code>), जावा को मूल मशीन कोड में संकलित करने की अनुमति देता है।<ref>{{cite web|title=GCC 7 Release Series|url=https://gcc.gnu.org/gcc-7/changes.html|access-date=March 20, 2018|publisher=gnu.org}}</ref> पहले तीसरे पक्ष द्वारा पेश किया गया मॉड्यूला-2 समर्थन, जीसीसी 13 में विलय कर दिया जाएगा।<ref>{{Cite web |url=https://www.theregister.com/2022/12/16/gcc_13_will_support_modula2/ |title=GCC 13 to support Modula-2: Follow-up to Pascal lives on in FOSS form |date=2022-12-16 |access-date=2022-12-19 |last=Proven |first=Liam}}</ref> | |||
C++ और C के लिए लैंग्वेज वर्जन समर्थन के संबंध में, जीसीसी 11.1 के पश्चात से डिफ़ॉल्ट लक्ष्य gnu++17 है, जो [[C++17]] का एक सुपरसेट है, और gnu11, C11 (C स्टैण्डर्ड संशोधन) का एक सुपरसेट है, जिसमें सख्त स्टैण्डर्ड समर्थन भी उपलब्ध है। जीसीसी [[C++20]] और आगामी [[C++23]] के लिए प्रायोगिक समर्थन भी प्रदान करता है।<ref>{{Cite web|title=जीसीसी में सी++ मानक समर्थन|url=https://gcc.gnu.org/projects/cxx-status.html|access-date=May 17, 2021}}</ref> | |||
कई लैंग्वेजेज के लिए तृतीय-पक्ष फ्रंट एंड मौजूद हैं, जैसे [[पास्कल (प्रोग्रामिंग भाषा)|पास्कल (प्रोग्रामिंग लैंग्वेज)]] (<code>[[GNU Pascal|gpc]]</code>), मॉड्यूला-3, और [[वीएचडीएल]] (<code>GHDL</code>)<ref name=":7" />अतिरिक्त लैंग्वेजेज का समर्थन करने के लिए कुछ प्रायोगिक शाखाएँ मौजूद हैं, जैसे कि [[एकीकृत समानांतर सी]] के लिए जीसीसी यूनिफाइड पैरेलल सी कंपाइलर<ref>{{cite web|url=http://www.gccupc.org/|title=जीसीसी यूपीसी (जीसीसी एकीकृत समानांतर सी)|publisher=Intrepid Technology, Inc.|date=2006-02-20|access-date=2009-03-11}}</ref> या जंग (प्रोग्रामिंग लैंग्वेज)।<ref>{{Cite web|title=जंग के लिए जीसीसी फ्रंट-एंड|url=https://rust-gcc.github.io|access-date=Jan 6, 2023}}</ref><ref>{{Cite web|title=जंग के लिए जीसीसी फ्रंट-एंड (जीथूब)|website=[[GitHub]] |date=January 5, 2023 |url=https://github.com/Rust-GCC/gccrs|access-date=Jan 6, 2023}}</ref><ref>{{Cite web|last=Spengler|first=Brad|date=12 January 2021|title=ओपन सोर्स सिक्योरिटी, इंक. ने रस्ट के लिए जीसीसी फ्रंट-एंड की फंडिंग की घोषणा की|url=https://opensrcsec.com/open_source_security_announces_rust_gcc_funding|access-date=|website=}}</ref> | |||
== डिजाइन == | == डिजाइन == | ||
[[File:Preprocessor.png|thumb|400x400px|जीसीसी की विस्तारित | [[File:Preprocessor.png|thumb|400x400px|जीसीसी की विस्तारित कम्पाइल पाइपलाइन का अवलोकन, जिसमें [[ preprocessor |preprocessor]] , असेंबली लैंग्वेज और [[लिंकर (कंप्यूटिंग)]] जैसे विशेष कार्यक्रम सम्मिलित हैं।]][[File:Compiler design.svg|thumb|400x400px|जीसीसी बहु-लैंग्वेज और बहु-सीपीयू [[ संकलक |संकलक]] ों के विशिष्ट 3-चरण आर्किटेक्चर का अनुसरण करता है। सभी [[सार वाक्यविन्यास वृक्ष]] को मध्य अंत में एक जेनेरिक अमूर्त प्रतिनिधित्व में परिवर्तित कर दिया जाता है, जिससे प्रोग्राम ऑप्टिमाइजेशन और [[बाइनरी कोड]] जेनरेशन सुविधाएं सभी लैंग्वेजेज द्वारा साझा की जा सकती हैं।]]जीसीसी का बाहरी इंटरफ़ेस [[यूनिक्स]] सम्मेलनों का पालन करता है। उपयोगकर्ता एक लैंग्वेज-विशिष्ट ड्राइवर प्रोग्राम शुरू करते हैं (<code>gcc</code> सी के लिए, <code>g++</code> C++, आदि के लिए), जो [[कमांड-लाइन तर्क]] की व्याख्या करता है, वास्तविक कंपाइलर को कॉल करता है, आउटपुट पर [[असेंबली भाषा असेंबलर|असेंबली लैंग्वेज असेंबलर]] चलाता है, और फिर पूर्ण [[निष्पादन]] योग्य बाइनरी बनाने के लिए वैकल्पिक रूप से लिंकर (कंप्यूटिंग) चलाता है। | ||
प्रत्येक | प्रत्येक लैंग्वेज कंपाइलर एक अलग प्रोग्राम है जो सोर्स कोड पढ़ता है और [[मशीन कोड]] आउटपुट करता है। सभी की एक समान आंतरिक संरचना होती है। एक प्रति-लैंग्वेज फ्रंट एंड उस लैंग्वेज में सोर्स कोड को [[पदच्छेद]] करता है और एक अमूर्त सिंटैक्स ट्री (संक्षेप में ट्री) तैयार करता है। | ||
यदि आवश्यक हो, तो इन्हें मध्य अंत के इनपुट प्रतिनिधित्व में परिवर्तित किया जाता है, जिसे जेनेरिक फॉर्म कहा जाता है; मध्य अंत फिर धीरे-धीरे कार्यक्रम को उसके अंतिम रूप में बदल देता है। कंपाइलर ऑप्टिमाइजेशन और स्थिर कोड एनालिसिस तकनीकें (जैसे FORTIFY_SOURCE,<ref>{{cite web|url=http://fedoraproject.org/wiki/Security/Features |title=Security Features: Compile Time Buffer Checks (FORTIFY_SOURCE) |publisher=fedoraproject.org |access-date=2009-03-11 }}</ref> एक कंपाइलर निर्देश जो कुछ [[ बफ़र अधिकता |बफ़र अधिकता]] को खोजने का प्रयास करता है) कोड पर लागू किया जाता है। ये कई अभ्यावेदन पर काम करते हैं, ज्यादातर आर्किटेक्चर-स्वतंत्र GIMPLE प्रतिनिधित्व और आर्किटेक्चर-निर्भर रजिस्टर ट्रांसफर लैंग्वेज प्रतिनिधित्व। अंत में, मशीन कोड मूल रूप से जैक डेविडसन और क्रिस फ्रेजर के एल्गोरिदम के आधार पर आर्किटेक्चर-विशिष्ट [[पैटर्न मिलान]] का उपयोग करके तैयार किया जाता है। | |||
Ada (प्रोग्रामिंग लैंग्वेज) फ्रंट एंड के कुछ हिस्सों को छोड़कर जीसीसी मुख्य रूप से C (प्रोग्रामिंग लैंग्वेज) में लिखा गया था। वितरण में | Ada (प्रोग्रामिंग लैंग्वेज) फ्रंट एंड के कुछ हिस्सों को छोड़कर जीसीसी मुख्य रूप से C (प्रोग्रामिंग लैंग्वेज) में लिखा गया था। वितरण में Ada और C++ के लिए स्टैण्डर्ड लाइब्रेरी सम्मिलित हैं जिनका कोड अधिकतर उन लैंग्वेजेज में लिखा जाता है।<ref>{{cite web |title=जीसीसी बनाने के लिए उपयोग की जाने वाली भाषाएँ|url=http://www.ohloh.net/projects/gcc/analyses/latest |url-status=dead |archive-url=https://web.archive.org/web/20080527213819/http://www.ohloh.net/projects/gcc/analyses/latest |archive-date=May 27, 2008 |access-date=14 September 2008}}</ref> कुछ प्लेटफार्मों पर, वितरण में एक निम्न-स्तरीय रनटाइम लाइब्रेरी, libgcc भी सम्मिलित है, जो मशीन-स्वतंत्र सी और प्रोसेसर-विशिष्ट मशीन कोड के संयोजन में लिखी गई है, जिसे मुख्य रूप से अंकगणितीय संचालन को संभालने के लिए डिज़ाइन किया गया है जो लक्ष्य प्रोसेसर सीधे नहीं कर सकता है।<ref>{{cite web|url=https://gcc.gnu.org/onlinedocs/gccint/Libgcc.html|title=जीसीसी आंतरिक|publisher=GCC.org|access-date=March 1, 2010}}</ref> | ||
जीसीसी अपने निर्माण में कई अतिरिक्त | जीसीसी अपने निर्माण में कई अतिरिक्त टूल का उपयोग करता है, जिनमें से कई [[पर्ल]] सहित कई यूनिक्स और लिनक्स वितरणों द्वारा डिफ़ॉल्ट रूप से इंस्टॉल किए जाते हैं (लेकिन जो, जेनेरिक रूप से, विंडोज इंस्टॉलेशन में मौजूद नहीं होते हैं), [[फ्लेक्स लेक्सिकल विश्लेषक]], [[जीएनयू बाइसन]], और अन्य जेनेरिक उपकरण। इसके अलावा, इसे बनाने के लिए वर्तमान में तीन अतिरिक्त पुस्तकालयों की आवश्यकता है: [[जीएनयू मल्टी-प्रिसिजन लाइब्रेरी]], [[ एकाधिक परिशुद्धता परिसर |एकाधिक परिशुद्धता परिसर]] और [[एमपीएफआर]]।<ref>{{Cite web|title=जीसीसी - जीएनयू प्रोजेक्ट के लिए पूर्वापेक्षाएँ|url=https://gcc.gnu.org/install/prerequisites.html|access-date=2021-09-05|website=gcc.gnu.org}}</ref> | ||
मई 2010 में, जीसीसी संचालन समिति ने जीसीसी को संकलित करने के लिए C++ कंपाइलर के उपयोग की अनुमति देने का निर्णय लिया।<ref name="gcc-c++">{{cite news | title = GCC allows C++ – to some degree | url = http://www.h-online.com/open/news/item/GCC-allows-C-to-some-degree-1012611.html | publisher = [[Heinz Heise|The H]] |date=June 1, 2010 }}</ref> कंपाइलर का उद्देश्य अधिकतर | मई 2010 में, जीसीसी संचालन समिति ने जीसीसी को संकलित करने के लिए C++ कंपाइलर के उपयोग की अनुमति देने का निर्णय लिया।<ref name="gcc-c++">{{cite news | title = GCC allows C++ – to some degree | url = http://www.h-online.com/open/news/item/GCC-allows-C-to-some-degree-1012611.html | publisher = [[Heinz Heise|The H]] |date=June 1, 2010 }}</ref> कंपाइलर का उद्देश्य अधिकतर C और C++ की विशेषताओं का एक उपसमूह लिखना था। विशेष रूप से, यह निर्णय इसलिए लिया गया ताकि जीसीसी के डेवलपर्स C++ के डिस्ट्रक्टर (कंप्यूटर विज्ञान) और [[ सामान्य प्रोग्रामिंग |जेनेरिक प्रोग्रामिंग]] सुविधाओं का उपयोग कर सकें।<ref>{{Cite web|url=https://lists.gnu.org/archive/html/emacs-devel/2010-07/msg00518.html|title=Re: Efforts to attract more users?|website=lists.gnu.org}}</ref> | ||
अगस्त 2012 में, जीसीसी संचालन समिति ने घोषणा की कि जीसीसी अब अपनी कार्यान्वयन | अगस्त 2012 में, जीसीसी संचालन समिति ने घोषणा की कि जीसीसी अब अपनी कार्यान्वयन लैंग्वेज के रूप में C++ का उपयोग करती है।<ref>{{cite web|title=GCC 4.8 Release Series: Changes, New Features, and Fixes|url=https://gcc.gnu.org/gcc-4.8/changes.html|access-date=October 4, 2013}}</ref> इसका मतलब यह है कि स्रोतों से जीसीसी बनाने के लिए, एक C++ कंपाइलर की आवश्यकता होती है जो C++03|ISO/IEC C++03 स्टैण्डर्ड को समझता हो। | ||
18 मई, 2020 को, जीसीसी C++03|ISO/IEC C++03 | 18 मई, 2020 को, जीसीसी C++03|ISO/IEC C++03 स्टैण्डर्ड से हटकर C++11|ISO/IEC C++11 स्टैण्डर्ड पर आ गया (अर्थात् कंपाइलर, बूटस्ट्रैप, कंपाइलर को स्वयं संकलित करने की आवश्यकता; द्वारा) डिफ़ॉल्ट रूप से यह C++ के पश्चात के संस्करणों को संकलित करता है)।<ref>{{cite web|title=bootstrap: Update requirement to C++11.|website=[[GitHub]] |url=https://github.com/gcc-mirror/gcc/commit/5329b59a2e13dabbe2038af0fe2e3cf5fc7f98ed|access-date=May 18, 2020}}</ref> | ||
=== | === फ्रोंट्स एंड्स === | ||
[[File:Xxx Scanner and parser example for C.gif|thumb|right|300px|फ्रंट एंड में प्रीप्रोसेसर, | [[File:Xxx Scanner and parser example for C.gif|thumb|right|300px|फ्रंट एंड में प्रीप्रोसेसर, लेक्सिकल एनालिसिस, पार्सिंग (पार्सिंग) और सिमेंटिक एनालिसिस सम्मिलित हैं। कंपाइलर फ्रंट एंड का लक्ष्य लैंग्वेज व्याकरण और शब्दार्थ के अनुसार उम्मीदवार कार्यक्रमों को स्वीकार या अस्वीकार करना, त्रुटियों की पहचान करना और पश्चात के कंपाइलर चरणों में वैध प्रोग्राम प्रतिनिधित्व को संभालना है। यह उदाहरण C (प्रोग्रामिंग लैंग्वेज) में लिखे एक सरल प्रोग्राम के लिए किए गए लेक्सर और पार्सर चरणों को दिखाता है।]]प्रत्येक [[ फ्रंट एंड (संकलक) |फ्रंट एंड (संकलक)]] किसी दिए गए सोर्स फ़ाइल के अमूर्त सिंटैक्स ट्री का उत्पादन करने के लिए एक पार्सर का उपयोग करता है। सिंटैक्स ट्री एब्स्ट्रैक्शन के कारण, विभिन्न समर्थित लैंग्वेजेज में से किसी की सोर्स फ़ाइलों को एक ही [[बैक एंड (कंपाइलर)]] द्वारा संसाधित किया जा सकता है। जीसीसी ने [[जीएनयू बाइसन]] के साथ उत्पन्न [[एलएएलआर पार्सर]] का उपयोग शुरू किया, लेकिन धीरे-धीरे 2004 में सी++ के लिए हाथ से लिखे गए [[पुनरावर्ती वंश पार्सर|रिकर्सिव डीसेंट पार्सर]] पर स्विच किया गया।<ref>{{Cite web|url=https://gcc.gnu.org/gcc-3.4/changes.html|title=GCC 3.4 Release Series — Changes, New Features, and Fixes - GNU Project|website=gcc.gnu.org}}</ref> और 2006 में सी और ऑब्जेक्टिव-सी के लिए।<ref>{{Cite web|url=https://gcc.gnu.org/gcc-4.1/changes.html|title=GCC 4.1 Release Series — Changes, New Features, and Fixes - GNU Project|website=gcc.gnu.org}}</ref> 2021 तक सभी फ्रंट एंड हाथ से लिखे गए रिकर्सिव-डिसेंट पार्सर्स का उपयोग करते हैं। | ||
जीसीसी 4.0 तक | जीसीसी 4.0 तक प्रोग्राम का ट्री प्रतिनिधित्व लक्षित प्रोसेसर से पूरी तरह स्वतंत्र नहीं था। अलग-अलग लैंग्वेज के फ्रंट एंड के लिए एक पेड़ का अर्थ कुछ अलग था, और फ्रंट एंड अपने स्वयं के ट्री कोड प्रदान कर सकते थे। इसे GENERIC और GIMPLE, लैंग्वेज-स्वतंत्र पेड़ों के दो नए रूप, जिन्हें जीसीसी 4.0 के आगमन के साथ पेश किया गया था, के साथ सरल बनाया गया था। जीसीसी 3.x जावा फ्रंट एंड के मध्यवर्ती प्रतिनिधित्व के आधार पर जेनेरिक अधिक जटिल है। GIMPLE एक सरलीकृत जेनेरिक है, जिसमें विभिन्न निर्माण (कंप्यूटर विज्ञान) को कई GIMPLE निर्देशों में कम किया जा रहा है। C (प्रोग्रामिंग लैंग्वेज), C++, और Java (प्रोग्रामिंग लैंग्वेज) फ्रंट एंड सीधे फ्रंट एंड में जेनेरिक उत्पन्न करते हैं। इसके बजाय अन्य फ्रंट सिरों में पार्सिंग के पश्चात अलग-अलग मध्यवर्ती प्रतिनिधित्व होते हैं और इन्हें जेनेरिक में परिवर्तित किया जाता है। | ||
किसी भी | किसी भी मामले में, तथाकथित जिम्प्लीफ़ायर इस अधिक जटिल रूप को सरल स्थिर एकल-असाइनमेंट फॉर्म-आधारित GIMPLE फॉर्म में परिवर्तित करता है जो बड़ी संख्या में शक्तिशाली लैंग्वेज- और आर्किटेक्चर-स्वतंत्र वैश्विक (फ़ंक्शन स्कोप) ऑप्टिमाइजेशन के लिए आम लैंग्वेज है। . | ||
=== | === जेनेरिक और जिम्पल === | ||
जेनेरिक | जेनेरिक एक [[मध्यवर्ती प्रतिनिधित्व]] लैंग्वेज है जिसका उपयोग सोर्स कोड को निष्पादन योग्य में संकलित करते समय मध्य अंत के रूप में किया जाता है। एक सबसेट, जिसे GIMPLE कहा जाता है, जीसीसी के सभी अग्र सिरों द्वारा लक्षित है। | ||
जीसीसी का मध्य चरण सभी कोड | जीसीसी का मध्य चरण सभी कोड एनालिसिस और कंपाइलर को अनुकूलित करता है, जेनेरिक से शुरू होकर, संकलित लैंग्वेज और लक्ष्य आर्किटेक्चर दोनों से स्वतंत्र रूप से काम करता है।<ref>{{Cite web|url=https://gcc.gnu.org/onlinedocs/gccint/GENERIC.html|title=सामान्य (जीएनयू कंपाइलर संग्रह (जीसीसी) आंतरिक)|website=gcc.gnu.org}}</ref> प्रतिनिधित्व और इसे रजिस्टर ट्रांसफर लैंग्वेज (आरटीएल) तक विस्तारित करना। जेनेरिक प्रतिनिधित्व में केवल मध्य अंत द्वारा अनुकूलित अनिवार्य [[कंप्यूटर प्रोग्रामिंग]] संरचनाओं का सबसेट सम्मिलित है। | ||
सोर्स कोड को GIMPLE में बदलने में,<ref>{{Cite web|url=https://gcc.gnu.org/onlinedocs/gccint/GIMPLE.html|title=जिम्पल (जीएनयू कंपाइलर कलेक्शन (जीसीसी) इंटरनल्स)|website=gcc.gnu.org}}</ref> जटिल [[अभिव्यक्ति (प्रोग्रामिंग)]] को [[अस्थायी चर]] का उपयोग करके [[तीन-पता कोड]] में विभाजित किया गया है। यह प्रतिनिधित्व मैककैट कंपाइलर में प्रस्तावित SIMPLE प्रतिनिधित्व से प्रेरित था<ref>{{cite web |url=http://www-acaps.cs.mcgill.ca/info/McCAT/McCAT.html |title=मैककैट|access-date=2017-09-14 |url-status=bot: unknown |archive-url=https://web.archive.org/web/20040812030043/http://www-acaps.cs.mcgill.ca/info/McCAT/McCAT.html |archive-date=August 12, 2004 |df=mdy-all }}</ref> लॉरी जे. हेंड्रेन द्वारा<ref>{{Cite web|url=http://www.sable.mcgill.ca/~hendren/|title=लॉरी हेंड्रेन का होम पेज|website=www.sable.mcgill.ca}}</ref> [[अनिवार्य प्रोग्रामिंग]] के एनालिसिस और [[अनुकूलन (कंप्यूटर विज्ञान)|ऑप्टिमाइजेशन (कंप्यूटर विज्ञान)]] को सरल बनाने के लिए। | |||
=== | === ऑप्टिमाइजेशन === | ||
कम्पाइल के किसी भी चरण के दौरान ऑप्टिमाइजेशन हो सकता है; यद्यपि, अधिकांश ऑप्टिमाइजेशन फ्रंट एंड के सिंटैक्स और सिमेंटिक एनालिसिस (कंपाइलर) के पश्चात और बैक एंड के कोड जेनरेशन (कंपाइलर) से पहले किए जाते हैं; इस प्रकार संकलक के इस भाग के लिए एक जेनेरिक, हालांकि कुछ हद तक आत्म-विरोधाभासी, नाम मध्य अंत है। | |||
जीसीसी | जीसीसी ऑप्टिमाइजेशन का सटीक सेट विकसित होने के साथ-साथ रिलीज से रिलीज तक भिन्न होता है, लेकिन इसमें स्टैण्डर्ड एल्गोरिदम सम्मिलित होते हैं, जैसे [[लूप अनुकूलन|लूप ऑप्टिमाइजेशन]], [[ जम्प थ्रेडिंग |जम्प थ्रेडिंग]] , [[सामान्य उपअभिव्यक्ति उन्मूलन|जेनेरिक उपअभिव्यक्ति उन्मूलन]], [[ निर्देश निर्धारण |निर्देश निर्धारण]] इत्यादि। [[GIMPLE]] पेड़ों पर वैश्विक SSA-आधारित ऑप्टिमाइजेशन के जुड़ने से रजिस्टर स्थानांतरण लैंग्वेज ऑप्टिमाइजेशन का महत्व कम हो गया है,<ref>{{cite web|url=http://www.redhat.com/magazine/002dec04/features/gcc/|title=From Source to Binary: The Inner Workings of GCC|last=Novillo|first=Diego|work=[[Red Hat#Red Hat Magazine|Red Hat Magazine]]|date=December 2004|url-status=dead|archive-url=https://web.archive.org/web/20090401215553/http://www.redhat.com/magazine/002dec04/features/gcc/|archive-date=April 1, 2009|df=mdy-all}}</ref> क्योंकि आरटीएल ऑप्टिमाइजेशन का दायरा बहुत अधिक सीमित है, और उच्च-स्तरीय जानकारी कम है। | ||
इस स्तर पर किए गए कुछ | इस स्तर पर किए गए कुछ ऑप्टिमाइजेशन में [[डेड-कोड उन्मूलन]], [[आंशिक-अतिरेक उन्मूलन]], [[वैश्विक मूल्य क्रमांकन]], [[विरल सशर्त निरंतर प्रसार]] और समुच्चय का स्केलर प्रतिस्थापन सम्मिलित हैं। [[स्वचालित वैश्वीकरण]] और [[स्वचालित समानांतरीकरण]] जैसे सरणी निर्भरता आधारित ऑप्टिमाइजेशन भी किए जाते हैं। [[प्रोफ़ाइल-निर्देशित अनुकूलन|प्रोफ़ाइल-निर्देशित ऑप्टिमाइजेशन]] भी संभव है.<ref>{{Cite web|url=https://gcc.gnu.org/install/build.html#TOC4|title=Installing GCC: Building - GNU Project|website=gcc.gnu.org}}</ref> | ||
=== बैक | === बैक एंड्स === | ||
जीसीसी का बैक एंड आंशिक रूप से [[सी प्रीप्रोसेसर]] द्वारा निर्दिष्ट | जीसीसी का बैक एंड आंशिक रूप से [[सी प्रीप्रोसेसर]] द्वारा निर्दिष्ट है और लक्ष्य आर्किटेक्चर के लिए विशिष्ट कार्य करता है, उदाहरण के लिए इसकी [[endianness]], शब्द आकार और [[ सम्मलेन बुलाना |सम्मलेन बुलाना]] को परिभाषित करने के लिए। बैक एंड का अगला भाग आरटीएल पीढ़ी तय करने में मदद के लिए इनका उपयोग करता है, इसलिए हालांकि जीसीसी का आरटीएल नाममात्र प्रोसेसर-स्वतंत्र है, अमूर्त निर्देशों का प्रारंभिक अनुक्रम पहले से ही लक्ष्य के लिए अनुकूलित है। किसी भी क्षण, प्रोग्राम प्रतिनिधित्व बनाने वाले वास्तविक आरटीएल निर्देशों को लक्ष्य वास्तुकला के [[मशीन विवरण]] का अनुपालन करना होगा। | ||
मशीन विवरण फ़ाइल में अंतिम असेंबली आउटपुट करने के लिए ऑपरेंड बाधाओं और कोड स्निपेट के साथ आरटीएल पैटर्न | मशीन विवरण फ़ाइल में अंतिम असेंबली को आउटपुट करने के लिए ऑपरेंड बाधाओं और कोड स्निपेट के साथ आरटीएल पैटर्न सम्मिलित हैं। बाधाओं से संकेत मिलता है कि एक विशेष आरटीएल पैटर्न केवल कुछ हार्डवेयर रजिस्टरों पर लागू हो सकता है (उदाहरण के लिए), या (उदाहरण के लिए) केवल सीमित आकार के तत्काल ऑपरेंड ऑफसेट की अनुमति देता है (उदाहरण के लिए 12, 16, 24, ... बिट ऑफसेट, आदि)। ). आरटीएल पीढ़ी के दौरान, दिए गए लक्ष्य आर्किटेक्चर के लिए बाधाओं की जाँच की जाती है। आरटीएल के दिए गए स्निपेट को जारी करने के लिए, इसे मशीन विवरण फ़ाइल में आरटीएल पैटर्न में से एक (या अधिक) से मेल खाना चाहिए, और उस पैटर्न के लिए बाधाओं को पूरा करना चाहिए; अन्यथा, अंतिम आरटीएल को मशीन कोड में परिवर्तित करना असंभव होगा। | ||
कम्पाइल के अंत में, वैध आरटीएल को एक सख्त रूप में घटा दिया जाता है जिसमें प्रत्येक निर्देश वास्तविक मशीन रजिस्टरों और लक्ष्य की मशीन विवरण फ़ाइल से एक पैटर्न को संदर्भित करता है। सख्त आरटीएल बनाना एक जटिल कार्य है; एक महत्वपूर्ण कदम रजिस्टर आवंटन है, जहां प्रारंभिक रूप से निर्दिष्ट छद्म-रजिस्टरों को बदलने के लिए वास्तविक हार्डवेयर रजिस्टरों को चुना जाता है। इसके पश्चात पुनः लोडिंग चरण आता है; कोई भी छद्म-रजिस्टर जिन्हें वास्तविक हार्डवेयर रजिस्टर नहीं सौंपा गया था, उन्हें स्टैक में 'स्पिल' कर दिया जाता है, और इस स्पिलिंग को करने के लिए आरटीएल उत्पन्न होता है। इसी तरह, जो ऑफसेट वास्तविक निर्देश में फिट होने के लिए बहुत बड़े हैं, उन्हें तोड़ दिया जाना चाहिए और आरटीएल अनुक्रमों द्वारा प्रतिस्थापित किया जाना चाहिए जो ऑफसेट बाधाओं का पालन करेंगे। | |||
अंतिम चरण में, | अंतिम चरण में, पुनः लोड चरण के दौरान चुने गए अंतिम रजिस्टरों, ऑफसेट और पते का उपयोग करके, लक्ष्य के निर्देश सेट से वास्तविक निर्देश उत्पन्न करने के लिए, प्रत्येक पैटर्न से जुड़े कोड के एक छोटे स्निपेट को कॉल करके मशीन कोड बनाया जाता है। असेंबली-जेनरेशन स्निपेट सिर्फ एक स्ट्रिंग हो सकता है, जिस स्थिति में स्ट्रिंग में रजिस्टरों, ऑफसेट और/या पतों का एक सरल स्ट्रिंग प्रतिस्थापन किया जाता है। असेंबली-जेनरेशन स्निपेट सी कोड का एक छोटा ब्लॉक भी हो सकता है, जो कुछ अतिरिक्त कार्य करता है, लेकिन अंततः वैध असेंबली कोड वाली एक स्ट्रिंग लौटाता है। | ||
=== | === C++ स्टैण्डर्ड लाइब्रेरी (libstdc++) === | ||
जीसीसी प्रोजेक्ट में libstdc++ नामक C++ | जीसीसी प्रोजेक्ट में libstdc++ नामक C++ स्टैण्डर्ड लाइब्रेरी का कार्यान्वयन सम्मिलित है,<ref>{{cite web|url=https://gcc.gnu.org/onlinedocs/libstdc++|title=जीएनयू सी++ लाइब्रेरी|publisher=GNU Project|accessdate=2021-02-21}}</ref> जब सोर्स जीसीसी के साथ बनाए जाते हैं तो बंद सोर्स एप्लिकेशन को लिंक करने के अपवाद के साथ GPLv3 लाइसेंस के तहत लाइसेंस प्राप्त होता है।<ref>{{cite web|url=https://gcc.gnu.org/onlinedocs/libstdc++/manual/license.html|title=लाइसेंस|publisher=GNU Project|accessdate=2021-02-21}}</ref> | ||
वर्तमान | वर्तमान वर्जन 11 है। | ||
=== अन्य विशेषताएं === | === अन्य विशेषताएं === | ||
जीसीसी की कुछ विशेषताओं में | जीसीसी की कुछ विशेषताओं में सम्मिलित हैं: | ||
; [[लिंक- | ; [[लिंक-समय अनुकूलन|लिंक-समय ऑप्टिमाइजेशन]] | ||
: लिंक-टाइम ऑप्टिमाइज़ेशन | : लिंक-टाइम ऑप्टिमाइज़ेशन लिंक किए गए बाइनरी को सीधे बेहतर बनाने के लिए ऑब्जेक्ट फ़ाइल सीमाओं में ऑप्टिमाइजेशन करता है। लिंक-टाइम ऑप्टिमाइज़ेशन एक मध्यवर्ती फ़ाइल पर निर्भर करता है जिसमें ऑब्जेक्ट फ़ाइल में सम्मिलित कुछ गिम्पल प्रतिनिधित्व का क्रमांकन होता है। फ़ाइल सोर्स कम्पाइल के दौरान ऑब्जेक्ट फ़ाइल के साथ उत्पन्न होती है। प्रत्येक सोर्स कम्पाइल एक अलग ऑब्जेक्ट फ़ाइल और लिंक-टाइम हेल्पर फ़ाइल उत्पन्न करता है। जब ऑब्जेक्ट फ़ाइलें लिंक की जाती हैं, तो कंपाइलर फिर से निष्पादित होता है और अलग-अलग संकलित ऑब्जेक्ट फ़ाइलों में कोड को अनुकूलित करने के लिए सहायक फ़ाइलों का उपयोग करता है। | ||
; प्लग-इन | ; प्लग-इन | ||
: [[प्लग-इन (कंप्यूटिंग)]] जीसीसी कंपाइलर | : [[प्लग-इन (कंप्यूटिंग)]] सीधे जीसीसी कंपाइलर का विस्तार करता है।<ref>{{cite web |title= प्लग-इन|url= https://gcc.gnu.org/onlinedocs/gccint/Plugins.html |work= GCC online documentation |access-date= July 8, 2013 }}</ref> प्लगइन्स स्टॉक कंपाइलर को प्लगइन्स के रूप में लोड किए गए बाहरी कोड द्वारा विशिष्ट आवश्यकताओं के अनुरूप बनाने की अनुमति देते हैं। उदाहरण के लिए, प्लगइन्स जिम्पल अभ्यावेदन पर काम करने वाले मध्य-अंत पास को जोड़, प्रतिस्थापित या हटा भी सकते हैं।<ref>{{cite web|last=Starynkevitch|first=Basile|title=MELT उदाहरण के माध्यम से GCC प्लगइन्स|url=http://gcc-melt.org/gcc-plugin-MELT-LinuxCollabSummit2014.pdf |archive-url=https://web.archive.org/web/20140413124801/http://gcc-melt.org/gcc-plugin-MELT-LinuxCollabSummit2014.pdf |archive-date=2014-04-13 |url-status=live|access-date=2014-04-10}}</ref> कई जीसीसी प्लगइन्स पहले ही प्रकाशित हो चुके हैं, विशेष रूप से: | ||
:* पायथन प्लगइन, जो | :* पायथन प्लगइन, जो लिबपीथॉन के विरुद्ध लिंक करता है, और किसी को कंपाइलर के अंदर से मनमानी पायथन स्क्रिप्ट को लागू करने की अनुमति देता है। इसका उद्देश्य जीसीसी प्लगइन्स को पायथन में लिखने की अनुमति देना है। | ||
:* एमईएलटी प्लगइन जीसीसी का विस्तार करने के लिए | :* एमईएलटी प्लगइन जीसीसी का विस्तार करने के लिए एक उच्च स्तरीय [[लिस्प (प्रोग्रामिंग भाषा)|लिस्प (प्रोग्रामिंग लैंग्वेज)]] जैसी लैंग्वेज प्रदान करता है।<ref>{{cite web|title=जीसीसी मेल्ट के बारे में|url=http://gcc-melt.org/|access-date=July 8, 2013|archive-url= https://archive.today/20130704015544/http://gcc-melt.org/|archive-date=July 4, 2013|url-status=live}}</ref> | ||
: प्लगइन्स का समर्थन 2007 में | : प्लगइन्स का समर्थन 2007 में एक विवादास्पद मुद्दा था।<ref>{{cite web |title=GCC unplugged [LWN.net] |url=https://lwn.net/Articles/259157/ |website=lwn.net}}</ref> | ||
; | ; C++ [[सॉफ़्टवेयर ट्रांसेक्शनल मेमोरी]] | ||
: C++ | : C++ लैंग्वेज में ट्रांसेक्शनल मेमोरी के लिए एक सक्रिय प्रस्ताव है। कम्पाइल करते समय इसे जीसीसी 6 और नए वर्जन में सक्षम किया जा सकता है <code>-fgnu-tm</code>.<ref name="gcc6"/><ref>{{Cite web|url=https://gcc.gnu.org/wiki/TransactionalMemory|title=ट्रांजेक्शनलमेमोरी - जीसीसी विकी|website=gcc.gnu.org}}</ref> | ||
; यूनिकोड | ; यूनिकोड आइडेंटिफायर | ||
: | : यद्यपि C++ लैंग्वेज को आइडेंटिफायर (कंप्यूटर लैंग्वेजेज) में गैर-ASCII [[यूनिकोड वर्ण]]ों के लिए समर्थन की आवश्यकता होती है, यह सुविधा केवल जीसीसी 10 के पश्चात से समर्थित है। स्ट्रिंग अक्षर के मौजूदा प्रबंधन के साथ, सोर्स फ़ाइल को UTF में एन्कोड किया गया माना जाता है- 8. यह सुविधा C में वैकल्पिक है, लेकिन इस परिवर्तन के पश्चात से इसे भी उपलब्ध करा दिया गया है।<ref>{{Cite web|url=https://gcc.gnu.org/legacy-ml/gcc-patches/2020-01/msg01667.html|title=Lewis Hyatt - [PATCH] wwwdocs: Document support for extended identifiers added to GCC|website=gcc.gnu.org|access-date=2020-03-27}}</ref><ref>{{Cite web|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3146.html|title=C और C++ के लिए विस्तारित पहचानकर्ता वर्णों के लिए अनुशंसाएँ|website=www.open-std.org|access-date=2020-03-27}}</ref> | ||
; सी | ; सी एक्सटेंशन | ||
: जीएनयू सी नेस्टेड | : जीएनयू सी [[नेस्टेड फ़ंक्शन]] सहित कई गैर-स्टैण्डर्ड-सुविधाओं के साथ सी प्रोग्रामिंग लैंग्वेज का विस्तार करता है<ref>{{Cite web|title=सी एक्सटेंशन (जीएनयू कंपाइलर कलेक्शन (जीसीसी) का उपयोग करके)|url=https://gcc.gnu.org/onlinedocs/gcc/C-Extensions.html|access-date=2022-01-12|website=gcc.gnu.org}}</ref> और टाइपोफ़|<code>typeof</code>भाव.<ref>{{Cite web|title=टाइपोफ़ - जीएनयू कंपाइलर संग्रह (जीसीसी) का उपयोग करना|url=https://gcc.gnu.org/onlinedocs/gcc-5.2.0/gcc/Typeof.html|access-date=2022-01-12|website=gcc.gnu.org}}</ref> | ||
== आर्किटेक्चर == | == आर्किटेक्चर == | ||
[[File:GCC DJGPP Windows.png|thumb|249x249px|जीसीसी | [[File:GCC DJGPP Windows.png|thumb|249x249px|जीसीसी कम्पाइल हैलो, विश्व! माइक्रोसॉफ्ट विंडोज़ पर प्रोग्राम]]प्राथमिक समर्थित (और सर्वोत्तम परीक्षणित) प्रोसेसर परिवार 64- और 32-बिट एआरएम हैं, 64- और 32-बिट x[[86]]_64 और x86 और 64-बिट [[पावरपीसी]] और [[SPARC]]।<ref>{{Cite web |date=2022-10-26 |title=GCC 12 Release Criteria |url=https://gcc.gnu.org/gcc-12/criteria.html |access-date=2023-01-27 |website=gcc.gnu.org}}</ref> | ||
वर्जन 11.1 के अनुसार जीसीसी लक्ष्य प्रोसेसर परिवारों में सम्मिलित हैं:<ref>{{Cite web|title=विकल्प सारांश (जीएनयू कंपाइलर संग्रह (जीसीसी) का उपयोग करके)|url=https://gcc.gnu.org/onlinedocs/gcc-10.2.0/gcc/Option-Summary.html#Option-Summary|access-date=2020-08-21|website=gcc.gnu.org}}</ref> | |||
{{div col|colwidth=15em|small=no}} | {{div col|colwidth=15em|small=no}} | ||
* | * एआर्क64 | ||
* [[डीईसी अल्फा]] | * [[डीईसी अल्फा]] | ||
* एआरएम | * एआरएम | ||
* [[एटमेल | * [[ एटमेल ए.वी.आर ]] | ||
* [[ | * [[ब्लैकफिन]] | ||
* [[ईबीपीएफ]] | * [[ईबीपीएफ]] | ||
* एडाप्टेवा # उत्पाद (जीसीसी 4.8) | * एडाप्टेवा#उत्पाद (जीसीसी 4.8) | ||
* हिताची | * हिताची H8|H8/300 | ||
* | * एचसी12 | ||
* [[आईए-32]] (x86) | *[[आईए-32]] (x86) | ||
* [[IA-64]] (इंटेल इटेनियम) | * [[IA-64]] (इंटेल इटेनियम) | ||
* [[एमआईपीएस | * [[एमआईपीएस वास्तुकला]] | ||
* मोटोरोला 68000 | * मोटोरोला 68000 | ||
* [[एमएसपी430]] | * [[एमएसपी430]] | ||
Line 161: | Line 119: | ||
* [[एनवीडिया पीटीएक्स]] | * [[एनवीडिया पीटीएक्स]] | ||
* [[पीए-जोखिम]] | * [[पीए-जोखिम]] | ||
* [[पीडीपी-11]] | *[[पीडीपी-11]] | ||
* पावरपीसी | * पावरपीसी | ||
* [[ | * [[आर8सी]]/[[एम16सी]]/एम32सी | ||
* [[RISC-वी]]ी | * [[ RISC-वी ]]ी | ||
* स्पार्क | *स्पार्क | ||
* [[सुपर एच]] | *[[ सुपर एच ]]एच | ||
* सिस्टम/390 / [[zSeries]] | * सिस्टम/390/[[zSeries]] | ||
* [[वैक्स]] | *[[वैक्स]] | ||
* [[x86-64]] | *[[x86-64]] | ||
{{Refend}} | {{Refend}} | ||
स्टैण्डर्ड रिलीज़ में समर्थित कम-ज्ञात लक्ष्य प्रोसेसर में सम्मिलित हैं: | |||
{{div col|colwidth=15em|small=no}} | {{div col|colwidth=15em|small=no}} | ||
* [[ | * [[68एचसी11]] | ||
* ए29के | *ए29के | ||
* | * [[C6x]] | ||
* सीआर16 | * [[सीआर16]] | ||
* डी30वी | * [[डी30वी]] | ||
* | *डीएसपी16xx | ||
* [[ईट्रैक्स | * [[ईट्रैक्स संकट]] | ||
* [[ | * [[बेवफा एफआर]]|FR-30 | ||
* [[FR-वी]]ी | * [[ FR-वी ]]ी | ||
* आईबीएम | * [[आईबीएम रोम्प]] | ||
* [[इंटेल i960]] | * [[इंटेल i960]] | ||
* [[आईपी2000]] | *[[आईपी2000]] | ||
* एम32आर | *एम32आर | ||
* [[ | * [[एमसीओआरई]] | ||
* एमआईएल-एसटीडी-1750ए | * [[एमआईएल-एसटीडी-1750ए]] | ||
* | * एमएमएक्स | ||
* [[एमएन10200]] | * [[एमएन10200]] | ||
* [[एमएन10300]] | * [[एमएन10300]] | ||
* [[मोटोरोला 88000]] | * [[मोटोरोला 88000]] | ||
* [[ | * [[NS320xx]] | ||
* आरएल78 | * आरएल78 | ||
* | * [[तूफ़ानी16]] | ||
* | *[[वी850]] | ||
* [[Xtensa]] | *[[Xtensa]] | ||
{{Refend}} | {{Refend}} | ||
अतिरिक्त प्रोसेसर को | |||
अतिरिक्त प्रोसेसर को एफएसएफ वर्जन से अलग बनाए गए जीसीसी संस्करणों द्वारा समर्थित किया गया है: | |||
{{div col|colwidth=15em|small=no}} | {{div col|colwidth=15em|small=no}} | ||
* [[ | * [[कॉर्टस APS3]] | ||
* [[एआरसी (प्रोसेसर)]] | * [[एआरसी (प्रोसेसर)]] | ||
* एवीआर32 | *एवीआर32 | ||
* [[ | * [[सी166]] और सी167 | ||
* [[डी10वी]] | |||
* [[मछली]] | *[[ मछली ]] | ||
* [[ईएसआई-आरआईएससी]] | * [[ईएसआई-आरआईएससी]] | ||
* | * [[षट्कोण (प्रोसेसर)]]<ref>{{Cite web |url=https://www.codeaurora.org/xwiki/bin/Hexagon/ |title=हेक्सागोन प्रोजेक्ट विकी|url-status=dead |access-date=May 19, 2011 |archive-url=https://web.archive.org/web/20120323192748/https://www.codeaurora.org/xwiki/bin/Hexagon/ |archive-date=March 23, 2012}}</ref> | ||
* | * [[LatticeMico32]] | ||
* | * [[LatticeMico8]] | ||
* [[एमईपी]] | * [[एमईपी]] | ||
* [[MicroBlaze]]़ | * [[ MicroBlaze ]]़ | ||
* [[मोटोरोला 6809]] | * [[मोटोरोला 6809]] | ||
* एमएसपी430 | * एमएसपी430 | ||
* [[एनईसी एसएक्स | * [[ एनईसी एसएक्स वास्तुकला ]]<ref>{{Cite web|url=https://code.google.com/archive/p/sx-gcc|title=Google कोड संग्रह - Google कोड प्रोजेक्ट होस्टिंग के लिए दीर्घकालिक भंडारण।|website=code.google.com}}</ref> | ||
* [[Nios II]] और [[Nios | * [[Nios II]] और [[Nios एंबेडेड प्रोसेसर]] | ||
* [[ओपनआरआईएससी]] | * [[ओपनआरआईएससी]] | ||
* [[पीडीपी-10]] | *[[पीडीपी-10]] | ||
* PIC30#PIC24 और dsPIC 16-बिट | * PIC30#PIC24 और dsPIC 16-बिट माइक्रोकंट्रोलर|PIC24/dsPIC | ||
* PIC30#PIC32 32-बिट माइक्रोकंट्रोलर | * PIC30#PIC32 32-बिट माइक्रोकंट्रोलर | ||
* [[लंबन प्रोपेलर]] | *[[लंबन प्रोपेलर]] | ||
* [[एचपी शनि]] (HP48XGCC) | * [[ एचपी शनि ]] (HP48XGCC) | ||
* सिस्टम/370 | * सिस्टम/370 | ||
* [[ | * [[TIGCC]] ([[m68k]] वैरिएंट) | ||
* [[टीएमएस9900]] | *[[टीएमएस9900]] | ||
* [[ट्राईकोर]] | * [[ट्राईकोर]] | ||
* [[Z8000]] | * [[Z8000]] | ||
* [[ZPU (माइक्रोप्रोसेसर)]] | * [[ZPU (माइक्रोप्रोसेसर)]] | ||
{{Refend}} | {{Refend}} | ||
जावा | |||
[[जावा के लिए जीएनयू कंपाइलर]] जावा कंपाइलर या तो मूल मशीन लैंग्वेज आर्किटेक्चर या [[जावा वर्चुअल मशीन]] के [[जावा बाइटकोड]] को लक्षित कर सकता है।<ref>{{cite web|url=https://gcc.gnu.org/java/|title=जावा प्रोग्रामिंग भाषा के लिए जीएनयू कंपाइलर|access-date=2010-04-22|url-status=dead|archive-url=https://web.archive.org/web/20070509055923/http://gcc.gnu.org/java/|archive-date=May 9, 2007|df=mdy-all}}</ref> जब जीसीसी को एक नए प्लेटफॉर्म पर [[पुन: लक्ष्यीकरणीय संकलक]] बनाया जाता है, तो अक्सर बूटस्ट्रैपिंग (कंपाइलर) का उपयोग किया जाता है। विभिन्न टेक्सास इंस्ट्रूमेंट्स, हेवलेट पैकार्ड, शार्प और कैसियो प्रोग्रामेबल ग्राफिंग कैलकुलेटर के लिए विकसित जीसीसी संस्करणों में मोटोरोला 68000, ज़िलॉग ज़ेड80 और अन्य प्रोसेसर को भी लक्षित किया गया है।<ref>graphing calculators#programming</ref> | |||
== लाइसेंस == | == लाइसेंस == | ||
जीसीसी को जीएनयू जनरल पब्लिक लाइसेंस वर्जन 3 के अंतर्गत लाइसेंस | जीसीसी को जीएनयू जनरल पब्लिक लाइसेंस वर्जन 3 के अंतर्गत लाइसेंस प्राप्त है।<ref>{{Cite web|url=https://gcc.gnu.org/onlinedocs/gcc/Copying.html#Copying|title=जीएनयू कंपाइलर संग्रह का उपयोग करना|website=gnu.org|access-date=2019-11-05}}</ref> जीसीसी रनटाइम एक्सेप्शन जीसीसी के साथ प्रोप्राइटरी प्रोग्राम्स (फ्री सॉफ्टवेयर के अतिरिक्त) के कम्पाइलेशन की अनुमति देता है। यह जीसीसी सोर्स कोड की लाइसेंस स्थितियों को प्रभावित नहीं करता है।<ref>{{cite web|publisher=FSF|title=जीसीसी रनटाइम अपवाद|url=https://www.gnu.org/licenses/gcc-exception|access-date=2014-04-10}}</ref> | ||
== यह भी देखें == | == यह भी देखें == | ||
{{Portal|Free and open-source software|Computer programming}} | {{Portal|Free and open-source software|Computer programming}} | ||
* | * कंपाइलरों की लिस्ट | ||
* | * मिनजीडब्ल्यू | ||
* [[एलएलवीएम]]/क्लैंग | * [[एलएलवीएम]]/क्लैंग | ||
Line 252: | Line 213: | ||
== बाहरी संबंध == | == बाहरी संबंध == | ||
=== आधिकारिक === | === आधिकारिक === | ||
* [https://gcc.gnu.org/releases.html जीसीसी रिलीज टाइमलाइन] | * [https://gcc.gnu.org/releases.html जीसीसी रिलीज टाइमलाइन] | ||
* [https://gcc.gnu.org/develop.html#timeline जीसीसी विकास योजना] | * [https://gcc.gnu.org/develop.html#timeline जीसीसी विकास योजना] | ||
=== अन्य === | === अन्य === | ||
* [http://www.cse.iitb.ac.in/grc/ जीसीसी 4.0.2 आर्किटेक्चर और आंतरिक दस्तावेजों का संग्रह] | * [http://www.cse.iitb.ac.in/grc/ जीसीसी 4.0.2 आर्किटेक्चर और आंतरिक दस्तावेजों का संग्रह] आई.आई.टी. में। बंबई | ||
* {{cite news |date=March 2, 2006 |title=अनुकूलन पर | * {{cite news |date=March 2, 2006 |title=नई जीसीसी अनुकूलन पर भारी|publisher= internetnews.com |last= Kerner |first=Sean Michael |url = http://www.internetnews.com/dev-news/article.php/3588926 |postscript=none}} | ||
* {{cite news |date=April 22, 2005 |title=ओपन सोर्स जीसीसी 4.0: पुराना, | * {{cite news |date=April 22, 2005 |title=ओपन सोर्स जीसीसी 4.0: पुराना, तेज़|publisher=internetnews.com |last=Kerner |first=Sean Michael |url=http://www.internetnews.com/dev-news/article.php/3499881 |postscript=none |access-date=October 21, 2006 |archive-date=September 17, 2006 |archive-url=https://web.archive.org/web/20060917233745/http://www.internetnews.com/dev-news/article.php/3499881 |url-status=dead }} | ||
* [https://web.archive.org/web/20090401215553/http://www.redhat.com/magazine/002dec04/features/gcc/ | * [https://web.archive.org/web/20090401215553/http://www.redhat.com/magazine/002dec04/features/gcc/ फ्रॉम सोर्स टू बाइनरी: द इनर वर्किंग ऑफ जीसीसी], डिएगो नोविलो द्वारा, रेड हैट#रेड हैट मैगज़ीन, दिसंबर 2004 | ||
* [http://gcc.gnu.org/pub/gcc/summit/2003/GENERIC%20and%20GIMPLE.pdf | * [http://gcc.gnu.org/pub/gcc/summit/2003/GENERIC%20and%20GIMPLE.pdf जेनेरिक और GIMPLE पर 2003 का एक पेपर] | ||
* [https://web.archive.org/web/20171022105307/http://www.toad.com/gnu/cygnus/index.html मार्केटिंग | * [https://web.archive.org/web/20171022105307/http://www.toad.com/gnu/cygnus/index.html मार्केटिंग सिग्नस सपोर्ट], 1990 के दशक के जीसीसी विकास को कवर करने वाला एक निबंध, 30 मासिक के साथ अंत में इनसाइड सिग्नस इंजीनियरिंग अनुभाग के लिए रिपोर्ट | ||
* [http://oldhome.schmorp.de/egcs.html ईजीसीएस 1.0 घोषणा] | * [http://oldhome.schmorp.de/egcs.html ईजीसीएस 1.0 घोषणा] | ||
* [https://gcc.gnu.org/egcs-1.0/features.html EGCS 1.0 सुविधाओं की सूची] | * [https://gcc.gnu.org/egcs-1.0/features.html EGCS 1.0 सुविधाओं की सूची] | ||
* [http://linuxmafia.com/faq/Licensing_and_Law/forking.html | * [http://linuxmafia.com/faq/Licensing_and_Law/forking.html फोर्किंग का डर], रिक मोएन का एक निबंध जिसमें जीसीसी/ईजीसीएस सहित सात प्रसिद्ध फोर्क्स की रिकॉर्डिंग है। | ||
[[Category: | [[Category:All Wikipedia articles in need of updating]] | ||
[[Category: | [[Category:All articles containing potentially dated statements]] | ||
[[Category:All articles lacking reliable references]] | |||
[[Category:All articles with self-published sources]] | |||
[[Category:All articles with unsourced statements]] | |||
[[Category:All articles with vague or ambiguous time]] | |||
[[Category:Articles containing potentially dated statements from May 2021]] | |||
[[Category:Articles lacking reliable references from January 2021]] | |||
[[Category:Articles lacking reliable references from January 2022]] | |||
[[Category:Articles with invalid date parameter in template]] | |||
[[Category:Articles with self-published sources from January 2021]] | |||
[[Category:Articles with unsourced statements from January 2016]] | |||
[[Category:CS1 English-language sources (en)]] | |||
[[Category:CS1 maint]] | |||
[[Category:Collapse templates]] | |||
[[Category:Lua-based templates]] | |||
[[Category:Multi-column templates]] | |||
[[Category:Navigational boxes| ]] | |||
[[Category:Navigational boxes without horizontal lists]] | |||
[[Category:Official website missing URL]] | |||
[[Category:Pages using div col with small parameter]] | |||
[[Category:Pages with empty portal template]] | |||
[[Category:Pages with script errors]] | |||
[[Category:Portal templates with redlinked portals]] | |||
[[Category:Short description with empty Wikidata description]] | |||
[[Category:Sidebars with styles needing conversion]] | |||
[[Category:Template documentation pages|Documentation/doc]] | |||
[[Category:Templates Vigyan Ready]] | |||
[[Category:Templates generating microformats]] | |||
[[Category:Templates that add a tracking category]] | |||
[[Category:Templates that are not mobile friendly]] | |||
[[Category:Templates that generate short descriptions]] | |||
[[Category:Templates using TemplateData]] | |||
[[Category:Templates using under-protected Lua modules]] | |||
[[Category:Use mdy dates from March 2015]] | |||
[[Category:Vague or ambiguous time from June 2022]] | |||
[[Category:Wikipedia articles in need of updating from January 2023]] | |||
[[Category:Wikipedia articles needing clarification from January 2021]] | |||
[[Category:Wikipedia fully protected templates|Div col]] | |||
[[Category:Wikipedia metatemplates]] |
Latest revision as of 15:44, 27 October 2023
जीएनयू कंपाइलर कलेक्शन (जीसीसी) जीएनयू प्रोजेक्ट द्वारा निर्मित ऑप्टिमाइज़िंग कंपाइलर है जो विभिन्न प्रोग्रामिंग लैंग्वेजेज, कंप्यूटर आर्किटेक्चर और ऑपरेटिंग सिस्टम को सपोर्ट करता है। फ्री सॉफ्टवेयर फाउंडेशन (एफएसएफ) जीएनयू जनरल पब्लिक लाइसेंस (जीएनयू जीपीएल) के अंतर्गत जीसीसी को फ्री सॉफ्टवेयर के रूप में वितरित करता है। जीसीसी जीएनयू टूलचेन का प्रमुख घटक है और जीएनयू तथा लिनक्स कर्नेल से संबंधित अधिकांश प्रोजेक्ट्स के लिए स्टैण्डर्ड कंपाइलर है। 2019 में कोड की लगभग 15 मिलियन लाइनों के साथ, जीसीसी अस्तित्व में सबसे बड़े फ्री प्रोग्रामों में से एक है।[1] इसने फ्री सॉफ़्टवेयर के विकास में टूल और उदाहरण दोनों के रूप में महत्वपूर्ण भूमिका निभाई है।
जब इसे सर्वप्रथम 1987 में रिचर्ड स्टालमैन द्वारा प्रस्तावित किया गया था, तो जीसीसी 1.0 को जीएनयू C कंपाइलर नाम दिया गया था क्योंकि यह केवल C (प्रोग्रामिंग लैंग्वेज) को हैंडल करता था।[2] इसे उसी वर्ष दिसंबर में C++ कंपाइल करने के लिए विस्तारित किया गया था। कंपाइलर फ्रंट एंड को पश्चात में ऑब्जेक्टिव C, ऑब्जेक्टिव- C ++, फोरट्रान, एडा (प्रोग्रामिंग लैंग्वेज), डी (प्रोग्रामिंग लैंग्वेज), गो (प्रोग्रामिंग लैंग्वेज) और रस्ट (प्रोग्रामिंग लैंग्वेज) के लिए विकसित किया गया था।[3][4] ओपनएमपी और ओपनएसीसी स्पेसिफिकेशन्स C और C++ कंपाइलरों में भी समर्थित हैं।[5][6]
जीसीसी किसी भी अन्य कंपाइलर की उपमा में अधिक प्लेटफार्मों और इंस्ट्रक्शन सेट आर्चिटेक्टर्स पर पोर्टिंग कर रहा है, और फ्री तथा प्रोप्राइटरी सॉफ्टवेयर दोनों के विकास में टूल के रूप में इसे व्यापक रूप से नियुक्त किया गया है। जीसीसी कई एम्बेडेड सिस्टम्स के लिए भी उपलब्ध है, जिसमें एआरएम आर्किटेक्चर एआरएम-बेस्ड और पावर आईएसए-बेस्ड चिप्स सम्मिलित हैं।
जीएनयू ऑपरेटिंग सिस्टम का आधिकारिक कंपाइलर होने के साथ-साथ, जीसीसी को अधिकांश लिनक्स वितरण सहित कई अन्य आधुनिक यूनिक्स-जैसे कंप्यूटर ऑपरेटिंग सिस्टम द्वारा स्टैण्डर्ड कंपाइलर के रूप में स्वीकार किया गया है। बर्कले सॉफ्टवेयर डिस्ट्रीब्यूशन फैमिली के अधिकांश ऑपरेटिंग सिस्टम भी रिलीज़ होने के पश्चात् जीसीसी में परिवर्तित हो गए, यद्यपि तब से, मुख्यतः लाइसेंसिंग कारणों से फ्रीबीएसडी, ओपनबीएसडी और मैकओएस क्लान्ग कंपाइलर में चले गए हैं।[7][8][9][10] जीसीसी माइक्रोसॉफ़्ट विंडोज़, एंड्रॉयड (ऑपरेटिंग सिस्टम), आईओएस, सोलारिस (ऑपरेटिंग सिस्टम), एचपी-यूएक्स, आईबीएम एईएक्स और डॉस के लिए भी कोड कंपाइल कर सकता है।[11]
इतिहास
1983 के अंत में, जीएनयू ऑपरेटिंग सिस्टम को बूटस्ट्रैपिंग (संकलक)कंपाइलर) करने के प्रयास में, रिचर्ड स्टॉलमैन ने एम्स्टर्डम कंपाइलर किट (जिसे व्रीजे यूनिवर्सिटिट एम्स्टर्डम कंपाइलर किट के रूप में भी जाना जाता है) के लेखक एंड्रयू एस. टैनेनबाम से उस सॉफ़्टवेयर का उपयोग करने की अनुमति मांगी। जीएनयू. जब टैनेनबाम ने उन्हें सलाह दी कि कंपाइलर फ्री नहीं है, और केवल विश्वविद्यालय फ्री है, तो स्टॉलमैन ने एक अलग कंपाइलर पर काम करने का फैसला किया।[12] उनकी प्रारंभिक योजना लॉरेंस लिवरमोर राष्ट्रीय प्रयोगशाला के एक मौजूदा कंपाइलर को लियोनार्ड एच. टॉवर जूनियर और अन्य की मदद से पेस्टल (प्रोग्रामिंग लैंग्वेज) से सी में फिर से लिखने की थी।[13][14] स्टॉलमैन ने लिवरमोर कंपाइलर के लिए एक नया सी फ्रंट एंड लिखा, लेकिन फिर उन्हें एहसास हुआ कि इसके लिए मेगाबाइट स्टैक स्पेस की आवश्यकता है, केवल 64 केबी वाले मोटोरोला 68000 यूनिक्स सिस्टम पर असंभवता, और उन्होंने निष्कर्ष निकाला कि उन्हें स्क्रैच से एक नया कंपाइलर लिखना होगा।[13]पेस्टल कंपाइलर कोड में से कोई भी जीसीसी में समाप्त नहीं हुआ, हालांकि स्टॉलमैन ने अपने द्वारा लिखे गए सी फ्रंट एंड का उपयोग किया था।[13][15] जीसीसी को पहली बार 22 मार्च 1987 को जारी किया गया था, जो मैसाचुसेट्स की तकनीकी संस्था से फाइल ट्रांसफर प्रोटोकॉल द्वारा उपलब्ध था।[16] स्टॉलमैन को लेखक के रूप में सूचीबद्ध किया गया था, लेकिन उनके योगदान के लिए दूसरों का हवाला दिया गया, जिसमें पार्सर के कुछ हिस्सों, आरटीएल जनरेटर, आरटीएल परिभाषाओं और वैक्स मशीन विवरण के लिए टॉवरस्थानांतरण लैंग्वेज पंजीकृत करें लैंग्वेज का उपयोग करने के विचार के लिए जैक डेविडसन और क्रिस्टोफर डब्ल्यू फ्रेजर सम्मिलित थे। एक मध्यवर्ती लैंग्वेज, और अधिकांश प्रीप्रोसेसर लिखने के लिए पॉल रुबिन।[17] पीटर एच. सैलस द्वारा हिट किए गए पहले फ्री सॉफ्टवेयर के रूप में वर्णित, जीएनयू कंपाइलर ठीक उस समय आया जब सन माइक्रोसिस्टम्स सनओएस से अपने विकास टूल को अनबंडल कर रहा था, उन्हें पिछले बंडल की तुलना में अधिक संयुक्त मूल्य पर अलग से बेच रहा था, जिसने सन के कई को आगे बढ़ाया। उपयोगकर्ता विक्रेता के टूल के बजाय जीसीसी खरीद या डाउनलोड कर सकते हैं।[18] जबकि स्टॉलमैन ने जीएनयू Emacs को अपना मुख्य प्रोजेक्ट माना, 1990 तक, जीसीसी ने तेरह कंप्यूटर आर्किटेक्चर का समर्थन किया, कई विक्रेता कंपाइलरों से बेहतर प्रदर्शन कर रहा था, और कई कंपनियों द्वारा व्यावसायिक रूप से उपयोग किया गया था।[19]
ईजीसीएस फोर्क
चूंकि जीसीसी को जीपीएल के तहत लाइसेंस दिया गया था, प्रोग्रामर जो अन्य दिशाओं में काम करना चाहते थे - विशेष रूप से सी के अलावा अन्य लैंग्वेजेज के लिए इंटरफेस लिखने वाले - कंपाइलर का अपना फोर्क (सॉफ्टवेयर विकास) विकसित करने के लिए स्वतंत्र थे, बशर्ते वे जीपीएल की शर्तों को पूरा करते हों, जिसमें इसकी शर्तें भी सम्मिलित हैं सोर्स कोड वितरित करने की आवश्यकताएँ। यद्यपि, एकाधिक कांटे अकुशल और बोझिल साबित हुए, और आधिकारिक जीसीसी प्रोजेक्ट द्वारा स्वीकार किए गए काम को प्राप्त करने में कठिनाई कई लोगों के लिए बहुत निराशाजनक थी, क्योंकि प्रोजेक्ट ने नई सुविधाओं पर स्थिरता का समर्थन किया था।[20] FSF ने जीसीसी 2.x (1992 से विकसित) के आधिकारिक वर्जन में जो कुछ भी जोड़ा गया था, उस पर इतना करीबी नियंत्रण रखा कि जीसीसी का उपयोग एरिक एस. रेमंड के निबंध कैथेड्रल और बाज़ार में कैथेड्रल विकास मॉडल के एक उदाहरण के रूप में किया गया था।
1997 में, डेवलपर्स के एक समूह ने कई प्रायोगिक फोर्क्स को एक ही प्रोजेक्ट में मर्ज करने के लिए प्रायोगिक/उन्नत जीएनयू कंपाइलर सिस्टम (ईजीसीएस) का गठन किया।[20][15]विलय का आधार जीसीसी का एक विकास स्नैपशॉट था (2.7.2 के निकट लिया गया और पश्चात में 2.8.1 रिलीज तक लिया गया)। विलय में g77 (फोरट्रान), PGCC (P5 (माइक्रोआर्किटेक्चर) पेंटियम-अनुकूलित जीसीसी), सम्मिलित हैं।[15]कई C++ सुधार, और कई नए आर्किटेक्चर और ऑपरेटिंग सिस्टम वेरिएंट।[21] जबकि दोनों प्रोजेक्ट्स ने एक-दूसरे के परिवर्तनों का बारीकी से पालन किया, ईजीसीएस विकास काफी जोरदार साबित हुआ, इतना कि एफएसएफ ने आधिकारिक तौर पर अपने जीसीसी 2.x कंपाइलर पर विकास रोक दिया, ईजीसीएस को जीसीसी के आधिकारिक वर्जन के रूप में आशीर्वाद दिया, और ईजीसीएस प्रोजेक्ट को जीसीसी के रूप में नियुक्त किया। अप्रैल 1999 में अनुरक्षक, जुलाई 1999 में जीसीसी 2.95 की रिलीज़ के साथ दोनों परियोजनाएं एक बार फिर एकजुट हो गईं।[22][15]जीसीसी का रखरखाव तब से एक संचालन समिति के निर्देशन में विश्व के प्रोग्रामरों के एक विविध समूह द्वारा किया जाता है।[23]
जीसीसी 3 (2002) ने रखरखाव की कमी के कारण CHILL के लिए फ्रंट-एंड को हटा दिया।[24]
वर्जन 4.0 से पहले फोरट्रान फ्रंट एंड था g77
, जो केवल फोरट्रान 77 का समर्थन करता था, लेकिन पश्चात में इसे नए जीएनयू फोरट्रान फ्रंट एंड के पक्ष में छोड़ दिया गया जो फोरट्रान 95 और फोरट्रान 2003 और फोरट्रान 2008 के बड़े हिस्सों का भी समर्थन करता है।[25][26]
वर्जन 4.8 से, जीसीसी को C++ में लागू किया गया है। रेफरी>"जीसीसी 4.8 रिलीज़ श्रृंखला - परिवर्तन, नई सुविधाएँ और सुधार - जीएनयू प्रोजेक्ट". gcc.gnu.org.</ref>
रेशम अधिक के लिए समर्थन जीसीसी 5 से जीसीसी 7 तक मौजूद था। रेफरी>"जीसीसी 5 रिलीज़ श्रृंखला - परिवर्तन, नई सुविधाएँ और सुधार". gcc.gnu.org.</ref>[27] जीसीसी विभिन्न प्रकार के निर्देश सेट आर्किटेक्चर को पोर्ट कर रहा है, और फ्री और मालिकाना सॉफ्टवेयर दोनों के विकास में एक उपकरण के रूप में व्यापक रूप से तैनात किया गया है। जीसीसी सिम्बियन (जिसे जीसीसीई कहा जाता है) सहित कई एम्बेडेड सिस्टम के लिए भी उपलब्ध है।[28] एआरएम आर्किटेक्चर परिवार-आधारित, और पावर आईएसए-आधारित चिप्स।[29] कंपाइलर विभिन्न प्रकार के प्लेटफ़ॉर्म को लक्षित कर सकता है, जिसमें PlayStation 2 जैसे विडियो गेम कंसोल भी सम्मिलित है,[30] प्लेस्टेशन 3 का सेल एसपीई,[31] और कलाकारों का सपना ।[32] इसे किसी भी अन्य कंपाइलर की तुलना में अधिक प्रकार की सेंट्रल प्रोसेसिंग यूनिट और ऑपरेटिंग सिस्टम में पोर्ट किया गया है।[33]
सपोर्टेड लैंग्वेजेज
As of May 2021[update], जीसीसी की हालिया 11.1 रिलीज में सी (प्रोग्रामिंग लैंग्वेज) के लिए फ्रंट एंड सम्मिलित हैं (gcc
), सी++ (g++
), ऑब्जेक्टिव-सी, फोरट्रान (gfortran
), एडा (प्रोग्रामिंग लैंग्वेज) (जीएनएटी), गो (प्रोग्रामिंग लैंग्वेज) (gccgo
) और डी (प्रोग्रामिंग लैंग्वेज) (gdc
, 9.1 से)[34] प्रोग्रामिंग लैंग्वेज,[35] जीसीसी 5.1 के पश्चात से ओपनएमपी और ओपनएसीसी समानांतर लैंग्वेज एक्सटेंशन का समर्थन किया जा रहा है।[6][36] जीसीसी 7 से पहले के वर्जन भी जावा (प्रोग्रामिंग लैंग्वेज) का समर्थन करते थे (gcj
), जावा को मूल मशीन कोड में संकलित करने की अनुमति देता है।[37] पहले तीसरे पक्ष द्वारा पेश किया गया मॉड्यूला-2 समर्थन, जीसीसी 13 में विलय कर दिया जाएगा।[38]
C++ और C के लिए लैंग्वेज वर्जन समर्थन के संबंध में, जीसीसी 11.1 के पश्चात से डिफ़ॉल्ट लक्ष्य gnu++17 है, जो C++17 का एक सुपरसेट है, और gnu11, C11 (C स्टैण्डर्ड संशोधन) का एक सुपरसेट है, जिसमें सख्त स्टैण्डर्ड समर्थन भी उपलब्ध है। जीसीसी C++20 और आगामी C++23 के लिए प्रायोगिक समर्थन भी प्रदान करता है।[39]
कई लैंग्वेजेज के लिए तृतीय-पक्ष फ्रंट एंड मौजूद हैं, जैसे पास्कल (प्रोग्रामिंग लैंग्वेज) (gpc
), मॉड्यूला-3, और वीएचडीएल (GHDL
)[35]अतिरिक्त लैंग्वेजेज का समर्थन करने के लिए कुछ प्रायोगिक शाखाएँ मौजूद हैं, जैसे कि एकीकृत समानांतर सी के लिए जीसीसी यूनिफाइड पैरेलल सी कंपाइलर[40] या जंग (प्रोग्रामिंग लैंग्वेज)।[41][42][43]
डिजाइन
![](https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/Preprocessor.png/400px-Preprocessor.png)
![](https://upload.wikimedia.org/wikipedia/commons/thumb/c/cc/Compiler_design.svg/langen-gb-400px-Compiler_design.svg.png)
जीसीसी का बाहरी इंटरफ़ेस यूनिक्स सम्मेलनों का पालन करता है। उपयोगकर्ता एक लैंग्वेज-विशिष्ट ड्राइवर प्रोग्राम शुरू करते हैं (gcc
सी के लिए, g++
C++, आदि के लिए), जो कमांड-लाइन तर्क की व्याख्या करता है, वास्तविक कंपाइलर को कॉल करता है, आउटपुट पर असेंबली लैंग्वेज असेंबलर चलाता है, और फिर पूर्ण निष्पादन योग्य बाइनरी बनाने के लिए वैकल्पिक रूप से लिंकर (कंप्यूटिंग) चलाता है।
प्रत्येक लैंग्वेज कंपाइलर एक अलग प्रोग्राम है जो सोर्स कोड पढ़ता है और मशीन कोड आउटपुट करता है। सभी की एक समान आंतरिक संरचना होती है। एक प्रति-लैंग्वेज फ्रंट एंड उस लैंग्वेज में सोर्स कोड को पदच्छेद करता है और एक अमूर्त सिंटैक्स ट्री (संक्षेप में ट्री) तैयार करता है।
यदि आवश्यक हो, तो इन्हें मध्य अंत के इनपुट प्रतिनिधित्व में परिवर्तित किया जाता है, जिसे जेनेरिक फॉर्म कहा जाता है; मध्य अंत फिर धीरे-धीरे कार्यक्रम को उसके अंतिम रूप में बदल देता है। कंपाइलर ऑप्टिमाइजेशन और स्थिर कोड एनालिसिस तकनीकें (जैसे FORTIFY_SOURCE,[44] एक कंपाइलर निर्देश जो कुछ बफ़र अधिकता को खोजने का प्रयास करता है) कोड पर लागू किया जाता है। ये कई अभ्यावेदन पर काम करते हैं, ज्यादातर आर्किटेक्चर-स्वतंत्र GIMPLE प्रतिनिधित्व और आर्किटेक्चर-निर्भर रजिस्टर ट्रांसफर लैंग्वेज प्रतिनिधित्व। अंत में, मशीन कोड मूल रूप से जैक डेविडसन और क्रिस फ्रेजर के एल्गोरिदम के आधार पर आर्किटेक्चर-विशिष्ट पैटर्न मिलान का उपयोग करके तैयार किया जाता है।
Ada (प्रोग्रामिंग लैंग्वेज) फ्रंट एंड के कुछ हिस्सों को छोड़कर जीसीसी मुख्य रूप से C (प्रोग्रामिंग लैंग्वेज) में लिखा गया था। वितरण में Ada और C++ के लिए स्टैण्डर्ड लाइब्रेरी सम्मिलित हैं जिनका कोड अधिकतर उन लैंग्वेजेज में लिखा जाता है।[45] कुछ प्लेटफार्मों पर, वितरण में एक निम्न-स्तरीय रनटाइम लाइब्रेरी, libgcc भी सम्मिलित है, जो मशीन-स्वतंत्र सी और प्रोसेसर-विशिष्ट मशीन कोड के संयोजन में लिखी गई है, जिसे मुख्य रूप से अंकगणितीय संचालन को संभालने के लिए डिज़ाइन किया गया है जो लक्ष्य प्रोसेसर सीधे नहीं कर सकता है।[46] जीसीसी अपने निर्माण में कई अतिरिक्त टूल का उपयोग करता है, जिनमें से कई पर्ल सहित कई यूनिक्स और लिनक्स वितरणों द्वारा डिफ़ॉल्ट रूप से इंस्टॉल किए जाते हैं (लेकिन जो, जेनेरिक रूप से, विंडोज इंस्टॉलेशन में मौजूद नहीं होते हैं), फ्लेक्स लेक्सिकल विश्लेषक, जीएनयू बाइसन, और अन्य जेनेरिक उपकरण। इसके अलावा, इसे बनाने के लिए वर्तमान में तीन अतिरिक्त पुस्तकालयों की आवश्यकता है: जीएनयू मल्टी-प्रिसिजन लाइब्रेरी, एकाधिक परिशुद्धता परिसर और एमपीएफआर।[47] मई 2010 में, जीसीसी संचालन समिति ने जीसीसी को संकलित करने के लिए C++ कंपाइलर के उपयोग की अनुमति देने का निर्णय लिया।[48] कंपाइलर का उद्देश्य अधिकतर C और C++ की विशेषताओं का एक उपसमूह लिखना था। विशेष रूप से, यह निर्णय इसलिए लिया गया ताकि जीसीसी के डेवलपर्स C++ के डिस्ट्रक्टर (कंप्यूटर विज्ञान) और जेनेरिक प्रोग्रामिंग सुविधाओं का उपयोग कर सकें।[49] अगस्त 2012 में, जीसीसी संचालन समिति ने घोषणा की कि जीसीसी अब अपनी कार्यान्वयन लैंग्वेज के रूप में C++ का उपयोग करती है।[50] इसका मतलब यह है कि स्रोतों से जीसीसी बनाने के लिए, एक C++ कंपाइलर की आवश्यकता होती है जो C++03|ISO/IEC C++03 स्टैण्डर्ड को समझता हो।
18 मई, 2020 को, जीसीसी C++03|ISO/IEC C++03 स्टैण्डर्ड से हटकर C++11|ISO/IEC C++11 स्टैण्डर्ड पर आ गया (अर्थात् कंपाइलर, बूटस्ट्रैप, कंपाइलर को स्वयं संकलित करने की आवश्यकता; द्वारा) डिफ़ॉल्ट रूप से यह C++ के पश्चात के संस्करणों को संकलित करता है)।[51]
फ्रोंट्स एंड्स
![](https://upload.wikimedia.org/wikipedia/commons/thumb/5/5b/Xxx_Scanner_and_parser_example_for_C.gif/300px-Xxx_Scanner_and_parser_example_for_C.gif)
प्रत्येक फ्रंट एंड (संकलक) किसी दिए गए सोर्स फ़ाइल के अमूर्त सिंटैक्स ट्री का उत्पादन करने के लिए एक पार्सर का उपयोग करता है। सिंटैक्स ट्री एब्स्ट्रैक्शन के कारण, विभिन्न समर्थित लैंग्वेजेज में से किसी की सोर्स फ़ाइलों को एक ही बैक एंड (कंपाइलर) द्वारा संसाधित किया जा सकता है। जीसीसी ने जीएनयू बाइसन के साथ उत्पन्न एलएएलआर पार्सर का उपयोग शुरू किया, लेकिन धीरे-धीरे 2004 में सी++ के लिए हाथ से लिखे गए रिकर्सिव डीसेंट पार्सर पर स्विच किया गया।[52] और 2006 में सी और ऑब्जेक्टिव-सी के लिए।[53] 2021 तक सभी फ्रंट एंड हाथ से लिखे गए रिकर्सिव-डिसेंट पार्सर्स का उपयोग करते हैं।
जीसीसी 4.0 तक प्रोग्राम का ट्री प्रतिनिधित्व लक्षित प्रोसेसर से पूरी तरह स्वतंत्र नहीं था। अलग-अलग लैंग्वेज के फ्रंट एंड के लिए एक पेड़ का अर्थ कुछ अलग था, और फ्रंट एंड अपने स्वयं के ट्री कोड प्रदान कर सकते थे। इसे GENERIC और GIMPLE, लैंग्वेज-स्वतंत्र पेड़ों के दो नए रूप, जिन्हें जीसीसी 4.0 के आगमन के साथ पेश किया गया था, के साथ सरल बनाया गया था। जीसीसी 3.x जावा फ्रंट एंड के मध्यवर्ती प्रतिनिधित्व के आधार पर जेनेरिक अधिक जटिल है। GIMPLE एक सरलीकृत जेनेरिक है, जिसमें विभिन्न निर्माण (कंप्यूटर विज्ञान) को कई GIMPLE निर्देशों में कम किया जा रहा है। C (प्रोग्रामिंग लैंग्वेज), C++, और Java (प्रोग्रामिंग लैंग्वेज) फ्रंट एंड सीधे फ्रंट एंड में जेनेरिक उत्पन्न करते हैं। इसके बजाय अन्य फ्रंट सिरों में पार्सिंग के पश्चात अलग-अलग मध्यवर्ती प्रतिनिधित्व होते हैं और इन्हें जेनेरिक में परिवर्तित किया जाता है।
किसी भी मामले में, तथाकथित जिम्प्लीफ़ायर इस अधिक जटिल रूप को सरल स्थिर एकल-असाइनमेंट फॉर्म-आधारित GIMPLE फॉर्म में परिवर्तित करता है जो बड़ी संख्या में शक्तिशाली लैंग्वेज- और आर्किटेक्चर-स्वतंत्र वैश्विक (फ़ंक्शन स्कोप) ऑप्टिमाइजेशन के लिए आम लैंग्वेज है। .
जेनेरिक और जिम्पल
जेनेरिक एक मध्यवर्ती प्रतिनिधित्व लैंग्वेज है जिसका उपयोग सोर्स कोड को निष्पादन योग्य में संकलित करते समय मध्य अंत के रूप में किया जाता है। एक सबसेट, जिसे GIMPLE कहा जाता है, जीसीसी के सभी अग्र सिरों द्वारा लक्षित है।
जीसीसी का मध्य चरण सभी कोड एनालिसिस और कंपाइलर को अनुकूलित करता है, जेनेरिक से शुरू होकर, संकलित लैंग्वेज और लक्ष्य आर्किटेक्चर दोनों से स्वतंत्र रूप से काम करता है।[54] प्रतिनिधित्व और इसे रजिस्टर ट्रांसफर लैंग्वेज (आरटीएल) तक विस्तारित करना। जेनेरिक प्रतिनिधित्व में केवल मध्य अंत द्वारा अनुकूलित अनिवार्य कंप्यूटर प्रोग्रामिंग संरचनाओं का सबसेट सम्मिलित है।
सोर्स कोड को GIMPLE में बदलने में,[55] जटिल अभिव्यक्ति (प्रोग्रामिंग) को अस्थायी चर का उपयोग करके तीन-पता कोड में विभाजित किया गया है। यह प्रतिनिधित्व मैककैट कंपाइलर में प्रस्तावित SIMPLE प्रतिनिधित्व से प्रेरित था[56] लॉरी जे. हेंड्रेन द्वारा[57] अनिवार्य प्रोग्रामिंग के एनालिसिस और ऑप्टिमाइजेशन (कंप्यूटर विज्ञान) को सरल बनाने के लिए।
ऑप्टिमाइजेशन
कम्पाइल के किसी भी चरण के दौरान ऑप्टिमाइजेशन हो सकता है; यद्यपि, अधिकांश ऑप्टिमाइजेशन फ्रंट एंड के सिंटैक्स और सिमेंटिक एनालिसिस (कंपाइलर) के पश्चात और बैक एंड के कोड जेनरेशन (कंपाइलर) से पहले किए जाते हैं; इस प्रकार संकलक के इस भाग के लिए एक जेनेरिक, हालांकि कुछ हद तक आत्म-विरोधाभासी, नाम मध्य अंत है।
जीसीसी ऑप्टिमाइजेशन का सटीक सेट विकसित होने के साथ-साथ रिलीज से रिलीज तक भिन्न होता है, लेकिन इसमें स्टैण्डर्ड एल्गोरिदम सम्मिलित होते हैं, जैसे लूप ऑप्टिमाइजेशन, जम्प थ्रेडिंग , जेनेरिक उपअभिव्यक्ति उन्मूलन, निर्देश निर्धारण इत्यादि। GIMPLE पेड़ों पर वैश्विक SSA-आधारित ऑप्टिमाइजेशन के जुड़ने से रजिस्टर स्थानांतरण लैंग्वेज ऑप्टिमाइजेशन का महत्व कम हो गया है,[58] क्योंकि आरटीएल ऑप्टिमाइजेशन का दायरा बहुत अधिक सीमित है, और उच्च-स्तरीय जानकारी कम है।
इस स्तर पर किए गए कुछ ऑप्टिमाइजेशन में डेड-कोड उन्मूलन, आंशिक-अतिरेक उन्मूलन, वैश्विक मूल्य क्रमांकन, विरल सशर्त निरंतर प्रसार और समुच्चय का स्केलर प्रतिस्थापन सम्मिलित हैं। स्वचालित वैश्वीकरण और स्वचालित समानांतरीकरण जैसे सरणी निर्भरता आधारित ऑप्टिमाइजेशन भी किए जाते हैं। प्रोफ़ाइल-निर्देशित ऑप्टिमाइजेशन भी संभव है.[59]
बैक एंड्स
जीसीसी का बैक एंड आंशिक रूप से सी प्रीप्रोसेसर द्वारा निर्दिष्ट है और लक्ष्य आर्किटेक्चर के लिए विशिष्ट कार्य करता है, उदाहरण के लिए इसकी endianness, शब्द आकार और सम्मलेन बुलाना को परिभाषित करने के लिए। बैक एंड का अगला भाग आरटीएल पीढ़ी तय करने में मदद के लिए इनका उपयोग करता है, इसलिए हालांकि जीसीसी का आरटीएल नाममात्र प्रोसेसर-स्वतंत्र है, अमूर्त निर्देशों का प्रारंभिक अनुक्रम पहले से ही लक्ष्य के लिए अनुकूलित है। किसी भी क्षण, प्रोग्राम प्रतिनिधित्व बनाने वाले वास्तविक आरटीएल निर्देशों को लक्ष्य वास्तुकला के मशीन विवरण का अनुपालन करना होगा।
मशीन विवरण फ़ाइल में अंतिम असेंबली को आउटपुट करने के लिए ऑपरेंड बाधाओं और कोड स्निपेट के साथ आरटीएल पैटर्न सम्मिलित हैं। बाधाओं से संकेत मिलता है कि एक विशेष आरटीएल पैटर्न केवल कुछ हार्डवेयर रजिस्टरों पर लागू हो सकता है (उदाहरण के लिए), या (उदाहरण के लिए) केवल सीमित आकार के तत्काल ऑपरेंड ऑफसेट की अनुमति देता है (उदाहरण के लिए 12, 16, 24, ... बिट ऑफसेट, आदि)। ). आरटीएल पीढ़ी के दौरान, दिए गए लक्ष्य आर्किटेक्चर के लिए बाधाओं की जाँच की जाती है। आरटीएल के दिए गए स्निपेट को जारी करने के लिए, इसे मशीन विवरण फ़ाइल में आरटीएल पैटर्न में से एक (या अधिक) से मेल खाना चाहिए, और उस पैटर्न के लिए बाधाओं को पूरा करना चाहिए; अन्यथा, अंतिम आरटीएल को मशीन कोड में परिवर्तित करना असंभव होगा।
कम्पाइल के अंत में, वैध आरटीएल को एक सख्त रूप में घटा दिया जाता है जिसमें प्रत्येक निर्देश वास्तविक मशीन रजिस्टरों और लक्ष्य की मशीन विवरण फ़ाइल से एक पैटर्न को संदर्भित करता है। सख्त आरटीएल बनाना एक जटिल कार्य है; एक महत्वपूर्ण कदम रजिस्टर आवंटन है, जहां प्रारंभिक रूप से निर्दिष्ट छद्म-रजिस्टरों को बदलने के लिए वास्तविक हार्डवेयर रजिस्टरों को चुना जाता है। इसके पश्चात पुनः लोडिंग चरण आता है; कोई भी छद्म-रजिस्टर जिन्हें वास्तविक हार्डवेयर रजिस्टर नहीं सौंपा गया था, उन्हें स्टैक में 'स्पिल' कर दिया जाता है, और इस स्पिलिंग को करने के लिए आरटीएल उत्पन्न होता है। इसी तरह, जो ऑफसेट वास्तविक निर्देश में फिट होने के लिए बहुत बड़े हैं, उन्हें तोड़ दिया जाना चाहिए और आरटीएल अनुक्रमों द्वारा प्रतिस्थापित किया जाना चाहिए जो ऑफसेट बाधाओं का पालन करेंगे।
अंतिम चरण में, पुनः लोड चरण के दौरान चुने गए अंतिम रजिस्टरों, ऑफसेट और पते का उपयोग करके, लक्ष्य के निर्देश सेट से वास्तविक निर्देश उत्पन्न करने के लिए, प्रत्येक पैटर्न से जुड़े कोड के एक छोटे स्निपेट को कॉल करके मशीन कोड बनाया जाता है। असेंबली-जेनरेशन स्निपेट सिर्फ एक स्ट्रिंग हो सकता है, जिस स्थिति में स्ट्रिंग में रजिस्टरों, ऑफसेट और/या पतों का एक सरल स्ट्रिंग प्रतिस्थापन किया जाता है। असेंबली-जेनरेशन स्निपेट सी कोड का एक छोटा ब्लॉक भी हो सकता है, जो कुछ अतिरिक्त कार्य करता है, लेकिन अंततः वैध असेंबली कोड वाली एक स्ट्रिंग लौटाता है।
C++ स्टैण्डर्ड लाइब्रेरी (libstdc++)
जीसीसी प्रोजेक्ट में libstdc++ नामक C++ स्टैण्डर्ड लाइब्रेरी का कार्यान्वयन सम्मिलित है,[60] जब सोर्स जीसीसी के साथ बनाए जाते हैं तो बंद सोर्स एप्लिकेशन को लिंक करने के अपवाद के साथ GPLv3 लाइसेंस के तहत लाइसेंस प्राप्त होता है।[61] वर्तमान वर्जन 11 है।
अन्य विशेषताएं
जीसीसी की कुछ विशेषताओं में सम्मिलित हैं:
- लिंक-समय ऑप्टिमाइजेशन
- लिंक-टाइम ऑप्टिमाइज़ेशन लिंक किए गए बाइनरी को सीधे बेहतर बनाने के लिए ऑब्जेक्ट फ़ाइल सीमाओं में ऑप्टिमाइजेशन करता है। लिंक-टाइम ऑप्टिमाइज़ेशन एक मध्यवर्ती फ़ाइल पर निर्भर करता है जिसमें ऑब्जेक्ट फ़ाइल में सम्मिलित कुछ गिम्पल प्रतिनिधित्व का क्रमांकन होता है। फ़ाइल सोर्स कम्पाइल के दौरान ऑब्जेक्ट फ़ाइल के साथ उत्पन्न होती है। प्रत्येक सोर्स कम्पाइल एक अलग ऑब्जेक्ट फ़ाइल और लिंक-टाइम हेल्पर फ़ाइल उत्पन्न करता है। जब ऑब्जेक्ट फ़ाइलें लिंक की जाती हैं, तो कंपाइलर फिर से निष्पादित होता है और अलग-अलग संकलित ऑब्जेक्ट फ़ाइलों में कोड को अनुकूलित करने के लिए सहायक फ़ाइलों का उपयोग करता है।
- प्लग-इन
- प्लग-इन (कंप्यूटिंग) सीधे जीसीसी कंपाइलर का विस्तार करता है।[62] प्लगइन्स स्टॉक कंपाइलर को प्लगइन्स के रूप में लोड किए गए बाहरी कोड द्वारा विशिष्ट आवश्यकताओं के अनुरूप बनाने की अनुमति देते हैं। उदाहरण के लिए, प्लगइन्स जिम्पल अभ्यावेदन पर काम करने वाले मध्य-अंत पास को जोड़, प्रतिस्थापित या हटा भी सकते हैं।[63] कई जीसीसी प्लगइन्स पहले ही प्रकाशित हो चुके हैं, विशेष रूप से:
- पायथन प्लगइन, जो लिबपीथॉन के विरुद्ध लिंक करता है, और किसी को कंपाइलर के अंदर से मनमानी पायथन स्क्रिप्ट को लागू करने की अनुमति देता है। इसका उद्देश्य जीसीसी प्लगइन्स को पायथन में लिखने की अनुमति देना है।
- एमईएलटी प्लगइन जीसीसी का विस्तार करने के लिए एक उच्च स्तरीय लिस्प (प्रोग्रामिंग लैंग्वेज) जैसी लैंग्वेज प्रदान करता है।[64]
- प्लगइन्स का समर्थन 2007 में एक विवादास्पद मुद्दा था।[65]
- C++ सॉफ़्टवेयर ट्रांसेक्शनल मेमोरी
- C++ लैंग्वेज में ट्रांसेक्शनल मेमोरी के लिए एक सक्रिय प्रस्ताव है। कम्पाइल करते समय इसे जीसीसी 6 और नए वर्जन में सक्षम किया जा सकता है
-fgnu-tm
.[5][66] - यूनिकोड आइडेंटिफायर
- यद्यपि C++ लैंग्वेज को आइडेंटिफायर (कंप्यूटर लैंग्वेजेज) में गैर-ASCII यूनिकोड वर्णों के लिए समर्थन की आवश्यकता होती है, यह सुविधा केवल जीसीसी 10 के पश्चात से समर्थित है। स्ट्रिंग अक्षर के मौजूदा प्रबंधन के साथ, सोर्स फ़ाइल को UTF में एन्कोड किया गया माना जाता है- 8. यह सुविधा C में वैकल्पिक है, लेकिन इस परिवर्तन के पश्चात से इसे भी उपलब्ध करा दिया गया है।[67][68]
- सी एक्सटेंशन
- जीएनयू सी नेस्टेड फ़ंक्शन सहित कई गैर-स्टैण्डर्ड-सुविधाओं के साथ सी प्रोग्रामिंग लैंग्वेज का विस्तार करता है[69] और टाइपोफ़|
typeof
भाव.[70]
आर्किटेक्चर
प्राथमिक समर्थित (और सर्वोत्तम परीक्षणित) प्रोसेसर परिवार 64- और 32-बिट एआरएम हैं, 64- और 32-बिट x86_64 और x86 और 64-बिट पावरपीसी और SPARC।[71]
वर्जन 11.1 के अनुसार जीसीसी लक्ष्य प्रोसेसर परिवारों में सम्मिलित हैं:[72]
- एआर्क64
- डीईसी अल्फा
- एआरएम
- एटमेल ए.वी.आर
- ब्लैकफिन
- ईबीपीएफ
- एडाप्टेवा#उत्पाद (जीसीसी 4.8)
- हिताची H8|H8/300
- एचसी12
- आईए-32 (x86)
- IA-64 (इंटेल इटेनियम)
- एमआईपीएस वास्तुकला
- मोटोरोला 68000
- एमएसपी430
- एनवीडिया जीपीयू
- एनवीडिया पीटीएक्स
- पीए-जोखिम
- पीडीपी-11
- पावरपीसी
- आर8सी/एम16सी/एम32सी
- RISC-वी ी
- स्पार्क
- सुपर एच एच
- सिस्टम/390/zSeries
- वैक्स
- x86-64
स्टैण्डर्ड रिलीज़ में समर्थित कम-ज्ञात लक्ष्य प्रोसेसर में सम्मिलित हैं:
- 68एचसी11
- ए29के
- C6x
- सीआर16
- डी30वी
- डीएसपी16xx
- ईट्रैक्स संकट
- बेवफा एफआर|FR-30
- FR-वी ी
- आईबीएम रोम्प
- इंटेल i960
- आईपी2000
- एम32आर
- एमसीओआरई
- एमआईएल-एसटीडी-1750ए
- एमएमएक्स
- एमएन10200
- एमएन10300
- मोटोरोला 88000
- NS320xx
- आरएल78
- तूफ़ानी16
- वी850
- Xtensa
अतिरिक्त प्रोसेसर को एफएसएफ वर्जन से अलग बनाए गए जीसीसी संस्करणों द्वारा समर्थित किया गया है:
- कॉर्टस APS3
- एआरसी (प्रोसेसर)
- एवीआर32
- सी166 और सी167
- डी10वी
- मछली
- ईएसआई-आरआईएससी
- षट्कोण (प्रोसेसर)[73]
- LatticeMico32
- LatticeMico8
- एमईपी
- MicroBlaze ़
- मोटोरोला 6809
- एमएसपी430
- एनईसी एसएक्स वास्तुकला [74]
- Nios II और Nios एंबेडेड प्रोसेसर
- ओपनआरआईएससी
- पीडीपी-10
- PIC30#PIC24 और dsPIC 16-बिट माइक्रोकंट्रोलर|PIC24/dsPIC
- PIC30#PIC32 32-बिट माइक्रोकंट्रोलर
- लंबन प्रोपेलर
- एचपी शनि (HP48XGCC)
- सिस्टम/370
- TIGCC (m68k वैरिएंट)
- टीएमएस9900
- ट्राईकोर
- Z8000
- ZPU (माइक्रोप्रोसेसर)
जावा के लिए जीएनयू कंपाइलर जावा कंपाइलर या तो मूल मशीन लैंग्वेज आर्किटेक्चर या जावा वर्चुअल मशीन के जावा बाइटकोड को लक्षित कर सकता है।[75] जब जीसीसी को एक नए प्लेटफॉर्म पर पुन: लक्ष्यीकरणीय संकलक बनाया जाता है, तो अक्सर बूटस्ट्रैपिंग (कंपाइलर) का उपयोग किया जाता है। विभिन्न टेक्सास इंस्ट्रूमेंट्स, हेवलेट पैकार्ड, शार्प और कैसियो प्रोग्रामेबल ग्राफिंग कैलकुलेटर के लिए विकसित जीसीसी संस्करणों में मोटोरोला 68000, ज़िलॉग ज़ेड80 और अन्य प्रोसेसर को भी लक्षित किया गया है।[76]
लाइसेंस
जीसीसी को जीएनयू जनरल पब्लिक लाइसेंस वर्जन 3 के अंतर्गत लाइसेंस प्राप्त है।[77] जीसीसी रनटाइम एक्सेप्शन जीसीसी के साथ प्रोप्राइटरी प्रोग्राम्स (फ्री सॉफ्टवेयर के अतिरिक्त) के कम्पाइलेशन की अनुमति देता है। यह जीसीसी सोर्स कोड की लाइसेंस स्थितियों को प्रभावित नहीं करता है।[78]
यह भी देखें
- कंपाइलरों की लिस्ट
- मिनजीडब्ल्यू
- एलएलवीएम/क्लैंग
संदर्भ
- ↑ Cite error: Invalid
<ref>
tag; no text was provided for refs namedloc
- ↑ Cite error: Invalid
<ref>
tag; no text was provided for refs namedrelease-history
- ↑ GCC Rust, Rust GCC, 2023-06-04, retrieved 2023-06-04
- ↑ "जीसीसी द्वारा समर्थित प्रोग्रामिंग भाषाएँ". GNU Project. Retrieved 2014-06-23.
- ↑ 5.0 5.1 "GCC 6 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org.
- ↑ 6.0 6.1 "ओपनएसीसी - जीसीसी विकी". gcc.gnu.org.
- ↑ "एलएलवीएम कंपाइलर इंफ्रास्ट्रक्चर प्रोजेक्ट". llvm.org.
- ↑ "Apple's GPLv3 purge". meta.ath0.com (in English). Retrieved 2021-01-12.
- ↑ Linnemann, Reid (June 20, 2012). "क्यों बजना". Retrieved 2021-01-12.
- ↑ "August 29, 2007: FreeBSD Foundation Newsletter, August 29, 2007". 2007-10-11. Archived from the original on October 11, 2007. Retrieved 2021-01-12.
- ↑ "Installing GCC: Binaries - GNU Project - Free Software Foundation (FSF)". gcc.gnu.org. Retrieved 2021-01-12.
- ↑ von Hagen, William (2006). जीसीसी के लिए निश्चित गाइड. Definitive Guides (2nd ed.). Apress. p. XXVII. ISBN 978-1-4302-0219-6.
इसलिए उन्होंने VUCK के लेखक को पत्र लिखकर पूछा कि क्या GNU इसका उपयोग कर सकता है। जाहिर तौर पर, VUCK का डेवलपर असहयोगी था, उसने जवाब दिया कि विश्वविद्यालय मुफ़्त था लेकिन कंपाइलर नहीं था।
- ↑ 13.0 13.1 13.2 Stallman, Richard (September 20, 2011). "जीएनयू प्रोजेक्ट के बारे में". The GNU Project. Retrieved October 9, 2011.
- ↑ Puzo, Jerome E., ed. (February 1986). "ग्नू का चिड़ियाघर". GNU's Bulletin. Free Software Foundation. 1 (1). Retrieved 2007-08-11.
- ↑ 15.0 15.1 15.2 15.3 von Hagen, William (2006). जीसीसी के लिए निश्चित गाइड. Definitive Guides (2nd ed.). Apress. p. XXVII. ISBN 978-1-4302-0219-6.
- ↑ Richard M. Stallman (forwarded by Leonard H. Tower Jr.) (March 22, 1987). "जीएनयू सी कंपाइलर बीटा परीक्षण रिलीज". Newsgroup: comp.lang.c. Retrieved October 9, 2011.
- ↑ Stallman, Richard M. (June 22, 2001) [First published 1988], "Contributors to GNU CC", Using and Porting the GNU Compiler Collection (GCC), Free Software Foundation, Inc., p. 7, retrieved June 18, 2015.
- ↑ Salus, Peter H. (2005). "Chapter 10. SUN and gcc". डेमन, ग्नू और पेंगुइन. Groklaw.
- ↑ Garfinkel, Simson L. (6 August 1990). "जीएनयू सॉफ्टवेयर के लिए तैयार हो जाइए". Computerworld. p. 102.
- ↑ 20.0 20.1 Henkel-Wallace, David (August 15, 1997), A new compiler project to merge the existing GCC forks, retrieved May 25, 2012.
- ↑ "जीसीसी विकास का संक्षिप्त इतिहास". www.softpanorama.org. Retrieved 2021-01-24.
- ↑ "इतिहास - जीसीसी विकी". gcc.gnu.org. Retrieved 2020-09-28.
- ↑ "जीसीसी संचालन समिति - जीएनयू परियोजना". gcc.gnu.org.
- ↑ "PATCH] Remove chill". gcc.gnu.org. Retrieved July 29, 2010.
- ↑ "जीएनयू फोरट्रान द्वारा समर्थित फोरट्रान 2003 सुविधाओं का चार्ट". GNU. Retrieved 2009-06-25.
- ↑ "जीएनयू फोरट्रान द्वारा समर्थित फोरट्रान 2008 सुविधाओं का चार्ट". GNU. Retrieved 2009-06-25.
- ↑ "GCC 8 Release Series — Changes, New Features, and Fixes". gcc.gnu.org.
- ↑ "सिम्बियन जीसीसी सुधार परियोजना". Retrieved 2007-11-08.
- ↑ "लिनक्स बोर्ड सपोर्ट पैकेज". Archived from the original on 2011-06-07. Retrieved 2021-01-24.
- ↑ "जीसीसी को एक क्रॉस-कंपाइलर के रूप में स्थापित करना". ps2stuff. 2002-06-08. Archived from the original on December 11, 2008. Retrieved 2008-12-12.
- ↑ "कंपाइलफार्म - जीसीसी विकी". gcc.gnu.org.
- ↑ "sh4 g++ guide". Archived from the original on 2002-12-20. Retrieved 2008-12-12.
- ↑ "लिनक्स सूचना परियोजना". LINFO. Retrieved 2010-04-27.
The GCC has been ported to (i.e., modified to run on) more than 60 platforms, which is more than for any other compiler.
- ↑ "The D Language Front-End Finally Merged Into GCC 9 - Phoronix". phoronix.com. Retrieved 2021-01-19.
- ↑ 35.0 35.1 "जीसीसी फ्रंट एंड". gnu.org. Retrieved November 25, 2011.
- ↑ "GCC 5 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org.
- ↑ "GCC 7 Release Series". gnu.org. Retrieved March 20, 2018.
- ↑ Proven, Liam (2022-12-16). "GCC 13 to support Modula-2: Follow-up to Pascal lives on in FOSS form". Retrieved 2022-12-19.
- ↑ "जीसीसी में सी++ मानक समर्थन". Retrieved May 17, 2021.
- ↑ "जीसीसी यूपीसी (जीसीसी एकीकृत समानांतर सी)". Intrepid Technology, Inc. 2006-02-20. Retrieved 2009-03-11.
- ↑ "जंग के लिए जीसीसी फ्रंट-एंड". Retrieved Jan 6, 2023.
- ↑ "जंग के लिए जीसीसी फ्रंट-एंड (जीथूब)". GitHub. January 5, 2023. Retrieved Jan 6, 2023.
- ↑ Spengler, Brad (12 January 2021). "ओपन सोर्स सिक्योरिटी, इंक. ने रस्ट के लिए जीसीसी फ्रंट-एंड की फंडिंग की घोषणा की".
- ↑ "Security Features: Compile Time Buffer Checks (FORTIFY_SOURCE)". fedoraproject.org. Retrieved 2009-03-11.
- ↑ "जीसीसी बनाने के लिए उपयोग की जाने वाली भाषाएँ". Archived from the original on May 27, 2008. Retrieved 14 September 2008.
- ↑ "जीसीसी आंतरिक". GCC.org. Retrieved March 1, 2010.
- ↑ "जीसीसी - जीएनयू प्रोजेक्ट के लिए पूर्वापेक्षाएँ". gcc.gnu.org. Retrieved 2021-09-05.
- ↑ "GCC allows C++ – to some degree". The H. June 1, 2010.
- ↑ "Re: Efforts to attract more users?". lists.gnu.org.
- ↑ "GCC 4.8 Release Series: Changes, New Features, and Fixes". Retrieved October 4, 2013.
- ↑ "bootstrap: Update requirement to C++11". GitHub. Retrieved May 18, 2020.
- ↑ "GCC 3.4 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org.
- ↑ "GCC 4.1 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org.
- ↑ "सामान्य (जीएनयू कंपाइलर संग्रह (जीसीसी) आंतरिक)". gcc.gnu.org.
- ↑ "जिम्पल (जीएनयू कंपाइलर कलेक्शन (जीसीसी) इंटरनल्स)". gcc.gnu.org.
- ↑ "मैककैट". Archived from the original on August 12, 2004. Retrieved September 14, 2017.
{{cite web}}
: CS1 maint: bot: original URL status unknown (link) - ↑ "लॉरी हेंड्रेन का होम पेज". www.sable.mcgill.ca.
- ↑ Novillo, Diego (December 2004). "From Source to Binary: The Inner Workings of GCC". Red Hat Magazine. Archived from the original on April 1, 2009.
- ↑ "Installing GCC: Building - GNU Project". gcc.gnu.org.
- ↑ "जीएनयू सी++ लाइब्रेरी". GNU Project. Retrieved 2021-02-21.
- ↑ "लाइसेंस". GNU Project. Retrieved 2021-02-21.
- ↑ "प्लग-इन". GCC online documentation. Retrieved July 8, 2013.
- ↑ Starynkevitch, Basile. "MELT उदाहरण के माध्यम से GCC प्लगइन्स" (PDF). Archived (PDF) from the original on 2014-04-13. Retrieved 2014-04-10.
- ↑ "जीसीसी मेल्ट के बारे में". Archived from the original on July 4, 2013. Retrieved July 8, 2013.
- ↑ "GCC unplugged [LWN.net]". lwn.net.
- ↑ "ट्रांजेक्शनलमेमोरी - जीसीसी विकी". gcc.gnu.org.
- ↑ "Lewis Hyatt - [PATCH] wwwdocs: Document support for extended identifiers added to GCC". gcc.gnu.org. Retrieved 2020-03-27.
- ↑ "C और C++ के लिए विस्तारित पहचानकर्ता वर्णों के लिए अनुशंसाएँ". www.open-std.org. Retrieved 2020-03-27.
- ↑ "सी एक्सटेंशन (जीएनयू कंपाइलर कलेक्शन (जीसीसी) का उपयोग करके)". gcc.gnu.org. Retrieved 2022-01-12.
- ↑ "टाइपोफ़ - जीएनयू कंपाइलर संग्रह (जीसीसी) का उपयोग करना". gcc.gnu.org. Retrieved 2022-01-12.
- ↑ "GCC 12 Release Criteria". gcc.gnu.org. 2022-10-26. Retrieved 2023-01-27.
- ↑ "विकल्प सारांश (जीएनयू कंपाइलर संग्रह (जीसीसी) का उपयोग करके)". gcc.gnu.org. Retrieved 2020-08-21.
- ↑ "हेक्सागोन प्रोजेक्ट विकी". Archived from the original on March 23, 2012. Retrieved May 19, 2011.
- ↑ "Google कोड संग्रह - Google कोड प्रोजेक्ट होस्टिंग के लिए दीर्घकालिक भंडारण।". code.google.com.
- ↑ "जावा प्रोग्रामिंग भाषा के लिए जीएनयू कंपाइलर". Archived from the original on May 9, 2007. Retrieved April 22, 2010.
- ↑ graphing calculators#programming
- ↑ "जीएनयू कंपाइलर संग्रह का उपयोग करना". gnu.org. Retrieved 2019-11-05.
- ↑ "जीसीसी रनटाइम अपवाद". FSF. Retrieved 2014-04-10.
अग्रिम पठन
- Using the जीएनयू Compiler Collection (जीसीसी), Free Software Foundation, 2008.
- जीएनयू Compiler Collection (जीसीसी) Internals, Free Software Foundation, 2008.
- An Introduction to जीसीसी, Network Theory Ltd., 2004 (Revised August 2005). ISBN 0-9541617-9-3.
- Arthur Griffith, जीसीसी: The Complete Reference. McGraw Hill / Osborne, 2002. ISBN 0-07-222405-3.
बाहरी संबंध
आधिकारिक
अन्य
- जीसीसी 4.0.2 आर्किटेक्चर और आंतरिक दस्तावेजों का संग्रह आई.आई.टी. में। बंबई
- Kerner, Sean Michael (March 2, 2006). "नई जीसीसी अनुकूलन पर भारी". internetnews.com
- Kerner, Sean Michael (April 22, 2005). "ओपन सोर्स जीसीसी 4.0: पुराना, तेज़". internetnews.com. Archived from the original on September 17, 2006. Retrieved October 21, 2006
- फ्रॉम सोर्स टू बाइनरी: द इनर वर्किंग ऑफ जीसीसी, डिएगो नोविलो द्वारा, रेड हैट#रेड हैट मैगज़ीन, दिसंबर 2004
- जेनेरिक और GIMPLE पर 2003 का एक पेपर
- मार्केटिंग सिग्नस सपोर्ट, 1990 के दशक के जीसीसी विकास को कवर करने वाला एक निबंध, 30 मासिक के साथ अंत में इनसाइड सिग्नस इंजीनियरिंग अनुभाग के लिए रिपोर्ट
- ईजीसीएस 1.0 घोषणा
- EGCS 1.0 सुविधाओं की सूची
- फोर्किंग का डर, रिक मोएन का एक निबंध जिसमें जीसीसी/ईजीसीएस सहित सात प्रसिद्ध फोर्क्स की रिकॉर्डिंग है।