GNU Compiler Collection
Programa Olá Mundo gerado pelo GCC | |
Desenvolvedor | Projecto GNU |
Plataforma | GNU |
Modelo do desenvolvimento | Software livre |
Lançamento | 23 de maio de 1987 (37 anos) |
Versão estável | 11.2[1] (28 de julho de 2021 ) |
Versão em teste | 11.2 RC[2] (21 de julho de 2021 ) |
Escrito em | C; e C++ desde 1 de junho de 2010 [3] |
Sistema operacional | Multi plataforma |
Gênero(s) | Compilador |
Licença | GNU General Public License v3 com Exceção da Biblioteca de Tempo de Execução do GCC[4] |
Estado do desenvolvimento | Corrente |
Página oficial | gcc |
O GNU Compiler Collection (chamado usualmente por GCC) é um conjunto de compiladores de linguagens de programação produzido pelo projecto GNU para construir um sistema operativo semelhante ao Unix livre.[5] Faz parte do sistema operativo GNU e FSF, sendo uma das ferramentas essenciais para manter o software livre, pois permite compilar o código-fonte em binários executáveis para as várias plataformas informáticas mais comuns. É distribuído pela Free Software Foundation (FSF) sob os termos da licença GNU GPL, disponível para sistemas operativos UNIX e Linux e certos sistemas operativos derivados tais como o Mac OS X.
Visão geral
[editar | editar código-fonte]O compilador GCC foi escrito por Richard Stallman em 1987 para servir de compilador para o Projecto GNU. Em 1997, um grupo de desenvolvedores descontentes com o ritmo lento e a natureza fechada do desenvolvimento oficial do compilador GCC, formou-se o projecto EGCS, que juntou várias bifurcações experimentais num único projecto bifurcado do GCC. O desenvolvimento do EGCS, ao provar-se suficientemente mais vital que o GCC, foi finalmente "abençoado" como a versão oficial do GCC em Abril de 1999. O projecto GCC é agora mantido por um grupo variado de programadores de todo o mundo e até à data tem sido adaptado a mais tipos de processadores e sistemas operativos que qualquer outro compilador.
O GCC tem sido adaptado como compilador principal para construir e desenvolver para um número de sistemas, incluindo GNU/Linux, os BSDs, Mac OS X, NeXTSTEP, BeOS e Haiku.
O GCC é frequentemente eleito o compilador preferido para desenvolver software que necessita de ser executado em vários tipos de hardware. Diferenças entre compiladores nativos levam a dificuldades em escrever código que seja compilado correctamente em todos os compiladores e construir guiões que corram em todas as plataformas. Ao usar os compiladores do projecto GCC, o mesmo analisador gramatical é usado em todas as plataformas, fazendo com que o se o código compila numa, muito provavelmente compilará em todas. O código poderá ser executado um pouco mais lento mas o potencial de redução de custos de produção tende a fazer com que seja a melhor opção disponivel.
Linguagens de programação
[editar | editar código-fonte]Originalmente suportava somente a linguagem de programação C e era designado GNU C Compiler (compilador C GNU). Com o tempo ganhou suporte às linguagens C++, Fortran, Ada, Java e Objective-C, entre outras.[6]
A partir da versão 4.0, o lançamento padrão da GCC inclui fachadas para:
- Ada (GCC for Ada ou GNAT)
- C
- C++ (GCC for C++ ou G++)
- Fortran (GCC for Fortran ou GFortran)
- Java (GCC for Java ou GCJ)
- Objective-C
- Pascal
Uma fachada para CHILL foi previamente incluida mas posteriormente abandonada devido à falta de manutenção. A fachada G77 foi abandonada e substituida pela nova fachada GFortran que suporta Fortran 95. Também existem fachadas para Pascal, Modula-2, Modula-3, Mercury, VHDL, PL/1 e Objective-C++.
Arquitecturas
[editar | editar código-fonte]O conjunto dos processadores suportados pelo GCC inclui:
- Alpha
- ARM
- Atmel AVR
- IA-64 "Itanium"
- H8/300
- Motorola 68000
- Motorola 88000
- MIPS
- PA-RISC
- PDP-11
- PowerPC e PowerPC 64
- SuperH
- SPARC
- System/370, System 390
- x86 e x86-64/AMD64
- VAX
Já foi suportado um vasto conjunto de processadores menos conhecidos que inclui A29K, ARC, Atmel AVR, C4x, CRIS, D30V, DSP16xx, FR-30, FR-V, Intel i960, IP2000, M32R, 68HC11, MCORE, MMIX, MN10200, MN10300, NS32K, ROMP, Stormy16, V850 e Xtensa. Processadores adicionais, tais como o D10V, PDP-10 e Z8000 já foram suportadas por versões do GCC mantidas separadamente da versão FSF.
Estrutura
[editar | editar código-fonte]A interface externa do GCC é geralmente o padrão para os vários compiladores disponibilizados no sistema operativo Linux. Os utilizadores invocam um programa driver chamado gcc
, que interpreta os argumentos do comando dado e decide que tipo de compiladores usar para cada ficheiro de entrada, depois corre o assembler (processo de compilação) na sua saida e então possivelmente corre o linker, que liga as bibliotecas de binários necessárias para produzir um ficheiro executável que é um programa de computador funcional e completo.
Cada compilador de linguagem é um programa separado que recebe código-fonte e produz código de linguagem Assembly. Todos os compiladores tem uma estrutura de interface comum; uma fachada relativa a cada linguagem de programação que analisa gramaticalmente as linguagens e produz uma árvore abstracta de sintaxe e um back end que converte as árvores na Register Transfer Language do GCC, executa várias optimizações e de seguida produz linguagem Assembly usando pattern matching específico de cada arquitectura.
Quase todo o GCC é escrito em C, apesar de grande parte da fachada de Ada ser escrito em Ada.
Fachada
[editar | editar código-fonte]Os front-ends variam internamente, tendo de produzir árvores que possam vir a ser usadas pelo backend. Alguns analisadores gramaticais usam uma especificação gramatical semelhante a do YACC. Outras são analisadores gramaticais recursivos por ordem decrescente.
Até recentemente, a representação da árvore do programa não era totalmente independente do processador-alvo.
Back-end
[editar | editar código-fonte]Execução em Back-end ocorre quando o programa, após ter as informações necessárias, ocupa o tempo do processador para executar os comandos definidos anteriormente no código fonte. Neste momento, o programa se "retira", não dependendo de entradas manuais.
Programas em linguagem C podem ter sua alta performance melhor avaliada quando executam sem necessidade de entradas manuais. Isto ocorre em sistema que executam em background onde, depois de executado, o programa processa as informações que lhe foram passadas ou as lê de um arquivo ou banco de dados. Desta forma, pode-se mensurar o tempo de execução deste programa, escrito na Linguagem C, com um programa escrito em outra linguagem. Quanto menor for a interface com o usuário, melhor para se avaliar a performance do programa.
Por definição, a implementação do compilador da Linguagem C deve gerar um código de máquina bem similar a da Linguagem Assembly (baixo nível). Esta característica possibilita que a execução em Back-end tenha uma quantidade mínima de instruções necessárias para obter o resultado que foi determinado no código fonte.
Bibliografia
[editar | editar código-fonte]- Richard M. Stallman: Using and Porting the GNU Compiler Collection, Free Software Foundation, ISBN 0-595-10035-X
- Richard M. Stallman: Using Gcc: The Gnu Compiler Collection Reference, Free Software Foundation, ISBN 1-882114-39-6
- Brian J. Gough: An Introduction to GCC, Network Theory Ltd., ISBN 0-9541617-9-3
Referências
- ↑ «GCC 11 Release Series». gcc.gnu.org. 28 de julho de 2021. Consultado em 8 de abril de 2022
- ↑ Richard Biener (21 de julho de 2021). «GCC 11.2 Release Candidate available». gcc (Lista de grupo de correio). Consultado em 8 de abril de 2022
- ↑ «GCC allows C++ – to some degree». The H. 1 de junho de 2010
- ↑ «Exceção da Biblioteca de Tempo de Execução do GCC». Projeto GNU. Consultado em 3 de maio de 2019
- ↑ GNU. «Linux e o Sistema GNU». FSF. Consultado em 6 de março de 2018
- ↑ «GCC Front Ends». Projeto GNU. Consultado em 13 de março de 2020