OGNU Compiler Collection (chamado usualmente porGCC) é um conjunto decompiladores delinguagens de programação produzido peloprojecto GNU para construir um sistema operativo semelhante ao Unix livre.[5] Faz parte do sistema operativoGNU eFSF, sendo uma das ferramentas essenciais para manter osoftware livre, pois permite compilar ocódigo-fonte em binários executáveis para as várias plataformas informáticas mais comuns. É distribuído pelaFree Software Foundation (FSF) sob os termos da licençaGNU GPL, disponível parasistemas operativosUNIX eLinux e certos sistemas operativos derivados tais como oMac OS X.
O compilador GCC foi escrito porRichard Stallman em1987 para servir de compilador para o Projecto GNU. Em1997, um grupo de desenvolvedores descontentes com o ritmo lento e a natureza fechada do desenvolvimento oficial do compilador GCC, formou-se o projectoEGCS, que juntou váriasbifurcaçõ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 de1999. O projecto GCC é agora mantido por um grupo variado de programadores de todo o mundo e até à data tem sido adaptado a mais tipos deprocessadores esistemas operativos que qualquer outro compilador.
O GCC tem sido adaptado como compilador principal para construir e desenvolver para um número de sistemas, incluindoGNU/Linux, osBSDs,Mac OS X,NeXTSTEP,BeOS eHaiku.
O GCC é frequentemente eleito o compilador preferido para desenvolversoftware que necessita de ser executado em vários tipos dehardware. 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 mesmoanalisador 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.
Originalmente suportava somente alinguagem de programação C e era designadoGNU C Compiler(compilador C GNU). Com o tempo ganhou suporte às linguagensC++,Fortran,Ada,Java eObjective-C, entre outras.[6]
A partir da versão 4.0, o lançamento padrão da GCC inclui fachadas para:
Uma fachada paraCHILL 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 paraPascal,Modula-2,Modula-3,Mercury,VHDL,PL/1 eObjective-C++.
O conjunto dos processadores suportados pelo GCC inclui:
Já foi suportado um vasto conjunto de processadores menos conhecidos que incluiA29K,ARC,Atmel AVR,C4x,CRIS,D30V,DSP16xx,FR-30,FR-V,Intel i960,IP2000,M32R,68HC11,MCORE,MMIX,MN10200,MN10300,NS32K,ROMP,Stormy16,V850 eXtensa. Processadores adicionais, tais como oD10V,PDP-10 eZ8000 já foram suportadas por versões do GCC mantidas separadamente da versão FSF.
A interface externa do GCC é geralmente o padrão para os vários compiladores disponibilizados no sistema operativoLinux. Os utilizadores invocam um programadriver chamadogcc
, que interpreta os argumentos do comando dado e decide que tipo de compiladores usar para cada ficheiro de entrada, depois corre oassembler (processo de compilação) na sua saida e então possivelmente corre olinker, 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 linguagemAssembly. Todos os compiladores tem uma estrutura de interface comum; uma fachada relativa a cada linguagem de programação queanalisa gramaticalmente as linguagens e produz umaárvore abstracta de sintaxe e umback end que converte as árvores naRegister Transfer Language do GCC, executa várias optimizações e de seguida produz linguagem Assembly usandopattern matching específico de cada arquitectura.
Quase todo o GCC é escrito em C, apesar de grande parte da fachada deAda ser escrito em Ada.
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.
Execução emBack-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 embackground 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 LinguagemAssembly (baixo nível). Esta característica possibilita que a execução emBack-end tenha uma quantidade mínima de instruções necessárias para obter o resultado que foi determinado no código fonte.
Referências
|
---|
História | | |
---|
Licenças | |
---|
Software | |
---|
Porta-Vozes | |
---|
Outros assuntos | |
---|