जीएनयू कंपाइलर कलेक्शन: Difference between revisions

From Vigyanwiki
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}}


{{Infobox software
'''जीएनयू कंपाइलर कलेक्शन''' (जीसीसी) जीएनयू प्रोजेक्ट द्वारा निर्मित ऑप्टिमाइज़िंग कंपाइलर है जो विभिन्न [[प्रोग्रामिंग भाषा|प्रोग्रामिंग लैंग्वेजेज]], [[कंप्यूटर आर्किटेक्चर]] और [[ऑपरेटिंग सिस्टम]] को सपोर्ट करता है। [[फ्री सॉफ्टवेयर फाउंडेशन]] (एफएसएफ) [[जीएनयू जनरल पब्लिक लाइसेंस]] (जीएनयू जीपीएल) के अंतर्गत जीसीसी को [[मुफ्त सॉफ्टवेयर|फ्री सॉफ्टवेयर]] के रूप में वितरित करता है। जीसीसी जीएनयू टूलचेन का प्रमुख घटक है और जीएनयू तथा [[लिनक्स कर्नेल]] से संबंधित अधिकांश प्रोजेक्ट्स के लिए स्टैण्डर्ड कंपाइलर है। 2019 में कोड की लगभग 15 मिलियन लाइनों के साथ, जीसीसी अस्तित्व में सबसे बड़े फ्री प्रोग्रामों में से एक है।<ref name="loc"/> इसने फ्री सॉफ़्टवेयर के विकास में टूल और उदाहरण दोनों के रूप में महत्वपूर्ण भूमिका निभाई है।
| name = जीएनयू कम्पाइलर संग्रह
| logo = [[File:GNU Compiler Collection logo.svg|100px]]
| logo caption =
| screenshot = GCC 10.2 GNU Compiler Collection self-compilation.png
| caption = GCC 10.2 का स्क्रीनशॉट अपने स्वयं के स्रोत कोड को संकलित कर रहा है
| collapsible =
| author = [[रिचर्ड स्टालमैन]]
| developer = [[जीएनयू प्रोजेक्ट]]
| released = {{Start date and age|1987|03|22}}<ref name="release-history">{{cite web|url=https://gnu.org/software/gcc/releases.html|title=GCC Releases|publisher=GNU Project|access-date=July 24, 2020}}</ref>
| discontinued =
| latest release version = {{wikidata|property|preferred|references|edit|Q178940|P348|P548=Q2804309}}
| latest release date = {{wikidata|qualifier|preferred|single|Q178940|P348|P548=Q2804309|P577}}
| latest preview version = {{wikidata|property|preferred|references|edit|Q178940|P348|P548=Q51930650}}
| latest preview date = {{wikidata|qualifier|preferred|single|Q178940|P348|P548=Q51930650|P577}}
| programming language = [[C (programming language)|C]], [[C++]]<ref>{{Cite web|title=GCC Coding Conventions - GNU Project|url=https://gcc.gnu.org/codingconventions.html|access-date=2022-02-07|website=gcc.gnu.org}}</ref>
| operating system = [[क्रॉस-प्लेटफ़ॉर्म]]
| platform = [[जीएनयू]] और कई अन्य
| size = ~15 million [[Source lines of code|LOC]]<ref name="loc">{{cite web|url=https://www.youtube.com/watch?v=QXwxBM4sbYM| archive-url=https://ghostarchive.org/varchive/youtube/20211107/QXwxBM4sbYM| archive-date=2021-11-07 | url-status=live|title=Cutting Edge Toolchain (Latest Features in GCC/GLIBC)|author=Víctor Rodríguez|date=2019-10-01|website=youtube.com|publisher=Linux Foundation|access-date=2021-01-19}}{{cbignore}}</ref>
| language = अंग्रेज़ी
| genre = [[कम्पाइलर]]
| license = [[GNU General Public License|GPLv3+]] with GCC Runtime Library Exception<ref>{{cite web|url=https://gnu.org/licenses/gcc-exception-3.1|title=GCC Runtime Library Exception|access-date=July 24, 2020}}</ref>
| alexa =
| website = {{URL|https://gcc.gnu.org}}
}}
जीएनयू(GNU) कंपाइलर कलेक्शन (जीसीसी) [[[[जीएनयू]] प्रोजेक्ट]] द्वारा निर्मित अनुकूलन कंपाइलर है जो विभिन्न [[प्रोग्रामिंग भाषा]]ओं, [[कंप्यूटर आर्किटेक्चर]] और [[ऑपरेटिंग सिस्टम|ऑपरेटिंग प्रणाली]] का समर्थन करता है। [[फ्री सॉफ्टवेयर फाउंडेशन]] (एफएसएफ) जीसीसी को [[जीएनयू जनरल पब्लिक लाइसेंस]] (जीएनयू जीपीएल) के अंतर्गत [[मुफ्त सॉफ्टवेयर]] के रूप में वितरित करता है। जीसीसी [[जीएनयू टूलचैन]] का प्रमुख घटक है और जीएनयू और [[लिनक्स कर्नेल]] से संबंधित अधिकांश प्रोजेक्टओं के लिए मानक कम्पाइलर है। 2019 में कोड की लगभग 15 मिलियन पंक्तियों के साथ, जीसीसी अस्तित्व में सबसे बड़े मुफ्त कार्यक्रमों में से है।<ref name="loc"/>इसने उपकरण और उदाहरण दोनों के रूप में मुफ्त सॉफ्टवेयर के विकास में महत्वपूर्ण भूमिका निभाई है।


जब इसे पहली बार 1987 में [[रिचर्ड स्टालमैन]] द्वारा रिलीज़ किया गया था, तो जीसीसी 1.0 को जीएनयू C कंपाइलर नाम दिया गया था क्योंकि यह केवल C (प्रोग्रामिंग लैंग्वेज) हैंडल करता था।<ref name="release-history" />उसी वर्ष दिसंबर में इसे C++ संकलित करने के लिए विस्तारित किया गया था। कंपाइलर फ्रंट एंड को बाद में [[उद्देश्य सी|उद्देश्य C]],ऑब्जेक्टिव-[[सी ++|C ++]], [[फोरट्रान]], एडा (प्रोग्रामिंग लैंग्वेज), [[डी (प्रोग्रामिंग भाषा)|D (प्रोग्रामिंग भाषा)]] और [[जाओ (प्रोग्रामिंग भाषा)|Go (प्रोग्रामिंग भाषा)]] के लिए विकसित किया गया था।<ref>{{cite web|url=https://gcc.gnu.org/frontends.html|title=Programming Languages Supported by GCC|access-date=2014-06-23|publisher=GNU Project }}</ref> [[ओपनएमपी]] और ओपनएसीसी विनिर्देश 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=OpenACC - GCC Wiki|website=gcc.gnu.org}}</ref>
जब इसे सर्वप्रथम 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|में पोर्टिंग]] कर रहा है, और व्यापक रूप से मुफ्त और [[मालिकाना सॉफ्टवेयर|प्रोप्रायटरी सॉफ्टवेयर]] दोनों के विकास में उपकरण के रूप में नियत किया गया है। जीसीसी कई [[अंतः स्थापित प्रणाली]] के लिए भी उपलब्ध है, जिसमें एआरएम आर्किटेक्चर परिवार-आधारित और [[Power ISA|पावर आईएसए]]-आधारित चिप्स सम्मलित हैं।


[[जीएनयू ऑपरेटिंग सिस्टम|जीएनयू ऑपरेटिंग प्रणाली]] का आधिकारिक कंपाइलर होने के साथ-साथ, जीसीसी को अधिकांश [[लिनक्स]] वितरण सहित कई अन्य आधुनिक यूनिक्स जैसे कंप्यूटर ऑपरेटिंग प्रणाली द्वारा मानक कंपाइलर के रूप में अपनाया गया है। अधिकांश [[बर्कले सॉफ्टवेयर वितरण]] फैमिली ऑपरेटिंग प्रणाली भी रिलीज होने के कुछ ही समय बाद जीसीसी में परिवर्तित हो गए, चूँकि तब से, [[FreeBSD]], [[OpenBSD]] और [[MacOS]] [[बजना]] कंपाइलर में चले गए हैं,<ref>{{Cite web|url=https://llvm.org/Users.html|title=The LLVM Compiler Infrastructure Project|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=Why Clang|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 (ऑपरेटिंग सिस्टम)|Android (ऑपरेटिंग प्रणाली)]], [[iOS]], Solaris (ऑपरेटिंग प्रणाली), [[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>
जीसीसी किसी भी अन्य कंपाइलर की उपमा में अधिक प्लेटफार्मों और [[ अनुदेश सेट वास्तुकला |इंस्ट्रक्शन सेट आर्चिटेक्टर्स]] पर [[में 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 के अंत में, जीएनयू ऑपरेटिंग प्रणाली को [[बूटस्ट्रैपिंग (संकलक)|बूटस्ट्रैपिंग (कंपाइलर)]] करने के प्रयास में, रिचर्ड स्टॉलमैन ने [[एम्स्टर्डम संकलक किट|एम्स्टर्डम कम्पाइलर किट]] (जिसे [[व्रीजे यूनिवर्सिटीइट एम्स्टर्डम]] कंपाइलर किट के रूप में भी जाना जाता है) के लेखक एंड्रयू एस. टैनेनबाम से उस सॉफ़्टवेयर का उपयोग करने की अनुमति मांगी थी। जब तनेनबौम ने उन्हें राय दी कि कम्पाइलर मुक्त नहीं है,केवल विश्वविद्यालय मुक्त है, तो स्टालमैन ने अलग कम्पाइलर पर काम करने का निर्णय किया था।<ref>{{cite book |last=von Hagen |first=William |date=2006 |title=The Definitive Guide to GCC |edition=2nd |series=Definitive Guides |publisher=Apress |isbn=978-1-4302-0219-6 |page=XXVII |quote=So he wrote to VUCK's author asking if GNU could use it. Evidently, VUCK's developer was uncooperative, responding that the university was free but that the compiler was not. |url=https://books.google.com/books?id=wQ6r3UTivJgC}}</ref> उनकी प्रारंभिक योजना [[लॉरेंस लिवरमोर राष्ट्रीय प्रयोगशाला]] के उपस्तिथ कंपाइलर को [[पेस्टल (प्रोग्रामिंग भाषा)]] से लियोनार्ड एच. टॉवर जूनियर और अन्य लोगों की सहायता से C में फिर से लिखने की थी।<ref name=LLLCompiler>{{cite web | last = Stallman | first = Richard | title = About the GNU Project | 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 = Gnu's Zoo | 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> स्टॉलमैन ने लिवरमोर कंपाइलर के लिए नया C फ्रंट एंड लिखा, लेकिन फिर अनुभव किया कि इसके लिए स्टैक स्पेस के मेगाबाइट्स की आवश्यकता है, [[मोटोरोला 68000]] यूनिक्स प्रणाली पर केवल 64 केबी के साथ असंभव है, और निष्कर्ष निकाला कि उन्हें स्क्रैच से नया कंपाइलर लिखना होगा।<ref name=LLLCompiler />पेस्टल कंपाइलर कोड में से कोई भी जीसीसी में समाप्त नहीं हुआ, चूँकि स्टॉलमैन ने अपने द्वारा लिखे गए C फ्रंट एंड का उपयोग किया था।<ref name=LLLCompiler /><ref name=":6">{{cite book |last=von Hagen |first=William |date=2006 |title=The Definitive Guide to GCC |edition=2nd |series=Definitive Guides |publisher=Apress |isbn=978-1-4302-0219-6 |page=XXVII |url=https://books.google.com/books?id=wQ6r3UTivJgC}}</ref>
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 को प्रस्तावित किया गया था, जो [[मैसाचुसेट्स की तकनीकी संस्था]] से [[फाइल ट्रांसफर प्रोटोकॉल]] द्वारा उपलब्ध है।<ref>{{cite newsgroup | title = GNU C compiler beta test release | 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> पीटर एच. सैलस द्वारा हिट किए गए पहले मुफ्त सॉफ्टवेयर के रूप में वर्णित, जीएनयू कंपाइलर उस समय आया जब [[सन माइक्रोसिस्टम्स|सन माइक्रोप्रणाली्स]] अपने विकास उपकरणों को अपने ऑपरेटिंग सिस्टम से अलग कर रहा था उन्हें पिछले बंडल की तुलना में उच्च संयुक्त मूल्य पर अलग से बेच रहा था, जो विक्रेता के उपकरणों के अतिरिक्त जीसीसी को खरीदने या डाउनलोड करने के लिए [[सुनो|सुन]](Sun) के कई उपयोगकर्ताओं का नेतृत्व किया I <ref name="penguin">{{cite book |first=Peter H. |last=Salus |author-link=Peter H. Salus |title=The Daemon, the Gnu and the Penguin |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=Get ready for GNU software|page=102|newspaper=Computerworld|url=https://books.google.com/books?id=mZ0kj6qvsvYC&pg=PT101|access-date=}}</ref>
जीसीसी को पहली बार 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>
=== ईजीसीएस कांटा ===
=== ईजीसीएस फोर्क ===
जैसा कि जीसीसी को जीपीएल के अंतर्गत लाइसेंस दिया गया था, अन्य दिशाओं में काम करने के इच्छुक प्रोग्रामर - विशेष रूप से C के अतिरिक्त अन्य भाषाओं के लिए इंटरफेस लिखने वाले - कंपाइलर के अपने [[कांटा (सॉफ्टवेयर विकास)]] को विकसित करने के लिए स्वतंत्र थे, बशर्ते वे जीपीएल की शर्तों को पूरा करते हों, जिसमें इसकी स्रोत कोड वितरित करने के लिए आवश्यकताएँ है। चूँकि, कई कांटे अक्षम और बोझिल सिद्ध हुए, और आधिकारिक जीसीसी प्रोजेक्ट द्वारा स्वीकार किए गए कार्य को प्राप्त करने में कठिनाई कई लोगों के लिए बहुत निराशाजनक थी, क्योंकि प्रोजेक्ट ने नई सुविधाओं पर स्थिरता का पक्ष लिया था।<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> एफएसएफ ने जीसीसी 2.x (1992 से विकसित) के आधिकारिक संस्करण में जो जोड़ा गया था, उस पर इतना निकट नियंत्रण रखा कि एरिक एस. रेमंड के निबंध [[कैथेड्रल और बाजार]] में कैथेड्रल विकास मॉडल के उदाहरण के रूप में जीसीसी का उपयोग किया गया है।
चूंकि जीसीसी को जीपीएल के तहत लाइसेंस दिया गया था, प्रोग्रामर जो अन्य दिशाओं में काम करना चाहते थे - विशेष रूप से सी के अलावा अन्य लैंग्वेजेज के लिए इंटरफेस लिखने वाले - कंपाइलर का अपना फोर्क (सॉफ्टवेयर विकास) विकसित करने के लिए स्वतंत्र थे, बशर्ते वे जीपीएल की शर्तों को पूरा करते हों, जिसमें इसकी शर्तें भी सम्मिलित हैं सोर्स कोड वितरित करने की आवश्यकताएँ। यद्यपि, एकाधिक कांटे अकुशल और बोझिल साबित हुए, और आधिकारिक जीसीसी प्रोजेक्ट द्वारा स्वीकार किए गए काम को प्राप्त करने में कठिनाई कई लोगों के लिए बहुत निराशाजनक थी, क्योंकि प्रोजेक्ट ने नई सुविधाओं पर स्थिरता का समर्थन किया था।<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 में, विकासकर्ताओं के समूह ने प्रायोगिक/उन्नत जीएनयू कम्पाइलर प्रणाली (ईजीसीएस) का गठन किया जिससे प्रोजेक्ट में कई प्रयोगात्मक फोर्क्स को मर्ज किया जा सके।<ref name="egcs" /><ref name=":6" />विलय का आधार जीसीसी का   विकास स्नैपशॉट था (2.7.2 के निकट लिया गया और बाद में 2.8.1 रिलीज तक का पालन किया गया)। विलय में सम्मलित g77 (फोरट्रान), पीजीसीसी ([[P5 (माइक्रोआर्किटेक्चर)]] [[पेंटियम]]-अनुकूलित जीसीसी) हैं ,<ref name=":6" />कई C ++ सुधार, और कई नए आर्किटेक्चर और ऑपरेटिंग प्रणाली वेरिएंट हैं।<ref>{{Cite web|title=The Short History of GCC development|url=http://www.softpanorama.org/People/Stallman/history_of_gcc_development.shtml|access-date=2021-01-24|website=www.softpanorama.org}}</ref>
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=History - GCC Wiki|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=GCC steering committee - GNU Project|website=gcc.gnu.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) ने [[ठंड]] के लिए फ्रंट-एंड को हटा दिया है।<ref>{{cite web|title=PATCH&#93; Remove chill|url=https://gcc.gnu.org/ml/gcc-patches/2002-04/msg00887.html|access-date=July 29, 2010|website=gcc.gnu.org}}</ref>
संस्करण 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 name="gcc_wiki_f2008">{{cite web|title=फोरट्रान 2008 का चार्ट जीएनयू फोरट्रान द्वारा समर्थित सुविधाएँ|url=https://gcc.gnu.org/wiki/Fortran2008Status|access-date=2009-06-25|publisher=[[GNU]]}}</रेफरी>


संस्करण 4.8 के अनुसार, GCC को C++ में लागू किया गया है।
जीसीसी 3 (2002) ने रखरखाव की कमी के कारण [[CHILL]] के लिए फ्रंट-एंड को हटा दिया।<ref>{{cite web|title=PATCH&#93; 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=GCC 4.8 रिलीज़ सीरीज़ — परिवर्तन, नई सुविधाएँ, और सुधार - GNU प्रोजेक्ट|website=gcc.gnu.org}}</रेफरी>
 
वर्जन 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>


जीसीसी 5 से जीसीसी 7 तक [[सिल्क मोर]] के लिए समर्थन मौजूद था।
रेफरी>{{Cite web|url=https://gcc.gnu.org/gcc-5/changes.html#c-family|title=GCC 5 रिलीज़ सीरीज़ — परिवर्तन, नई सुविधाएँ और सुधार|website=gcc.gnu.org}}</रेफरी><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=Symbian GCC Improvement Project|access-date=2007-11-08 }}</ref> <ref name="Linux Board Support Packages">{{cite web|last=|first=|date=|title=Linux Board Support Packages|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> कंपाइलर विभिन्न प्रकार के प्लेटफार्मों को लक्षित कर सकता है, जिसमें [[प्लेस्टेशन 2]] प्लेस्टेशन 3 की सेल एसपीई और [[कलाकारों का सपना|ड्रीमकास्ट]] जैसे [[विडियो गेम कंसोल]] सम्मलित हैं,<ref name=":3">{{cite web|url=http://ps2stuff.playstation2-linux.com/gcc_build.html |title=setting up gcc as a cross-compiler |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> <ref name=":4">{{Cite web|url=https://gcc.gnu.org/wiki/CompileFarm|title=CompileFarm - GCC Wiki|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=Linux Information Project|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>{{Self-published inline|date=January 2021}}{{Better source needed|date=January 2021}}
== समर्थित भाषाएँ ==
{{As of|2021|May}}, जीसीसी के सामने 11.1 रिलीज़ में C (प्रोग्रामिंग भाषा) के लिए फ्रंट एंड सम्मलित हैं (<code>gcc</code>), C++ (<code>g++</code>), ऑब्जेक्टिव-सी, फोरट्रान (<code>[[gfortran]]</code>), एडा (प्रोग्रामिंग भाषा) (जीएनएटी), गो (प्रोग्रामिंग भाषा) (<code>gccgo</code>) और D (प्रोग्रामिंग भाषा) (<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=GCC Front Ends|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>
सी ++ और सी के लिए भाषा संस्करण समर्थन के संबंध में, जीसीसी 11.1 के बाद से डिफ़ॉल्ट लक्ष्य जीएनयू ++ 17 है, [[सी ++ 17]] का सुपरसेट, और सी 11 (सी मानक संशोधन) का सुपरसेट, जीएनयू 11, सख्त मानक समर्थन भी उपलब्ध है। जीसीसी [[C++20]] और आगामी [[C++23]] के लिए प्रयोगात्मक समर्थन भी प्रदान करता है।<ref>{{Cite web|title=C++ Standards Support in GCC|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=GCC UPC (GCC Unified Parallel C)|publisher=Intrepid Technology, Inc.|date=2006-02-20|access-date=2009-03-11}}</ref> या [[जंग (प्रोग्रामिंग भाषा)]]।<ref>{{Cite web|title=GCC Front-End For Rust|url=https://rust-gcc.github.io|access-date=Jan 6, 2023}}</ref><ref>{{Cite web|title=GCC Front-End for Rust (Github)|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=Open Source Security, Inc. Announces Funding of GCC Front-End for Rust|url=https://opensrcsec.com/open_source_security_announces_rust_gcc_funding|access-date=|website=}}</ref>{{Better source needed|date=January 2021}}
== डिजाइन ==
== डिजाइन ==
[[File:Preprocessor.png|thumb|400x400px|जीसीसी की विस्तारित संकलन पाइपलाइन का अवलोकन, जिसमें [[preprocessor]], [[सभा की भाषा]] और [[लिंकर (कंप्यूटिंग)]] जैसे विशेष कार्यक्रम सम्मलित हैं।]][[File:Compiler design.svg|thumb|400x400px|जीसीसी बहु-भाषा और बहु-CPU [[संकलक|कम्पाइलर]] के विशिष्ट 3-चरण आर्किटेक्चर का अनुसरण करता है। सभी सार सिंटैक्स पेड़ को मध्य अंत में   सामान्य सार प्रतिनिधित्व में परिवर्तित कर दिया जाता है, जिससे प्रोग्राम अनुकूलन और [[बाइनरी कोड]] जनरेशन सुविधाओं को सभी भाषाओं द्वारा साझा किया जा सकता है।]]जीसीसी का बाहरी इंटरफेस [[यूनिक्स]] सम्मेलनों का पालन करता है। उपयोगकर्ता   भाषा-विशिष्ट ड्राइवर प्रोग्राम (<code>जीसीसी</code> सी के लिए, <code>g++</code> सी ++, आदि के लिए), जो कमांड लाइन तर्क की व्याख्या करता है, वास्तविक कंपाइलर को कॉल करता है, आउटपुट पर असेंबली भाषा असेंबलर चलाता है, और उसके बाद  पूर्ण [[निष्पादन]] योग्य बाइनरी बनाने के लिए वैकल्पिक रूप से लिंकर (कंप्यूटिंग) चलाता है।
[[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 प्रतिनिधित्व और आर्किटेक्चर-निर्भर रजिस्टर ट्रांसफर लैंग्वेज प्रतिनिधित्व। अंत में, जैक डेविडसन और क्रिस फ्रेजर के एल्गोरिदम पर आधारित आर्किटेक्चर-विशिष्ट [[पैटर्न मिलान]] का उपयोग करके मशीन कोड का उत्पादन किया जाता है।
यदि आवश्यक हो, तो इन्हें मध्य अंत के इनपुट प्रतिनिधित्व में परिवर्तित किया जाता है, जिसे जेनेरिक फॉर्म कहा जाता है; मध्य अंत फिर धीरे-धीरे कार्यक्रम को उसके अंतिम रूप में बदल देता है। कंपाइलर ऑप्टिमाइजेशन और स्थिर कोड एनालिसिस तकनीकें (जैसे 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 (प्रोग्रामिंग लैंग्वेज) में लिखा गया था। वितरण में एडा और सी ++ के लिए मानक पुस्तकालय सम्मलित हैं जिनके कोड अधिकतर उन भाषाओं में लिखे गए हैं।<ref>{{cite web |title=languages used to make GCC |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>{{Update inline|date=January 2023|reason=The first time the reference was used is 2008. It seems it hasn't been updated for a long time. (A reference to the Java compiler was removed in 2021, but the rest of the paragraph hasn't been changed at least since 2013.)}} कुछ प्लेटफॉर्म पर, वितरण में मशीन-स्वतंत्र सी और प्रोसेसर-विशिष्ट मशीन कोड के संयोजन में लिखी गई   निम्न-स्तरीय रनटाइम लाइब्रेरी, लिबगसीसी भी सम्मलित है, जो मुख्य रूप से अंकगणितीय संचालन को संभालने के लिए डिज़ाइन किया गया है जो लक्ष्य प्रोसेसर सीधे प्रदर्शन नहीं कर सकता।<ref>{{cite web|url=https://gcc.gnu.org/onlinedocs/gccint/Libgcc.html|title=GCC Internals|publisher=GCC.org|access-date=March 1, 2010}}</ref>
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>
जीसीसी अपने निर्माण में कई अतिरिक्त उपकरणों का उपयोग करता है, जिनमें से कई कई यूनिक्स और लिनक्स वितरणों द्वारा डिफ़ॉल्ट रूप से स्थापित किए जाते हैं (लेकिन जो सामान्य रूप से विंडोज इंस्टॉलेशन में उपस्तिथ नहीं होते हैं), [[पर्ल]] सहित,{{Explain|reason=|date=January 2021}} [[फ्लेक्स लेक्सिकल एनालाइजर]], [[जीएनयू बाइसन]] और अन्य सामान्य उपकरण। इसके अतिरिक्त, इसे बनाने के लिए वर्तमान में तीन अतिरिक्त पुस्तकालयों की आवश्यकता है: [[जीएनयू मल्टी-प्रेसिजन लाइब्रेरी]], [[एकाधिक परिशुद्धता परिसर|ाधिक परिशुद्धता परिसर]], और [[एमपीएफआर]]।<ref>{{Cite web|title=Prerequisites for GCC - GNU Project|url=https://gcc.gnu.org/install/prerequisites.html|access-date=2021-09-05|website=gcc.gnu.org}}</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++&nbsp;– 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++ के विनाशक (कंप्यूटर विज्ञान) और [[सामान्य प्रोग्रामिंग]] सुविधाओं का उपयोग कर सकें।<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>
मई 2010 में, जीसीसी संचालन समिति ने जीसीसी को संकलित करने के लिए C++ कंपाइलर के उपयोग की अनुमति देने का निर्णय लिया।<ref name="gcc-c++">{{cite news | title = GCC allows C++&nbsp;– 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 में, जीसीसी संचालन समिति ने घोषणा की कि जीसीसी अब अपनी कार्यान्वयन भाषा के रूप में 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 मानक को समझता हो।
अगस्त 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 मानक से C++11|ISO/IEC C++11 मानक (यानी संकलन, बूटस्ट्रैप, स्वयं कम्पाइलर के लिए आवश्यक) से दूर चला गया; डिफ़ॉल्ट चूँकि यह सी ++ के बाद के संस्करणों को संकलित करता है)।<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>
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|फ्रंट एंड में प्रीप्रोसेसर, [[शाब्दिक विश्लेषण]], पार्सिंग (पार्सिंग) और सिमेंटिक एनालिसिस सम्मलित हैं। कंपाइलर फ्रंट एंड के लक्ष्य भाषा व्याकरण और शब्दार्थ के अनुसार उम्मीदवार कार्यक्रमों को स्वीकार या अस्वीकार करना, त्रुटियों की पहचान करना और बाद के कम्पाइलर चरणों में मान्य प्रोग्राम अभ्यावेदन को संभालना है। यह उदाहरण C (प्रोग्रामिंग लैंग्वेज) में लिखे   साधारण प्रोग्राम के लिए किए गए लेक्सर और पार्सर चरणों को दिखाता है।]]प्रत्येक [[फ्रंट एंड (संकलक)|फ्रंट एंड (कम्पाइलर)]] किसी दिए गए स्रोत फ़ाइल के सार सिंटैक्स पेड़ का उत्पादन करने के लिए   पार्सर का उपयोग करता है। सिंटैक्स ट्री अबास्ट्रक्शन के कारण, विभिन्न समर्थित भाषाओं में से किसी की स्रोत फ़ाइलों को   ही [[बैक एंड (कंपाइलर)]] द्वारा संसाधित किया जा सकता है। जीसीसी ने जीएनयू बाइसन के साथ उत्पन्न LALR पार्सर्स का उपयोग करना शुरू किया, लेकिन धीरे-धीरे हाथ से लिखे गए [[पुनरावर्ती वंश पार्सर]] पर स्विच किया गया। 2004 में C++ के लिए रिकर्सिव-डिसेंट पार्सर्स,<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 तक सभी फ्रंट एंड हाथ से लिखे गए रिकर्सिव-डिसेंट पार्सर का उपयोग करते हैं।
[[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 तक कार्यक्रम का वृक्ष प्रतिनिधित्व लक्षित प्रोसेसर से पूरी तरह से स्वतंत्र नहीं था।   पेड़ का अर्थ अलग-अलग भाषा के सामने के छोरों के लिए कुछ अलग था, और सामने के छोर अपने स्वयं के पेड़ कोड प्रदान कर सकते थे। इसे GENERIC और GIMPLE, भाषा-स्वतंत्र पेड़ों के दो नए रूपों की शुरुआत के साथ सरल बनाया गया था, जिन्हें जीसीसी 4.0 के आगमन के साथ पेश किया गया था। जीसीसी 3.x जावा फ्रंट एंड के इंटरमीडिएट प्रतिनिधित्व के आधार पर जेनेरिक अधिक जटिल है। GIMPLE   सरलीकृत GENERIC है, जिसमें विभिन्न निर्माण कई GIMPLE निर्देशों को कम (कंप्यूटर विज्ञान) कर रहे हैं। C (प्रोग्रामिंग लैंग्वेज), C++, और Java (प्रोग्रामिंग लैंग्वेज) फ्रंट एंड सीधे फ्रंट एंड में GENERIC का उत्पादन करते हैं। इसके अतिरिक्त अन्य सामने के छोरों में पार्सिंग के बाद अलग-अलग मध्यवर्ती प्रतिनिधित्व होते हैं और इन्हें सामान्य में परिवर्तित करते हैं।
जीसीसी 4.0 तक प्रोग्राम का ट्री प्रतिनिधित्व लक्षित प्रोसेसर से पूरी तरह स्वतंत्र नहीं था। अलग-अलग लैंग्वेज के फ्रंट एंड के लिए एक पेड़ का अर्थ कुछ अलग था, और फ्रंट एंड अपने स्वयं के ट्री कोड प्रदान कर सकते थे। इसे GENERIC और GIMPLE, लैंग्वेज-स्वतंत्र पेड़ों के दो नए रूप, जिन्हें जीसीसी 4.0 के आगमन के साथ पेश किया गया था, के साथ सरल बनाया गया था। जीसीसी 3.x जावा फ्रंट एंड के मध्यवर्ती प्रतिनिधित्व के आधार पर जेनेरिक अधिक जटिल है। GIMPLE एक सरलीकृत जेनेरिक है, जिसमें विभिन्न निर्माण (कंप्यूटर विज्ञान) को कई GIMPLE निर्देशों में कम किया जा रहा है। C (प्रोग्रामिंग लैंग्वेज), C++, और Java (प्रोग्रामिंग लैंग्वेज) फ्रंट एंड सीधे फ्रंट एंड में जेनेरिक उत्पन्न करते हैं। इसके बजाय अन्य फ्रंट सिरों में पार्सिंग के पश्चात अलग-अलग मध्यवर्ती प्रतिनिधित्व होते हैं और इन्हें जेनेरिक में परिवर्तित किया जाता है।


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


=== सामान्य और GIMPLE ===
=== जेनेरिक और जिम्पल ===
जेनेरिक   [[मध्यवर्ती प्रतिनिधित्व]] भाषा है जिसका उपयोग स्रोत कोड को निष्पादन योग्य में संकलित करते समय मध्य अंत के रूप में किया जाता है। GIMPLE नामक  उपसमुच्चय को जीसीसी के सभी अग्र सिरों द्वारा लक्षित किया जाता है।
जेनेरिक एक [[मध्यवर्ती प्रतिनिधित्व]] लैंग्वेज है जिसका उपयोग सोर्स कोड को निष्पादन योग्य में संकलित करते समय मध्य अंत के रूप में किया जाता है। एक सबसेट, जिसे GIMPLE कहा जाता है, जीसीसी के सभी अग्र सिरों द्वारा लक्षित है।


जीसीसी का मध्य चरण सभी कोड विश्लेषण और अनुकूलन कम्पाइलर करता है, संकलित भाषा और लक्ष्य वास्तुकला दोनों से स्वतंत्र रूप से काम करता है, GENERIC से शुरू होता है<ref>{{Cite web|url=https://gcc.gnu.org/onlinedocs/gccint/GENERIC.html|title=GENERIC (GNU Compiler Collection (GCC) Internals)|website=gcc.gnu.org}}</ref> स्थानांतरण भाषा (RTL) रजिस्टर करने के लिए प्रतिनिधित्व और इसका विस्तार करना। सामान्य प्रतिनिधित्व में मध्य अंत द्वारा अनुकूलित अनिवार्य [[कंप्यूटर प्रोग्रामिंग]] निर्माणों का केवल सबसेट होता है।
जीसीसी का मध्य चरण सभी कोड एनालिसिस और कंपाइलर को अनुकूलित करता है, जेनेरिक से शुरू होकर, संकलित लैंग्वेज और लक्ष्य आर्किटेक्चर दोनों से स्वतंत्र रूप से काम करता है।<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=GIMPLE (GNU Compiler Collection (GCC) Internals)|website=gcc.gnu.org}}</ref> जटिल [[अभिव्यक्ति (प्रोग्रामिंग)]] को [[अस्थायी चर]] का उपयोग करके [[तीन-पता कोड]] में विभाजित किया गया है। यह प्रतिनिधित्व मैककैट कंपाइलर में प्रस्तावित सरल प्रतिनिधित्व से प्रेरित था<ref>{{cite web |url=http://www-acaps.cs.mcgill.ca/info/McCAT/McCAT.html |title=McCAT |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=Laurie Hendren's Home Page|website=www.sable.mcgill.ca}}</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> क्योंकि RTL ऑप्टिमाइजेशन का दायरा बहुत सीमित होता है, और कम उच्च-स्तरीय जानकारी होती है।
जीसीसी ऑप्टिमाइजेशन का सटीक सेट विकसित होने के साथ-साथ रिलीज से रिलीज तक भिन्न होता है, लेकिन इसमें स्टैण्डर्ड एल्गोरिदम सम्मिलित होते हैं, जैसे [[लूप अनुकूलन|लूप ऑप्टिमाइजेशन]], [[ जम्प थ्रेडिंग |जम्प थ्रेडिंग]] , [[सामान्य उपअभिव्यक्ति उन्मूलन|जेनेरिक उपअभिव्यक्ति उन्मूलन]], [[ निर्देश निर्धारण |निर्देश निर्धारण]] इत्यादि। [[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>
इस स्तर पर किए गए कुछ ऑप्टिमाइजेशन में [[डेड-कोड उन्मूलन]], [[आंशिक-अतिरेक उन्मूलन]], [[वैश्विक मूल्य क्रमांकन]], [[विरल सशर्त निरंतर प्रसार]] और समुच्चय का स्केलर प्रतिस्थापन सम्मिलित हैं। [[स्वचालित वैश्वीकरण]] और [[स्वचालित समानांतरीकरण]] जैसे सरणी निर्भरता आधारित ऑप्टिमाइजेशन भी किए जाते हैं। [[प्रोफ़ाइल-निर्देशित अनुकूलन|प्रोफ़ाइल-निर्देशित ऑप्टिमाइजेशन]] भी संभव है.<ref>{{Cite web|url=https://gcc.gnu.org/install/build.html#TOC4|title=Installing GCC: Building - GNU Project|website=gcc.gnu.org}}</ref>
=== बैक एंड ===
=== बैक एंड्स ===
जीसीसी का बैक एंड आंशिक रूप से [[सी प्रीप्रोसेसर]] द्वारा निर्दिष्ट किया गया है और लक्ष्य आर्किटेक्चर के लिए विशिष्ट कार्य करता है, उदाहरण के लिए इसकी अंतहीनता, शब्द आकार और कॉलिंग सम्मेलनों को परिभाषित करने के लिए। बैक एंड का अगला भाग RTL जनरेशन को तय करने में मदद करने के लिए इनका उपयोग करता है, इसलिए चूँकि जीसीसी का RTL नाममात्र प्रोसेसर-स्वतंत्र है, सार निर्देशों का प्रारंभिक अनुक्रम पहले से ही लक्ष्य के अनुकूल है। किसी भी समय, प्रोग्राम प्रतिनिधित्व बनाने वाले वास्तविक RTL निर्देशों को लक्ष्य आर्किटेक्चर के [[मशीन विवरण]] का पालन करना होता है।
जीसीसी का बैक एंड आंशिक रूप से [[सी प्रीप्रोसेसर]] द्वारा निर्दिष्ट है और लक्ष्य आर्किटेक्चर के लिए विशिष्ट कार्य करता है, उदाहरण के लिए इसकी [[endianness]], शब्द आकार और [[ सम्मलेन बुलाना |सम्मलेन बुलाना]] को परिभाषित करने के लिए। बैक एंड का अगला भाग आरटीएल पीढ़ी तय करने में मदद के लिए इनका उपयोग करता है, इसलिए हालांकि जीसीसी का आरटीएल नाममात्र प्रोसेसर-स्वतंत्र है, अमूर्त निर्देशों का प्रारंभिक अनुक्रम पहले से ही लक्ष्य के लिए अनुकूलित है। किसी भी क्षण, प्रोग्राम प्रतिनिधित्व बनाने वाले वास्तविक आरटीएल निर्देशों को लक्ष्य वास्तुकला के [[मशीन विवरण]] का अनुपालन करना होगा।


मशीन विवरण फ़ाइल में अंतिम असेंबली आउटपुट करने के लिए ऑपरेंड बाधाओं और कोड स्निपेट के साथ आरटीएल पैटर्न सम्मलित हैं। बाधाओं से संकेत मिलता है कि   विशेष आरटीएल पैटर्न केवल कुछ हार्डवेयर रजिस्टरों पर (उदाहरण के लिए) लागू हो सकता है, या (उदाहरण के लिए) केवल   सीमित आकार (जैसे 12, 16, 24, ... बिट ऑफसेट, आदि) के तत्काल ऑपरेंड ऑफ़सेट की अनुमति देता है। ). RTL जनरेशन के दौरान, दिए गए टारगेट आर्किटेक्चर के लिए बाधाओं की जाँच की जाती है। आरटीएल के दिए गए स्निपेट को जारी करने के लिए, इसे मशीन विवरण फ़ाइल में आरटीएल पैटर्न के  (या अधिक) से मेल खाना चाहिए, और उस पैटर्न के लिए बाधाओं को पूरा करना चाहिए; अन्यथा, अंतिम RTL को मशीन कोड में बदलना असंभव होगा।
मशीन विवरण फ़ाइल में अंतिम असेंबली को आउटपुट करने के लिए ऑपरेंड बाधाओं और कोड स्निपेट के साथ आरटीएल पैटर्न सम्मिलित हैं। बाधाओं से संकेत मिलता है कि एक विशेष आरटीएल पैटर्न केवल कुछ हार्डवेयर रजिस्टरों पर लागू हो सकता है (उदाहरण के लिए), या (उदाहरण के लिए) केवल सीमित आकार के तत्काल ऑपरेंड ऑफसेट की अनुमति देता है (उदाहरण के लिए 12, 16, 24, ... बिट ऑफसेट, आदि)). आरटीएल पीढ़ी के दौरान, दिए गए लक्ष्य आर्किटेक्चर के लिए बाधाओं की जाँच की जाती है। आरटीएल के दिए गए स्निपेट को जारी करने के लिए, इसे मशीन विवरण फ़ाइल में आरटीएल पैटर्न में से एक (या अधिक) से मेल खाना चाहिए, और उस पैटर्न के लिए बाधाओं को पूरा करना चाहिए; अन्यथा, अंतिम आरटीएल को मशीन कोड में परिवर्तित करना असंभव होगा।


संकलन के अंत में, वैध RTL  सख्त रूप में कम हो जाता है जिसमें प्रत्येक निर्देश वास्तविक मशीन रजिस्टरों और लक्ष्य की मशीन विवरण फ़ाइल से   पैटर्न को संदर्भित करता है। सख्त RTL बनाना   जटिल कार्य है;   महत्वपूर्ण कदम रजिस्टर आवंटन है, जहां वास्तविक हार्डवेयर रजिस्टरों को शुरू में सौंपे गए छद्म रजिस्टरों को बदलने के लिए चुना जाता है। इसके बाद पुनः लोडिंग चरण होता है; कोई छद्म-रजिस्टर जिन्हें वास्तविक हार्डवेयर रजिस्टर नहीं सौंपा गया था, उन्हें स्टैक पर 'स्पिल' किया जाता है, और इस स्पिलिंग को करने के लिए RTL उत्पन्न होता है। इसी तरह,   वास्तविक निर्देश में फिट होने के लिए बहुत बड़े ऑफ़सेट को तोड़ दिया जाना चाहिए और आरटीएल अनुक्रमों द्वारा प्रतिस्थापित किया जाना चाहिए जो ऑफ़सेट बाधाओं का पालन करेंगे।
कम्पाइल के अंत में, वैध आरटीएल को एक सख्त रूप में घटा दिया जाता है जिसमें प्रत्येक निर्देश वास्तविक मशीन रजिस्टरों और लक्ष्य की मशीन विवरण फ़ाइल से एक पैटर्न को संदर्भित करता है। सख्त आरटीएल बनाना एक जटिल कार्य है; एक महत्वपूर्ण कदम रजिस्टर आवंटन है, जहां प्रारंभिक रूप से निर्दिष्ट छद्म-रजिस्टरों को बदलने के लिए वास्तविक हार्डवेयर रजिस्टरों को चुना जाता है। इसके पश्चात पुनः लोडिंग चरण आता है; कोई भी छद्म-रजिस्टर जिन्हें वास्तविक हार्डवेयर रजिस्टर नहीं सौंपा गया था, उन्हें स्टैक में 'स्पिल' कर दिया जाता है, और इस स्पिलिंग को करने के लिए आरटीएल उत्पन्न होता है। इसी तरह, जो ऑफसेट वास्तविक निर्देश में फिट होने के लिए बहुत बड़े हैं, उन्हें तोड़ दिया जाना चाहिए और आरटीएल अनुक्रमों द्वारा प्रतिस्थापित किया जाना चाहिए जो ऑफसेट बाधाओं का पालन करेंगे।


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


=== [[सी ++ मानक पुस्तकालय]] (libstdc ++) ===
=== C++ स्टैण्डर्ड लाइब्रेरी (libstdc++) ===
जीसीसी प्रोजेक्ट में libstdc++ नामक C++ मानक लाइब्रेरी का कार्यान्वयन सम्मलित है,<ref>{{cite web|url=https://gcc.gnu.org/onlinedocs/libstdc++|title=The GNU C++ Library|publisher=GNU Project|accessdate=2021-02-21}}</ref> बंद स्रोत एप्लिकेशन को लिंक करने के अपवाद के साथ जीपीएलv3 लाइसेंस के अंतर्गत लाइसेंस प्राप्त है जब स्रोत जीसीसी के साथ बनाए जाते हैं।<ref>{{cite web|url=https://gcc.gnu.org/onlinedocs/libstdc++/manual/license.html|title=लाइसेंस|publisher=GNU Project|accessdate=2021-02-21}}</ref>
जीसीसी प्रोजेक्ट में 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 है{{when|date=June 2022}}.
वर्तमान वर्जन 11 है।


=== अन्य विशेषताएं ===
=== अन्य विशेषताएं ===
जीसीसी की कुछ विशेषताओं में सम्मलित हैं:
जीसीसी की कुछ विशेषताओं में सम्मिलित हैं:


; [[लिंक-टाइम ऑप्टिमाइज़ेशन]]
; [[लिंक-समय अनुकूलन|लिंक-समय ऑप्टिमाइजेशन]]
: लिंक-टाइम ऑप्टिमाइज़ेशन सीधे लिंक की गई बाइनरी में सुधार करने के लिए ऑब्जेक्ट फ़ाइल सीमाओं में ऑप्टिमाइज़ करता है। लिंक-टाइम ऑप्टिमाइज़ेशन   इंटरमीडिएट फ़ाइल पर निर्भर करता है जिसमें ऑब्जेक्ट फ़ाइल में सम्मलित कुछ गिम्पल प्रतिनिधित्व का क्रमांकन होता है।{{Citation needed|date=January 2016}} स्रोत संकलन के दौरान ऑब्जेक्ट फ़ाइल के साथ फ़ाइल उत्पन्न होती है। प्रत्येक स्रोत संकलन  अलग ऑब्जेक्ट फ़ाइल और लिंक-टाइम हेल्पर फ़ाइल उत्पन्न करता है। जब ऑब्जेक्ट फ़ाइलें लिंक की जाती हैं, तो कंपाइलर को फिर से निष्पादित किया जाता है और अलग-अलग संकलित ऑब्जेक्ट फ़ाइलों में कोड को ऑप्टिमाइज़ करने के लिए हेल्पर फ़ाइलों का उपयोग करता है।
: लिंक-टाइम ऑप्टिमाइज़ेशन लिंक किए गए बाइनरी को सीधे बेहतर बनाने के लिए ऑब्जेक्ट फ़ाइल सीमाओं में ऑप्टिमाइजेशन करता है। लिंक-टाइम ऑप्टिमाइज़ेशन एक मध्यवर्ती फ़ाइल पर निर्भर करता है जिसमें ऑब्जेक्ट फ़ाइल में सम्मिलित कुछ गिम्पल प्रतिनिधित्व का क्रमांकन होता है। फ़ाइल सोर्स कम्पाइल के दौरान ऑब्जेक्ट फ़ाइल के साथ उत्पन्न होती है। प्रत्येक सोर्स कम्पाइल एक अलग ऑब्जेक्ट फ़ाइल और लिंक-टाइम हेल्पर फ़ाइल उत्पन्न करता है। जब ऑब्जेक्ट फ़ाइलें लिंक की जाती हैं, तो कंपाइलर फिर से निष्पादित होता है और अलग-अलग संकलित ऑब्जेक्ट फ़ाइलों में कोड को अनुकूलित करने के लिए सहायक फ़ाइलों का उपयोग करता है।
; प्लग-इन
; प्लग-इन
: [[प्लग-इन (कंप्यूटिंग)]] जीसीसी कंपाइलर को सीधे विस्तारित करता है।<ref>{{cite web |title= Plugins |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=GCC plugins thru the MELT example|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= 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> कई जीसीसी प्लगइन्स पहले ही प्रकाशित हो चुके हैं, विशेष रूप से:
:* पायथन प्लगइन, जो libpython के खिलाफ लिंक करता है, और किसी को कंपाइलर के अंदर से मनमाने ढंग से पायथन स्क्रिप्ट्स को इनवॉइस करने की अनुमति देता है। इसका उद्देश्य जीसीसी प्लगइन्स को पायथन में लिखे जाने की अनुमति देना है।
:* पायथन प्लगइन, जो लिबपीथॉन के विरुद्ध लिंक करता है, और किसी को कंपाइलर के अंदर से मनमानी पायथन स्क्रिप्ट को लागू करने की अनुमति देता है। इसका उद्देश्य जीसीसी प्लगइन्स को पायथन में लिखने की अनुमति देना है।
:* एमईएलटी प्लगइन जीसीसी का विस्तार करने के लिए   उच्च स्तरीय [[लिस्प (प्रोग्रामिंग भाषा)]] जैसी भाषा प्रदान करता है।<ref>{{cite web|title=About GCC MELT|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>
:* एमईएलटी प्लगइन जीसीसी का विस्तार करने के लिए एक उच्च स्तरीय [[लिस्प (प्रोग्रामिंग भाषा)|लिस्प (प्रोग्रामिंग लैंग्वेज)]] जैसी लैंग्वेज प्रदान करता है।<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 में   बार  विवादास्पद मुद्दा था।<ref>{{cite web |title=GCC unplugged [LWN.net] |url=https://lwn.net/Articles/259157/ |website=lwn.net}}</ref>
: प्लगइन्स का समर्थन 2007 में एक विवादास्पद मुद्दा था।<ref>{{cite web |title=GCC unplugged [LWN.net] |url=https://lwn.net/Articles/259157/ |website=lwn.net}}</ref>
; सी ++ सॉफ्टवेयर लेनदेन संबंधी स्मृति
; C++ [[सॉफ़्टवेयर ट्रांसेक्शनल मेमोरी]]
: C++ भाषा में लेन-देन स्मृति के लिए   सक्रिय प्रस्ताव है। संकलन करते समय इसे जीसीसी 6 और नए में सक्षम किया जा सकता है <code>-fजीएनयू-tm</code>.<ref name="gcc6"/><ref>{{Cite web|url=https://gcc.gnu.org/wiki/TransactionalMemory|title=TransactionalMemory - GCC Wiki|website=gcc.gnu.org}}</ref>
: 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. सुविधा सी में वैकल्पिक है, लेकिन इस परिवर्तन के बाद से भी उपलब्ध कराया गया है।<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=Recommendations for extended identifier characters for C and C++|website=www.open-std.org|access-date=2020-03-27}}</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=C Extensions (Using the GNU Compiler Collection (GCC))|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=Typeof - Using the GNU Compiler Collection (GCC)|url=https://gcc.gnu.org/onlinedocs/gcc-5.2.0/gcc/Typeof.html|access-date=2022-01-12|website=gcc.gnu.org}}</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|जीसीसी संकलन हेलो, वर्ल्ड! माइक्रोसॉफ्ट विंडोज पर कार्यक्रम]]प्राथमिक समर्थित (और सर्वोत्तम परीक्षण) प्रोसेसर परिवार 64- और 32-बिट एआरएम हैं<!-- arch64 and arm-->, 64- और 32-बिट x[[86]]_64 और x86<!-- aka e.g. i686 --> और 64-बिट [[पावरपीसी]] और [[स्पार्क]]।<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> <!-- Notably absent from primary list is e.g. RISC-V and MIPS has been moved to secondary, but the latter has been tested for a long time, and both may actually work well, not sure. Nor sure what to read into OS support, known to work for e.g. Windows (i686-pc-cygwin, i686-mingw32 also 64-bit?):
[[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>  
 
https://gcc.gnu.org/gcc-12/criteria.html


The primary platforms are:
वर्जन 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>
aarch64-none-linux-gnu
arm-linux-gnueabi
i586-unknown-freebsd
i686-pc-linux-gnu
powerpc64-unknown-linux-gnu
powerpc64le-unknown-linux-gnu
sparc-sun-solaris2.11
x86_64-pc-linux-gnu
 
The secondary platforms are:
aarch64-elf
i686-apple-darwin
i686-pc-cygwin
i686-mingw32
powerpc-ibm-aix7.1.0.0
s390x-linux-gnu
mips64-linux-gnu
-->
संस्करण 11.1 के अनुसार जीसीसी लक्ष्य प्रोसेसर परिवारों में सम्मलित हैं:<ref>{{Cite web|title=Option Summary (Using the GNU Compiler Collection (GCC))|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
* एआर्क64
* [[डीईसी अल्फा]]
* [[डीईसी अल्फा]]
* एआरएम वास्तुकला परिवार
* एआरएम
* [[एटमेल एवीआर]]
* [[ एटमेल ए.वी.आर ]]
* [[Blackfin]]
* [[ब्लैकफिन]]
* [[ईबीपीएफ]]
* [[ईबीपीएफ]]
* एडाप्टेवा # उत्पाद (जीसीसी 4.8)
* एडाप्टेवा#उत्पाद (जीसीसी 4.8)
* हिताची एच8|एच8/300
* हिताची H8|H8/300
* [[HS12]] 12
* एचसी12
* [[आईए-32]] (x86)
*[[आईए-32]] (x86)
* [[IA-64]] (इंटेल इटेनियम)
* [[IA-64]] (इंटेल इटेनियम)
* [[एमआईपीएस आर्किटेक्चर]]
* [[एमआईपीएस वास्तुकला]]
* मोटोरोला 68000
* मोटोरोला 68000
* [[एमएसपी430]]
* [[एमएसपी430]]
Line 161: Line 119:
* [[एनवीडिया पीटीएक्स]]
* [[एनवीडिया पीटीएक्स]]
* [[पीए-जोखिम]]
* [[पीए-जोखिम]]
* [[पीडीपी-11]]
*[[पीडीपी-11]]
* पावरपीसी
* पावरपीसी
* [[R8C]] / [[M16C]] / [[M32C]]
* [[आर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}}
* [[68HC11]]
* [[68एचसी11]]
* ए29के
*ए29के
* सी 6 एक्स
* [[C6x]]
* सीआर16
* [[सीआर16]]
* डी30वी
* [[डी30वी]]
* [[डीएसपी16xx]]
*डीएसपी16xx
* [[ईट्रैक्स क्रिस]]
* [[ईट्रैक्स संकट]]
* [[विश्वासघाती एफआर]]|FR-30
* [[बेवफा एफआर]]|FR-30
* [[FR-वी]]ी
* [[ FR-वी ]]ी
* आईबीएम ROMP
* [[आईबीएम रोम्प]]
* [[इंटेल i960]]
* [[इंटेल i960]]
* [[आईपी2000]]
*[[आईपी2000]]
* एम32आर
*एम32आर
* [[एमकोर]]
* [[एमसीओआरई]]
* एमआईएल-एसटीडी-1750ए
* [[एमआईएल-एसटीडी-1750ए]]
* [[MMIX]]
* एमएमएक्स
* [[एमएन10200]]
* [[एमएन10200]]
* [[एमएन10300]]
* [[एमएन10300]]
* [[मोटोरोला 88000]]
* [[मोटोरोला 88000]]
* [[एनएस320xx]]
* [[NS320xx]]
* आरएल78
* आरएल78
* तूफानी 16
* [[तूफ़ानी16]]
* वी 850
*[[वी850]]
* [[Xtensa]]
*[[Xtensa]]
{{Refend}}
{{Refend}}
अतिरिक्त प्रोसेसर को FSF संस्करण से अलग बनाए गए जीसीसी संस्करणों द्वारा समर्थित किया गया है:
 
अतिरिक्त प्रोसेसर को एफएसएफ वर्जन से अलग बनाए गए जीसीसी संस्करणों द्वारा समर्थित किया गया है:


{{div col|colwidth=15em|small=no}}
{{div col|colwidth=15em|small=no}}
* [[कोर्टस APS3]]
* [[कॉर्टस APS3]]
* [[एआरसी (प्रोसेसर)]]
* [[एआरसी (प्रोसेसर)]]
* एवीआर32
*एवीआर32
* [[C166]] और [[C167]]
* [[सी166]] और सी167
* डी10वी
* [[डी10वी]]
* [[मछली]]
*[[ मछली ]]
* [[ईएसआई-आरआईएससी]]
* [[ईएसआई-आरआईएससी]]
* षट्भुज (प्रोसेसर)<ref>{{Cite web |url=https://www.codeaurora.org/xwiki/bin/Hexagon/ |title=Hexagon Project Wiki |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>
* [[षट्कोण (प्रोसेसर)]]<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>
* जाली Mico32
* [[LatticeMico32]]
* लैटिसमाइको8
* [[LatticeMico8]]
* [[एमईपी]]
* [[एमईपी]]
* [[MicroBlaze]]़
* [[ MicroBlaze ]]़
* [[मोटोरोला 6809]]
* [[मोटोरोला 6809]]
* एमएसपी430
* एमएसपी430
* [[एनईसी एसएक्स आर्किटेक्चर]]<ref>{{Cite web|url=https://code.google.com/archive/p/sx-gcc|title=Google Code Archive - Long-term storage for Google Code Project Hosting.|website=code.google.com}}</ref>
* [[ एनईसी एसएक्स वास्तुकला ]]<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-बिट माइक्रोकंट्रोलर्स|PIC24/dsPIC
* PIC30#PIC24 और dsPIC 16-बिट माइक्रोकंट्रोलर|PIC24/dsPIC
* PIC30#PIC32 32-बिट माइक्रोकंट्रोलर
* PIC30#PIC32 32-बिट माइक्रोकंट्रोलर
* [[लंबन प्रोपेलर]]
*[[लंबन प्रोपेलर]]
* [[एचपी शनि]] (HP48XGCC)
* [[ एचपी शनि ]] (HP48XGCC)
* सिस्टम/370
* सिस्टम/370
* [[टीआईजीसीसी]] (एम68के वेरिएंट)
* [[TIGCC]] ([[m68k]] वैरिएंट)
* [[टीएमएस9900]]
*[[टीएमएस9900]]
* [[ट्राईकोर]]
* [[ट्राईकोर]]
* [[Z8000]]
* [[Z8000]]
* [[ZPU (माइक्रोप्रोसेसर)]]
* [[ZPU (माइक्रोप्रोसेसर)]]
{{Refend}}
{{Refend}}
जावा जावा कंपाइलर के लिए जीएनयू कंपाइलर या तो मूल मशीन भाषा आर्किटेक्चर या [[जावा वर्चुअल मशीन]] के [[जावा बाइटकोड]] को लक्षित कर सकता है।<ref>{{cite web|url=https://gcc.gnu.org/java/|title=The GNU Compiler for the Java Programming Language|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> जब पुन: लक्ष्यित करने योग्य कंपाइलर जीसीसी को   नए प्लेटफॉर्म पर, बूटस्ट्रैपिंग (कंपाइलर) का प्रायः उपयोग किया जाता है। Motorola 68000, Zilog Z80, और अन्य प्रोसेसर भी विभिन्न टेक्सास इंस्ट्रूमेंट्स, Hewlett Packard, Sharp, और Casio प्रोग्रामेबल ग्राफ़िंग कैलकुलेटर के लिए विकसित जीसीसी संस्करणों में लक्षित हैं।<ref>graphing calculators#programming</ref>
 
[[जावा के लिए जीएनयू कंपाइलर]] जावा कंपाइलर या तो मूल मशीन लैंग्वेज आर्किटेक्चर या [[जावा वर्चुअल मशीन]] के [[जावा बाइटकोड]] को लक्षित कर सकता है।<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 के अंतर्गत लाइसेंस दिया गया है।<ref>{{Cite web|url=https://gcc.gnu.org/onlinedocs/gcc/Copying.html#Copying|title=Using the GNU Compiler Collection|website=gnu.org|access-date=2019-11-05}}</ref> जीसीसी रनटाइम अपवाद जीसीसी के साथ मालिकाना कार्यक्रमों (मुफ्त सॉफ्टवेयर के अतिरिक्त) के संकलन की अनुमति देता है। यह जीसीसी स्रोत कोड की लाइसेंस शर्तों को प्रभावित नहीं करता है।<ref>{{cite web|publisher=FSF|title=GCC Runtime Exception|url=https://www.gnu.org/licenses/gcc-exception|access-date=2014-04-10}}</ref>
जीसीसी को जीएनयू जनरल पब्लिक लाइसेंस वर्जन 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:


== बाहरी संबंध ==
== बाहरी संबंध ==
{{Commons|GCC}}
{{Wikibooks|GNU C Compiler Internals}}


=== आधिकारिक ===
=== आधिकारिक ===
* {{official website}}
* [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 आर्किटेक्चर और आंतरिक दस्तावेजों का संग्रह] IIT में। बंबई
* [http://www.cse.iitb.ac.in/grc/ जीसीसी 4.0.2 आर्किटेक्चर और आंतरिक दस्तावेजों का संग्रह] आई.आई.टी. में। बंबई
* {{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=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: पुराना, तेज|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 }}
* {{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/ From Source to Binary: The Inner Workings of जीसीसी], डिएगो नोविलो द्वारा, रेड हैट#रेड हैट पत्रिका, दिसम्बर 2004
* [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 जेनरिक और GIMPLE पर 2003 का   पेपर]
* [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 मार्केटिंग साइग्नस सपोर्ट], 1990 के दशक के जीसीसी विकास को कवर करने वाला निबंध, 30 मासिक के साथ अंत में सिग्नस इंजीनियरिंग अनुभाग के अंदर के लिए रिपोर्ट
* [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 फीयर ऑफ फोर्किंग], रिक मोएन द्वारा  निबंध जिसमें जीसीसी/EGCS  सहित सात जाने-माने फोर्क रिकॉर्ड किए गए हैं
* [http://linuxmafia.com/faq/Licensing_and_Law/forking.html फोर्किंग का डर], रिक मोएन का एक निबंध जिसमें जीसीसी/ईजीसीएस सहित सात प्रसिद्ध फोर्क्स की रिकॉर्डिंग है।
 
{{GNU}}
{{FOSS}}
{{Authority control}}
श्रेणी:1987 सॉफ्टवेयर
श्रेणी:सी (प्रोग्रामिंग भाषा) कम्पाइलर
श्रेणी:सी++ कंपाइलर्स
श्रेणी:कम्पाइलर
श्रेणी:क्रॉस-प्लेटफ़ॉर्म मुफ़्त सॉफ़्टवेयर
श्रेणी:फोरट्रान कम्पाइलर
श्रेणी:मुफ्त कम्पाइलर और दुभाषिए
श्रेणी:जीएनयू प्रोजेक्ट सॉफ़्टवेयर
श्रेणी:जावा विकास उपकरण
श्रेणी:पास्कल (प्रोग्रामिंग भाषा) कम्पाइलर
श्रेणी:साफ्टवेयर जिसे सी++ में फिर से लिखा गया था
श्रेणी:सी++ में मुफ्त सॉफ्टवेयर प्रोग्राम किया गया
श्रेणी:जीपीएल लाइसेंस का उपयोग करने वाला सॉफ्टवेयर
श्रेणी:यूनिक्स प्रोग्रामिंग टूल्स
 


[[Category: Machine Translated Page]]
[[Category:All Wikipedia articles in need of updating]]
[[Category:Created On 17/02/2023]]
[[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, जीसीसी की हालिया 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]

डिजाइन

जीसीसी की विस्तारित कम्पाइल पाइपलाइन का अवलोकन, जिसमें preprocessor , असेंबली लैंग्वेज और लिंकर (कंप्यूटिंग) जैसे विशेष कार्यक्रम सम्मिलित हैं।
जीसीसी बहु-लैंग्वेज और बहु-सीपीयू संकलक ों के विशिष्ट 3-चरण आर्किटेक्चर का अनुसरण करता है। सभी सार वाक्यविन्यास वृक्ष को मध्य अंत में एक जेनेरिक अमूर्त प्रतिनिधित्व में परिवर्तित कर दिया जाता है, जिससे प्रोग्राम ऑप्टिमाइजेशन और बाइनरी कोड जेनरेशन सुविधाएं सभी लैंग्वेजेज द्वारा साझा की जा सकती हैं।

जीसीसी का बाहरी इंटरफ़ेस यूनिक्स सम्मेलनों का पालन करता है। उपयोगकर्ता एक लैंग्वेज-विशिष्ट ड्राइवर प्रोग्राम शुरू करते हैं (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]

फ्रोंट्स एंड्स

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

प्रत्येक फ्रंट एंड (संकलक) किसी दिए गए सोर्स फ़ाइल के अमूर्त सिंटैक्स ट्री का उत्पादन करने के लिए एक पार्सर का उपयोग करता है। सिंटैक्स ट्री एब्स्ट्रैक्शन के कारण, विभिन्न समर्थित लैंग्वेजेज में से किसी की सोर्स फ़ाइलों को एक ही बैक एंड (कंपाइलर) द्वारा संसाधित किया जा सकता है। जीसीसी ने जीएनयू बाइसन के साथ उत्पन्न एलएएलआर पार्सर का उपयोग शुरू किया, लेकिन धीरे-धीरे 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]

स्टैण्डर्ड रिलीज़ में समर्थित कम-ज्ञात लक्ष्य प्रोसेसर में सम्मिलित हैं:

अतिरिक्त प्रोसेसर को एफएसएफ वर्जन से अलग बनाए गए जीसीसी संस्करणों द्वारा समर्थित किया गया है:

जावा के लिए जीएनयू कंपाइलर जावा कंपाइलर या तो मूल मशीन लैंग्वेज आर्किटेक्चर या जावा वर्चुअल मशीन के जावा बाइटकोड को लक्षित कर सकता है।[75] जब जीसीसी को एक नए प्लेटफॉर्म पर पुन: लक्ष्यीकरणीय संकलक बनाया जाता है, तो अक्सर बूटस्ट्रैपिंग (कंपाइलर) का उपयोग किया जाता है। विभिन्न टेक्सास इंस्ट्रूमेंट्स, हेवलेट पैकार्ड, शार्प और कैसियो प्रोग्रामेबल ग्राफिंग कैलकुलेटर के लिए विकसित जीसीसी संस्करणों में मोटोरोला 68000, ज़िलॉग ज़ेड80 और अन्य प्रोसेसर को भी लक्षित किया गया है।[76]

लाइसेंस

जीसीसी को जीएनयू जनरल पब्लिक लाइसेंस वर्जन 3 के अंतर्गत लाइसेंस प्राप्त है।[77] जीसीसी रनटाइम एक्सेप्शन जीसीसी के साथ प्रोप्राइटरी प्रोग्राम्स (फ्री सॉफ्टवेयर के अतिरिक्त) के कम्पाइलेशन की अनुमति देता है। यह जीसीसी सोर्स कोड की लाइसेंस स्थितियों को प्रभावित नहीं करता है।[78]

यह भी देखें

  • कंपाइलरों की लिस्ट
  • मिनजीडब्ल्यू
  • एलएलवीएम/क्लैंग

संदर्भ

  1. Cite error: Invalid <ref> tag; no text was provided for refs named loc
  2. Cite error: Invalid <ref> tag; no text was provided for refs named release-history
  3. GCC Rust, Rust GCC, 2023-06-04, retrieved 2023-06-04
  4. "जीसीसी द्वारा समर्थित प्रोग्रामिंग भाषाएँ". GNU Project. Retrieved 2014-06-23.
  5. 5.0 5.1 "GCC 6 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org.
  6. 6.0 6.1 "ओपनएसीसी - जीसीसी विकी". gcc.gnu.org.
  7. "एलएलवीएम कंपाइलर इंफ्रास्ट्रक्चर प्रोजेक्ट". llvm.org.
  8. "Apple's GPLv3 purge". meta.ath0.com (in English). Retrieved 2021-01-12.
  9. Linnemann, Reid (June 20, 2012). "क्यों बजना". Retrieved 2021-01-12.
  10. "August 29, 2007: FreeBSD Foundation Newsletter, August 29, 2007". 2007-10-11. Archived from the original on October 11, 2007. Retrieved 2021-01-12.
  11. "Installing GCC: Binaries - GNU Project - Free Software Foundation (FSF)". gcc.gnu.org. Retrieved 2021-01-12.
  12. von Hagen, William (2006). जीसीसी के लिए निश्चित गाइड. Definitive Guides (2nd ed.). Apress. p. XXVII. ISBN 978-1-4302-0219-6. इसलिए उन्होंने VUCK के लेखक को पत्र लिखकर पूछा कि क्या GNU इसका उपयोग कर सकता है। जाहिर तौर पर, VUCK का डेवलपर असहयोगी था, उसने जवाब दिया कि विश्वविद्यालय मुफ़्त था लेकिन कंपाइलर नहीं था।
  13. 13.0 13.1 13.2 Stallman, Richard (September 20, 2011). "जीएनयू प्रोजेक्ट के बारे में". The GNU Project. Retrieved October 9, 2011.
  14. Puzo, Jerome E., ed. (February 1986). "ग्नू का चिड़ियाघर". GNU's Bulletin. Free Software Foundation. 1 (1). Retrieved 2007-08-11.
  15. 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.
  16. Richard M. Stallman (forwarded by Leonard H. Tower Jr.) (March 22, 1987). "जीएनयू सी कंपाइलर बीटा परीक्षण रिलीज". Newsgroupcomp.lang.c. Retrieved October 9, 2011.
  17. 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.
  18. Salus, Peter H. (2005). "Chapter 10. SUN and gcc". डेमन, ग्नू और पेंगुइन. Groklaw.
  19. Garfinkel, Simson L. (6 August 1990). "जीएनयू सॉफ्टवेयर के लिए तैयार हो जाइए". Computerworld. p. 102.
  20. 20.0 20.1 Henkel-Wallace, David (August 15, 1997), A new compiler project to merge the existing GCC forks, retrieved May 25, 2012.
  21. "जीसीसी विकास का संक्षिप्त इतिहास". www.softpanorama.org. Retrieved 2021-01-24.
  22. "इतिहास - जीसीसी विकी". gcc.gnu.org. Retrieved 2020-09-28.
  23. "जीसीसी संचालन समिति - जीएनयू परियोजना". gcc.gnu.org.
  24. "PATCH] Remove chill". gcc.gnu.org. Retrieved July 29, 2010.
  25. "जीएनयू फोरट्रान द्वारा समर्थित फोरट्रान 2003 सुविधाओं का चार्ट". GNU. Retrieved 2009-06-25.
  26. "जीएनयू फोरट्रान द्वारा समर्थित फोरट्रान 2008 सुविधाओं का चार्ट". GNU. Retrieved 2009-06-25.
  27. "GCC 8 Release Series — Changes, New Features, and Fixes". gcc.gnu.org.
  28. "सिम्बियन जीसीसी सुधार परियोजना". Retrieved 2007-11-08.
  29. "लिनक्स बोर्ड सपोर्ट पैकेज". Archived from the original on 2011-06-07. Retrieved 2021-01-24.
  30. "जीसीसी को एक क्रॉस-कंपाइलर के रूप में स्थापित करना". ps2stuff. 2002-06-08. Archived from the original on December 11, 2008. Retrieved 2008-12-12.
  31. "कंपाइलफार्म - जीसीसी विकी". gcc.gnu.org.
  32. "sh4 g++ guide". Archived from the original on 2002-12-20. Retrieved 2008-12-12.
  33. "लिनक्स सूचना परियोजना". 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.
  34. "The D Language Front-End Finally Merged Into GCC 9 - Phoronix". phoronix.com. Retrieved 2021-01-19.
  35. 35.0 35.1 "जीसीसी फ्रंट एंड". gnu.org. Retrieved November 25, 2011.
  36. "GCC 5 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org.
  37. "GCC 7 Release Series". gnu.org. Retrieved March 20, 2018.
  38. Proven, Liam (2022-12-16). "GCC 13 to support Modula-2: Follow-up to Pascal lives on in FOSS form". Retrieved 2022-12-19.
  39. "जीसीसी में सी++ मानक समर्थन". Retrieved May 17, 2021.
  40. "जीसीसी यूपीसी (जीसीसी एकीकृत समानांतर सी)". Intrepid Technology, Inc. 2006-02-20. Retrieved 2009-03-11.
  41. "जंग के लिए जीसीसी फ्रंट-एंड". Retrieved Jan 6, 2023.
  42. "जंग के लिए जीसीसी फ्रंट-एंड (जीथूब)". GitHub. January 5, 2023. Retrieved Jan 6, 2023.
  43. Spengler, Brad (12 January 2021). "ओपन सोर्स सिक्योरिटी, इंक. ने रस्ट के लिए जीसीसी फ्रंट-एंड की फंडिंग की घोषणा की".
  44. "Security Features: Compile Time Buffer Checks (FORTIFY_SOURCE)". fedoraproject.org. Retrieved 2009-03-11.
  45. "जीसीसी बनाने के लिए उपयोग की जाने वाली भाषाएँ". Archived from the original on May 27, 2008. Retrieved 14 September 2008.
  46. "जीसीसी आंतरिक". GCC.org. Retrieved March 1, 2010.
  47. "जीसीसी - जीएनयू प्रोजेक्ट के लिए पूर्वापेक्षाएँ". gcc.gnu.org. Retrieved 2021-09-05.
  48. "GCC allows C++ – to some degree". The H. June 1, 2010.
  49. "Re: Efforts to attract more users?". lists.gnu.org.
  50. "GCC 4.8 Release Series: Changes, New Features, and Fixes". Retrieved October 4, 2013.
  51. "bootstrap: Update requirement to C++11". GitHub. Retrieved May 18, 2020.
  52. "GCC 3.4 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org.
  53. "GCC 4.1 Release Series — Changes, New Features, and Fixes - GNU Project". gcc.gnu.org.
  54. "सामान्य (जीएनयू कंपाइलर संग्रह (जीसीसी) आंतरिक)". gcc.gnu.org.
  55. "जिम्पल (जीएनयू कंपाइलर कलेक्शन (जीसीसी) इंटरनल्स)". gcc.gnu.org.
  56. "मैककैट". Archived from the original on August 12, 2004. Retrieved September 14, 2017.{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  57. "लॉरी हेंड्रेन का होम पेज". www.sable.mcgill.ca.
  58. Novillo, Diego (December 2004). "From Source to Binary: The Inner Workings of GCC". Red Hat Magazine. Archived from the original on April 1, 2009.
  59. "Installing GCC: Building - GNU Project". gcc.gnu.org.
  60. "जीएनयू सी++ लाइब्रेरी". GNU Project. Retrieved 2021-02-21.
  61. "लाइसेंस". GNU Project. Retrieved 2021-02-21.
  62. "प्लग-इन". GCC online documentation. Retrieved July 8, 2013.
  63. Starynkevitch, Basile. "MELT उदाहरण के माध्यम से GCC प्लगइन्स" (PDF). Archived (PDF) from the original on 2014-04-13. Retrieved 2014-04-10.
  64. "जीसीसी मेल्ट के बारे में". Archived from the original on July 4, 2013. Retrieved July 8, 2013.
  65. "GCC unplugged [LWN.net]". lwn.net.
  66. "ट्रांजेक्शनलमेमोरी - जीसीसी विकी". gcc.gnu.org.
  67. "Lewis Hyatt - [PATCH] wwwdocs: Document support for extended identifiers added to GCC". gcc.gnu.org. Retrieved 2020-03-27.
  68. "C और C++ के लिए विस्तारित पहचानकर्ता वर्णों के लिए अनुशंसाएँ". www.open-std.org. Retrieved 2020-03-27.
  69. "सी एक्सटेंशन (जीएनयू कंपाइलर कलेक्शन (जीसीसी) का उपयोग करके)". gcc.gnu.org. Retrieved 2022-01-12.
  70. "टाइपोफ़ - जीएनयू कंपाइलर संग्रह (जीसीसी) का उपयोग करना". gcc.gnu.org. Retrieved 2022-01-12.
  71. "GCC 12 Release Criteria". gcc.gnu.org. 2022-10-26. Retrieved 2023-01-27.
  72. "विकल्प सारांश (जीएनयू कंपाइलर संग्रह (जीसीसी) का उपयोग करके)". gcc.gnu.org. Retrieved 2020-08-21.
  73. "हेक्सागोन प्रोजेक्ट विकी". Archived from the original on March 23, 2012. Retrieved May 19, 2011.
  74. "Google कोड संग्रह - Google कोड प्रोजेक्ट होस्टिंग के लिए दीर्घकालिक भंडारण।". code.google.com.
  75. "जावा प्रोग्रामिंग भाषा के लिए जीएनयू कंपाइलर". Archived from the original on May 9, 2007. Retrieved April 22, 2010.
  76. graphing calculators#programming
  77. "जीएनयू कंपाइलर संग्रह का उपयोग करना". gnu.org. Retrieved 2019-11-05.
  78. "जीसीसी रनटाइम अपवाद". FSF. Retrieved 2014-04-10.


अग्रिम पठन


बाहरी संबंध

आधिकारिक

अन्य