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

From Vigyanwiki
No edit summary
No edit summary
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
{{Short description|Free and open-source compiler for various programming languages}}
{{Short description|Free and open-source compiler for various programming languages}}


{{Infobox software
'''जीएनयू कंपाइलर कलेक्शन''' (जीसीसी) जीएनयू प्रोजेक्ट द्वारा निर्मित ऑप्टिमाइज़िंग कंपाइलर है जो विभिन्न [[प्रोग्रामिंग भाषा|प्रोग्रामिंग लैंग्वेजेज]], [[कंप्यूटर आर्किटेक्चर]] और [[ऑपरेटिंग सिस्टम]] को सपोर्ट करता है। [[फ्री सॉफ्टवेयर फाउंडेशन]] (एफएसएफ) [[जीएनयू जनरल पब्लिक लाइसेंस]] (जीएनयू जीपीएल) के अंतर्गत जीसीसी को [[मुफ्त सॉफ्टवेयर|फ्री सॉफ्टवेयर]] के रूप में वितरित करता है। जीसीसी जीएनयू टूलचेन का प्रमुख घटक है और जीएनयू तथा [[लिनक्स कर्नेल]] से संबंधित अधिकांश प्रोजेक्ट्स के लिए स्टैण्डर्ड कंपाइलर है। 2019 में कोड की लगभग 15 मिलियन लाइनों के साथ, जीसीसी अस्तित्व में सबसे बड़े फ्री प्रोग्रामों में से एक है।<ref name="loc"/> इसने फ्री सॉफ़्टवेयर के विकास में टूल और उदाहरण दोनों के रूप में महत्वपूर्ण भूमिका निभाई है।
| name = GNU Compiler Collection
| logo = [[File:GNU Compiler Collection logo.svg|100px]]
| logo caption =
| screenshot = GCC 10.2 GNU Compiler Collection self-compilation.png
| caption = Screenshot of GCC 10.2 compiling its own source code
| collapsible =
| author = [[Richard Stallman]]
| developer = [[GNU Project]]
| 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 = [[Cross-platform]]
| platform = [[GNU]] and many others
| 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 = English
| genre = [[Compiler]]
| 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}}
}}
 
'''[[जीएनयू]] कंपाइलर कलेक्शन''' (जीसीसी) [[जीएनयू परियोजना|जीएनयू प्रोजेक्ट]] द्वारा निर्मित ऑप्टिमाइज़िंग कंपाइलर है जो विभिन्न [[प्रोग्रामिंग भाषा|प्रोग्रामिंग लैंग्वेजेज]], [[कंप्यूटर आर्किटेक्चर]] और [[ऑपरेटिंग सिस्टम]] को सपोर्ट करता है। [[फ्री सॉफ्टवेयर फाउंडेशन]] (एफएसएफ) [[जीएनयू जनरल पब्लिक लाइसेंस]] (जीएनयू जीपीएल) के अंतर्गत जीसीसी को [[मुफ्त सॉफ्टवेयर|फ्री सॉफ्टवेयर]] के रूप में वितरित करता है। जीसीसी जीएनयू टूलचेन का प्रमुख घटक है और जीएनयू तथा [[लिनक्स कर्नेल]] से संबंधित अधिकांश प्रोजेक्ट्स के लिए स्टैण्डर्ड कंपाइलर है। 2019 में कोड की लगभग 15 मिलियन लाइनों के साथ, जीसीसी अस्तित्व में सबसे बड़े फ्री प्रोग्रामों में से एक है।<ref name="loc"/> इसने फ्री सॉफ़्टवेयर के विकास में टूल और उदाहरण दोनों के रूप में महत्वपूर्ण भूमिका निभाई है।


जब इसे सर्वप्रथम 1987 में [[ रिचर्ड स्टालमैन |रिचर्ड स्टालमैन]] द्वारा प्रस्तावित किया गया था, तो जीसीसी 1.0 को जीएनयू C कंपाइलर नाम दिया गया था क्योंकि यह केवल C (प्रोग्रामिंग लैंग्वेज) को हैंडल करता था।<ref name="release-history" /> इसे उसी वर्ष दिसंबर में C++ कंपाइल करने के लिए विस्तारित किया गया था। कंपाइलर फ्रंट एंड को  पश्चात में [[ उद्देश्य सी |ऑब्जेक्टिव C]], ऑब्जेक्टिव-[[ सी ++ | C ++]], [[फोरट्रान]], [[एडा (प्रोग्रामिंग भाषा)|एडा (प्रोग्रामिंग लैंग्वेज)]], [[डी (प्रोग्रामिंग भाषा)|डी (प्रोग्रामिंग लैंग्वेज)]], गो (प्रोग्रामिंग लैंग्वेज) और रस्ट (प्रोग्रामिंग लैंग्वेज) के लिए विकसित किया गया था।<ref>{{Citation |title=GCC Rust |date=2023-06-04 |url=https://github.com/Rust-GCC/gccrs |access-date=2023-06-04 |publisher=Rust GCC}}</ref><ref>{{cite web|url=https://gcc.gnu.org/frontends.html|title=जीसीसी द्वारा समर्थित प्रोग्रामिंग भाषाएँ|access-date=2014-06-23|publisher=GNU Project }}</ref> [[OpenMP|ओपनएमपी]] और [[OpenACC|ओपनएसीसी]] स्पेसिफिकेशन्स C और C++ कंपाइलरों में भी समर्थित हैं।<ref name="gcc6">{{Cite web|url=https://gcc.gnu.org/gcc-6/changes.html|title=GCC 6 Release Series — Changes, New Features, and Fixes - GNU Project|website=gcc.gnu.org}}</ref><ref name=":2">{{Cite web|url=https://gcc.gnu.org/wiki/OpenACC|title=ओपनएसीसी - जीसीसी विकी|website=gcc.gnu.org}}</ref>
जब इसे सर्वप्रथम 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>
Line 239: 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 जीसीसी विकास योजना]
Line 260: Line 228:
* [https://gcc.gnu.org/egcs-1.0/features.html EGCS 1.0 सुविधाओं की सूची]
* [https://gcc.gnu.org/egcs-1.0/features.html EGCS 1.0 सुविधाओं की सूची]
* [http://linuxmafia.com/faq/Licensing_and_Law/forking.html फोर्किंग का डर], रिक मोएन का एक निबंध जिसमें जीसीसी/ईजीसीएस सहित सात प्रसिद्ध फोर्क्स की रिकॉर्डिंग है।
* [http://linuxmafia.com/faq/Licensing_and_Law/forking.html फोर्किंग का डर], रिक मोएन का एक निबंध जिसमें जीसीसी/ईजीसीएस सहित सात प्रसिद्ध फोर्क्स की रिकॉर्डिंग है।
{{GNU}}
{{FOSS}}
श्रेणी:1987 सॉफ़्टवेयर
श्रेणी:सी (प्रोग्रामिंग लैंग्वेज) कंपाइलर
श्रेणी:C++ कंपाइलर
श्रेणी:संकलक
श्रेणी:क्रॉस-प्लेटफ़ॉर्म फ्री सॉफ़्टवेयर
श्रेणी:फोरट्रान कंपाइलर
श्रेणी:निःशुल्क संकलनकर्ता और दुभाषिए
श्रेणी:जीएनयू प्रोजेक्ट सॉफ्टवेयर
श्रेणी:जावा विकास उपकरण
श्रेणी:पास्कल (प्रोग्रामिंग लैंग्वेज) कंपाइलर
श्रेणी:सॉफ़्टवेयर जिसे C++ में पुनः लिखा गया था
श्रेणी:C++ में प्रोग्राम किया गया निःशुल्क सॉफ़्टवेयर
श्रेणी:जीपीएल लाइसेंस का उपयोग करने वाला सॉफ़्टवेयर
श्रेणी:यूनिक्स प्रोग्रामिंग उपकरण


[[Category:All Wikipedia articles in need of updating]]
[[Category:All Wikipedia articles in need of updating]]

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.


अग्रिम पठन


बाहरी संबंध

आधिकारिक

अन्य