GNU Compiler Collection | ||||
---|---|---|---|---|
![]() | ||||
![]() | ||||
Ontwikkelaar(s) | GNU Project | |||
Uitgebracht | 23 mei 1987 (38 jaar geleden) | |||
Recentste versie | 5.1.0 (22 april 2015),[1] 5.2.0 (16 juli 2015),[2] 5.3.0 (4 december 2015),[3] 4.9.3 (26 juni 2015),[4] 4.8.5 (23 juni 2015),[5] 6.1.0 (27 april 2016),[6] 5.4.0 (3 juni 2016),[7] 4.9.4 (3 augustus 2016),[8] 6.2.0 (22 augustus 2016),[9] 6.3.0 (21 december 2016),[9][10] 7.1.0 (2 mei 2017),[9][11] 7.2.0 (14 augustus 2017),[12][13] 7.3 (25 januari 2018),[14][15] 8.1 (2 mei 2018),[16] 8.2 (26 juli 2018),[17] 8.3 (22 februari 2019),[18] 9.1 (3 mei 2019),[19] 9.2 (12 augustus 2019),[20] 7.4 (6 december 2018),[21] 7.5 (14 november 2019),[22] 9.3 (12 maart 2020),[23][24] 10.1 (7 mei 2020),[25] 8.4 (4 maart 2020),[26] 10.3 (8 april 2021),[27] 11.1 (27 april 2021),[28] 11.2 (28 juli 2021),[29] 12.1 (6 mei 2022),[30] 12.2 (19 augustus 2022),[31] 13.1 (26 april 2023),[32] 13.2 (27 juli 2023),[33] 14.1 (7 mei 2024),[34] 15.1 (25 april 2025)[35] ![]() | |||
Onderhoudsversie | 9.2 / 8.3 / 7.4 / 6.5 / 5.5 (12 augustus 2019 / 22 februari 2019 / 6 december 2018 / 26 oktober 2018 / 10 oktober 2017) | |||
Status | Actief | |||
Besturingssysteem | Multiplatform | |||
Geschreven in | C++[36] | |||
Categorie | Compiler | |||
Licentie(s) | GNU General Public License en GNU Lesser General Public License | |||
Versiebeheer | Officiële broncode | |||
Website | (en) Projectpagina | |||
|

GCC, wat staat voor GNU Compiler Collection is een verzameling compilers, die onder de GPL wordt verspreid door de Free Software Foundation. Oorspronkelijk stond de afkorting voor de GNU C Compiler, maar nu kan GCC ook andere programmeertalen dan C aan, zoals C++, Fortran, Java en Ada.
GCC is een belangrijk hulpmiddel voor vrije software. De oorspronkelijke GCC is geschreven door Richard Stallman in 1987. Nu wordt GCC beheerd door een groep programmeurs verspreid over de hele wereld. GCC is geporteerd naar meer processoren en besturingssystemen dan enige andere compiler.
Structuur
GCC-compilers bestaan uit een frontend, een middle-end en een backend. Het programma gcc
is zelf geen compiler, maar zorgt ervoor dat de juiste onderdelen van GCC worden aangeroepen, afhankelijk van de brontaal die gecompileerd wordt.
De frontend is taalspecifiek: iedere taal die door GCC gecompileerd kan worden heeft een eigen frontend. Tot de taken van de frontend behoren het parsen van de broncode en uitvoeren van taalspecifieke controles zoals type checking. De frontend creëert een abstracte syntaxisboom (abstract syntax tree, AST) van de broncode in een interne representatie (IR) die GENERIC wordt genoemd.
Nadat de frontend een GENERIC-representatie van het programma heeft gecreëerd wordt deze doorgegeven aan de middle-end. Alle GCC-compilers gebruiken dezelfde middle-end en backend: deze twee zijn volledig taalonafhankelijk en werken op taalonafhankelijke IRs.
De GENERIC-representatie gecreëerd door een frontend wordt doorgegeven aan de middle-end. Deze converteert de GENERIC AST naar een andere IR, GIMPLE genoemd. GIMPLE is een subset van GENERIC, maar legt een aantal restricties op. Zo hebben bijvoorbeeld expressies in GIMPLE niet meer dan drie operands. Deze GIMPLE wordt vervolgens geoptimaliseerd.
Vervolgens wordt de geoptimaliseerde GIMPLE-representatie omgezet naar SSA (Static Single Assignment). Het belangrijkste kenmerk van SSA is dat er aan iedere variabele slechts één keer een waarde wordt toegewezen. Variabelen veranderen dus nooit van waarde. Bij het omzetten naar SSA wordt op iedere plek waar een waarde aan een bestaande variabele wordt toegewezen een nieuwe variabele geïntroduceerd. Door deze eigenschap is SSA bijzonder geschikt voor een aantal optimalisaties.
De geoptimaliseerde SSA wordt vervolgens omgezet in RTL (Register Transfer Language). RTL is een interne representatie die bestaat uit instructies voor een virtuele machine met een oneindig aantal registers. In tegenstelling tot de andere IRs is de representatie van een programma in RTL afhankelijk van de processor waarvoor gecompileerd wordt. Dit maakt een aantal processor-specifieke peephole-optimalisaties mogelijk.
Omdat deze optimalisaties processorafhankelijk zijn, vindt deze optimalisatiefase plaats in de backend van GCC: de backend krijgt de RTL-representatie van de broncode aangeleverd door de middle-end. Na optimalisatie gebruikt de backend deze RTL om assembler te genereren.
Op dit punt heeft GCC zijn werk gedaan, en wordt de gegenereerde assembler doorgegeven aan een assembleerprogramma, dat zelf geen deel uitmaakt van GCC, om machinetaal te produceren. Om van deze machinetaal een uitvoerbaar bestand te maken moet deze eerst nog gelinkt worden door de linker.
Functies
- Ondersteunde processorarchitecturen: AArch64[37], ARM, i386, x86-64, IBM POWER8[38], RS/6000[39], PowerPC[39], SPARC en andere[40]
- Code-optimalisatie[41]
Externe links
- (en) gcc.gnu.org Projectpagina
- (en) Redhat.com From Source to Binary: The Inner Workings of GCC, RedHat Magazine, December, 2004
- (en) Versiegeschiedenis op GNU.org
- ↑ GCC 5.1 Released.
- ↑ GCC 5.2 Released.
- ↑ GCC 5.3 Released.
- ↑ GCC 4.9.3 Released.
- ↑ GCC 4.8.5 Released.
- ↑ GCC 6.1 Released. Geraadpleegd op 3 augustus 2016.
- ↑ GCC 5.4 Released. Geraadpleegd op 3 augustus 2016.
- ↑ GCC 4.9.4 Released. Geraadpleegd op 3 augustus 2016.
- ↑ a b c GCC Releases.
- ↑ GCC 6.3 Released (21 december 2016). Geraadpleegd op 22 december 2016.
- ↑ GCC 7.1 Released (2 mei 2017).
- ↑ GCC Releases (anglais).
- ↑ GCC 7.2 Released (anglais).
- ↑ GCC 7 Release Series. Geraadpleegd op 25 januari 2018.
- ↑ "GCC 7.3 Released"; auteur (als tekenreeks): Richard Biener; taal van werk of naam: Engels; datum van uitgave: 25 januari 2018; geraadpleegd op: 27 januari 2018.
- ↑ GCC 8 Release Series. Geraadpleegd op 4 mei 2018.
- ↑ GCC 8 Release Series. Geraadpleegd op 26 juli 2018.
- ↑ GCC 8.3 Released. Geraadpleegd op 22 februari 2019.
- ↑ GCC 9 Release Series. Geraadpleegd op 3 mei 2019.
- ↑ GCC 9.2 Released (12 augustus 2019). Geraadpleegd op 9 december 2019.
- ↑ GCC 7.4 Released (6 december 2018). Geraadpleegd op 9 december 2019.
- ↑ GCC 7.5 Released (14 november 2019). Geraadpleegd op 9 december 2019.
- ↑ "GCC 9.4 Status Report"; auteur (als tekenreeks): Jakub Jelinek; datum van uitgave: 12 maart 2020; geraadpleegd op: 27 maart 2020.
- ↑ "GCC 9.3 Released"; auteur (als tekenreeks): Jakub Jelinek; taal van werk of naam: Engels; datum van uitgave: 12 maart 2020; geraadpleegd op: 10 mei 2020.
- ↑ "GCC 10.1 Released"; auteur (als tekenreeks): Jakub Jelinek; taal van werk of naam: Engels; datum van uitgave: 7 mei 2020; geraadpleegd op: 10 mei 2020.
- ↑ "GCC 8.4 Released"; auteur (als tekenreeks): Jakub Jelinek; taal van werk of naam: Engels; datum van uitgave: 4 maart 2020; geraadpleegd op: 10 mei 2020.
- ↑ "GCC 10.3 Released"; auteur (als tekenreeks): Richard Biener; taal van werk of naam: Engels; datum van uitgave: 8 april 2021; geraadpleegd op: 8 april 2021.
- ↑ GCC 11.1 Released.
- ↑ GCC 11.2 Released (28 juli 2021).
- ↑ "GCC 12.1 Released"; auteur (als tekenreeks): Richard Biener; datum van uitgave: 6 mei 2022; geraadpleegd op: 6 mei 2022.
- ↑ "GCC 12.2 Released"; auteur (als tekenreeks): Richard Biener; datum van uitgave: 19 augustus 2022; geraadpleegd op: 19 augustus 2022.
- ↑ GCC 13.1 Released (26 april 2023). Geraadpleegd op 26 april 2023.
- ↑ Richard Biener, GCC 13.2 Released (27 juli 2023). Geraadpleegd op 7 mei 2024.
- ↑ Richard Biener, GCC 14.1 Released (7 mei 2024). Geraadpleegd op 7 mei 2024.
- ↑ Jakub Jelínek, GCC 15.1 Released (25 april 2025). Geraadpleegd op 8 augustus 2025.
- ↑ (en) GCC Moves Forward With Conversion To C++
- ↑ (en) GCC 4.8 Release Series - Changes, New Features, and Fixes. Gearchiveerd op 8 juli 2023.
- ↑ (en) GCC 4.9 Compiler Supports IBM's Super-Fast POWER8
- ↑ a b (en) 3.17.37 IBM RS/6000 and PowerPC Options. Gearchiveerd op 29 mei 2023.
- ↑ (en) Status of Supported Architectures from Maintainers' Point of View
- ↑ (en) 3.10 Options That Control Optimization. Gearchiveerd op 1 juli 2023.