GNU Compiler Collection

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.

GNU Compiler Collection
Logótipo do GCC
GNU Compiler Collection
Programa Olá Mundo gerado pelo GCC
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; há 3 anos)
Versão em teste 11.2 RC[2] (21 de julho de 2021; há 3 anos)
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.gnu.org

Visão geral

editar

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

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:

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

O conjunto dos processadores suportados pelo GCC inclui:

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

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

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

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

Referências

  1. «GCC 11 Release Series». gcc.gnu.org. 28 de julho de 2021. Consultado em 8 de abril de 2022 
  2. 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 
  3. «GCC allows C++ – to some degree». The H. 1 de junho de 2010 
  4. «Exceção da Biblioteca de Tempo de Execução do GCC». Projeto GNU. Consultado em 3 de maio de 2019 
  5. GNU. «Linux e o Sistema GNU». FSF. Consultado em 6 de março de 2018 
  6. «GCC Front Ends». Projeto GNU. Consultado em 13 de março de 2020 

Ver também

editar

Ligações externas

editar