GNU Compiler Collection: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Medju (discussione | contributi)
Nessun oggetto della modifica
fix
 
(78 versioni intermedie di 52 utenti non mostrate)
Riga 1:
{{Software
{{Infobox_Software |
nome|Nome = GNU Compiler Collection|
|Screenshot =
screenshot = [[Immagine:GCC logo.png]] |
|UltimaVersioneBeta =
didascalia = Logo del compilatore |
|DataUltimaVersioneBeta =
sviluppatore = [[Free Software Foundation]] |
|SistemaOperativo = multipiattaforma
versione_ultimo_rilascio = 4.4.2 |
|Genere = compilatore
data_ultimo_rilascio = [[15 Ottobre]] [[2009]] |
licenza|Licenza = [[GNU General Public License|GNU GPL]] |
sistema_operativo = [[Multi piattaforma]] |
|SoftwareLibero = sì
genere = [[Compilatore]] |
|Lingua =
licenza = [[GNU General Public License|GPL]] |
sito_web = [http://gcc.gnu.org/ http://gcc.gnu.org] |
}}
 
'''GCCGNU Compiler Collection''' (o in breve '''GNU Compiler CollectionGCC''', (in origine '''GNU C Compiler''') è un [[Compilatore con ottimizzatore|compilatore ottimizzante]] multi-target[[multipiattaforma]] creato inizialmente dal fondatore della [[Free Software Foundation]], [[Richard Matthew Stallman]], come parte del [[Progetto GNU]]. Disponibile per vari linguaggi, architetture e sistemi operativi, GCC è distribuito in forma libera dalla [[Free Software Foundation]] tramite la [[GNU General Public License|licenza GPL]]. Le versioni recenti sono incorporateincluse nelle principali [[Distribuzione Linux|distribuzioni del sistema operativo [[GNU/Linux]], e di molti altri sistemi, basatimentre su fondamenta[[macOS]] Unix,non comeè perinstallato esempiodi [[Macbase, OSma X]]è separte edel solo se installandopacchetto [[Xcode]], che dalla versione 5.0 comprende un pacchettoaltro gratuitocompilatore, perllvm, che produrresostituisce softwaregcc.
 
Nato inizialmente come un compilatore per il [[C (linguaggio)|linguaggio C]], dispone oggi di vari ''[[front endfrontend]]'' per altri linguaggi, tra cui [[Java (linguaggio di programmazione)|Java]], [[C++]], [[Objective C]], [[Fortran]] e [[Ada (linguaggio)|Ada]], e vari back-end''backend'' che sono in grado di generare linguaggi macchina per molte [[Architettura_Architettura (computer)|architetture]], tra le quali [[X86Architettura x86|x86]], [[EM64Tx86-64]], [[Architettura ARM|X64ARM]], [[IA64IA-64]], [[PowerPC]], [[s390]], [[SPARC]] e molte altre.
 
== Storia ==
GCC, il compilatore ''C'' è stato creato nel [[1987]] da Richard Stallman come parte del sistema GNU, che aveva bisogno di un compilatore che fosse software libero. Il suo sviluppo è stato seguito da vicino dalla [[Free Software Foundation]].
 
Nel [[1997]] un gruppo di sviluppatori insoddisfatti dalla natura chiusa degli sviluppi e dal loro ritmo troppo lento ha creato il progetto [[EGCS]] (''Experimental/Enhanced GNU Compiler System''), che incorporava diversi [[Fork_Fork (sviluppo_softwaresviluppo software)|fork]] sperimentali in una linea di sviluppo unica, separata da GCC. Lo sviluppo di [[EGCS]] si è dimostrato sufficientemente vitale, e nell'aprile del [[1999]] [[EGCS]] è stato promosso al rango di versione ufficiale di GCC.<ref>[httphttps://wwwgcc.gnu.org/software/gcc/news.html GCC news and announcements]</ref><ref>[http://wwwoldhome.goofschmorp.com/pcgde/pgcc-faq.html#egcs Pentium Compiler FAQ - What is/was EGCS?]</ref>
 
GCC viene oggi sviluppato da programmatori di ogni parte del mondo, ed è stato [[Portabilità|portato]] su più tipi di [[Microprocessore|processori]] e sistemi operativi di qualsiasi altro compilatore.
 
Oltre a essere il compilatore ufficiale del sistema [[GNU]], incluse le varianti di [[GNU/Linux]], GCC è stato adottato come compilatore principale per la creazione e lo sviluppo di diversi altri sistemi operativi, come i vari [[Berkeley Software Distribution|BSD]], [[Mac OS XmacOS]], [[NeXTSTEP]] e [[BeOS]] e DOS tramite il suo porting DJGPP.
 
== Linguaggi ==
Al momento del rilascio della versione 4.1.1, laLa versione standard del compilatore comprende i front end per i linguaggi:
* [[Ada (linguaggio)|Ada]] (GCC per Ada, noto anche come ''[[GNAT]]'')
* [[C (linguaggio di programmazione)|C]]
* [[Linguaggio C]]
* [[C++]] (GCC forper C++ o ''G++'')
* [[Fortran]] (GCC per Fortran o ''[[GFortrangfortran]]'')
* [[linguaggio Java|Java]] (GCC per Java o ''[[GCJ]]'')
* [[Objective C|Objective-C]]
* [[Objective-C#Objective_CObjective C.2B.2B|Objective-C++]]
* [[Go (linguaggio di programmazione)|Go]] (GCCGO)
 
== Architetture ==
ITra i processori targetsupportati dida GCC (alla versione 4.1) includonovi sono:
* [[DEC Alpha|Alpha]]
* [[architettura ARM|ARM]]
* [[Atmel AVR|AVR e AVR32]]
* [[Blackfin]]
* [[Hitachi H8|H8/300]]
* [[System/370]], [[zSeries|System/390]]
* [[IA-32]] ([[X86Architettura x86|x86]])
* [[EM64T]], [[AMD64]] ([[X64]]x64)
* [[IA-64]] ([[Itanium]])
* [[Motorola 68000]]
Line 53 ⟶ 54:
* [[SuperH]]
* [[SPARC]]
* [[Virtual Address eXtension|VAX]]
* le famiglie [[Renesas]] [[R8C]]/[[M16C]]/[[M32C]]
* la famiglia [[MorphoSys]]
 
ProcessoriIn menoalcune notirelease chestandard, sono stati supportati inanche alcuneprocessori releasemeno standardnoti, tra includonocui [[A29K]], [[Advanced Risc Computing|ARC]], [[Atmel AVR]], [[C4x]], [[CRIS]], [[D30V]], [[DSP16xx]], [[FR-30]], [[FR-V]], [[Intel i960]], [[IP2000]], [[M32R]], [[Freescale 68HC11|68HC11]], [[MCORE]], [[MMIX]], [[MN10200]], [[MN10300]], [[microprocessore 320xx|NS32K]], [[ROMP]], [[Stormy16]], [[V850]] ed [[Xtensa]].
Altri processori, come [[D10V]], [[PDP-10]], [[MicroBlaze]] e [[Zilog Z8001|Z8000]], sono stati supportati da versioni di GCC mantenutesviluppate separatamente dallarispetto versione della FSFFree Software Foundation.
 
== SDCC (Small Device C Compiler) ==
lL'[[https://web.archive.org/web/20190430033914/http://sdcc.sourceforge.net/ SDCC]] ( [[Small Devices C Compiler]] ) [http://sdcc.sourceforge.net/] è un [[porting]] [[Openopen Sourcesource]] per i microcontrollori delle sole famiglie [[Z80]], [[8051]], [[68HC11]], [[PIC (microcontrollore)|Pic]] è stato separato dal progetto GCC per poter ottimizzare meglio il lavoro dei [[microcontrollori]], dove serve una grande efficienza del compilatore e contemporaneamente vivere in un ambietneambiente molto povero di risorse [[RAM]] e [[Read-Only Memory|ROM]], con interfacce personalizzate e dotato di registri speciali incompatibili con l'elaborazione.
 
Nonostante il piccolo numero di target disponibili, il compilatore è molto quotato e nella maggior parte delle situazioni dà risultati migliori dei sistemi di sviluppo professionali a pagamento.
l'[[SDCC]] ( [[Small Devices C Compiler]] ) [http://sdcc.sourceforge.net/] è un [[porting]] [[Open Source]] per i microcontrollori delle sole famiglie [[Z80]],[[8051]],[[68HC11]],[[PIC (microcontrollore)|Pic]] è stato separato dal progetto GCC per poter ottimizzare meglio il lavoro dei [[microcontrollori]],dove serve una grande efficienza del compilatore e contemporaneamente vivere in un ambietne molto povero di risorse [[RAM]] e [[ROM]],con interfacce personalizzate e dotato di registri speciali incompatibili con l'elaborazione
 
È disponibile nei repo di [[Synaptic]]
Nonostante il piccolo numero di target disponibili,il compilatore è molto quotato e nella maggior parte delle situazioni dà risultati migliori dei sistemi di sviluppo professionali a pagamento
 
== Utilizzo e funzionamento ==
GCC, in quanto compilatore, ha come scopo primario la traduzione di [[codice sorgente]] in [[Linguaggio macchina|codice macchina]] che possa essere eseguitoeseguibile.
 
GCC, in quanto compilatore, ha come scopo primario la traduzione di [[codice sorgente]] in [[Linguaggio macchina|codice macchina]] che possa essere eseguito.
 
Ad esempio, per compilare un file di codice sorgente scritto in C, si può eseguire gcc fornendogli in input il file desiderato. Esiste un grandissimo numero di parametri che è possibile passare al compilatore per gestire i vari aspetti e i vari dettagli del processo di generazione del codice; l'unico obbligatorio è il nome del file da compilare.
 
Un esempio elementare di compilazione è il comando
<syntaxhighlight lang="bash">
gcc main.c
che ordina al compilatore di leggere il file <tt>main.c</tt> (<tt>.c</tt> è l'[[estensione]] caratteristica dei file contenenti [[Linguaggio C|codice C]]) e compilarlo. Il file eseguibile viene chiamato <tt>[[a.out]]</tt> perché non è stato specificato alcun nome per il file di output con il parametro <tt>-o</tt>.
</syntaxhighlight>
che ordina al compilatore di leggere il file <ttcode>main.c</ttcode> (<ttcode>.c</ttcode> è l'[[Estensione (file)|estensione]] caratteristicastandard dei file contenenti [[Linguaggio C (linguaggio)|codice C]]) e compilarlo. Il file eseguibile viene chiamato <tt>[[a.out]]</tt> perchéPoiché non è stato specificato alcunnessun nome per il file di output contramite il parametro <ttcode>-o</ttcode>, il file eseguibile viene chiamato <code>[[a.out]]</code>.
 
La compilazione avviene in tre fasi:
# il file da compilare viene trattato dal [[preprocessore]], che analizza le direttive scritte per il compilatore (definite in alcune righe del codice, solitamente posizionate in testa al file e precedute dal carattere <ttcode>#<tt/code>). Se eseguito con il parametro <ttcode>-E</ttcode>, gcc esegue solo questo passo, fornendo in output il risultato delle attività del preprocessore.;
# nella seconda fase, il file dà origine ada un nuovo file[[Codice formatooggetto|file oggetto]], che non è ancora eseguibile;
# a questo punto entra in funzione il [[Linking|linker]] che produce un unico [[file eseguibile]], contenente il tutto, unendo tra loro tutti i file oggetto tra loro e aii file delle [[Libreria software|librerie]],. produceSe unsi unico file eseguibile contenente il tutto. Perdesidera non duplicareincorporare il codice delle librerie nell'nel file eseguibile, si può usare il [[Dynamic-link_librarylink library|collegamento dinamico]].
 
== Note ==
# il file da compilare viene trattato dal preprocessore, che analizza le direttive scritte per il compilatore (definite in alcune righe del codice, solitamente posizionate in testa al file e precedute dal carattere <tt>#<tt>). Se eseguito con il parametro <tt>-E</tt>, gcc esegue solo questo passo, fornendo in output il risultato delle attività del preprocessore.
<references />
# nella seconda fase il file dà origine ad un nuovo file formato oggetto che non è ancora eseguibile
# a questo punto entra in funzione il linker che, unendo tutti i file oggetto tra loro e ai file delle [[Libreria software|librerie]], produce un unico file eseguibile contenente il tutto. Per non duplicare il codice delle librerie nell'eseguibile si può usare il [[Dynamic-link_library|collegamento dinamico]].
 
== Altri progetti ==
{{GNU}}
{{interprogetto|preposizione=sul}}
{{Portale|Informatica}}
 
== Collegamenti esterni ==
[[Categoria:Compilatori]]
* {{Collegamenti esterni}}
* {{FOLDOC|GCC|GCC}}
* {{cita web | 1 = http://www.network-theory.co.uk/docs/gccintro/ | 2 = An Introduction to GCC | accesso = 16 maggio 2010 | urlarchivio = https://web.archive.org/web/20100531171042/http://www.network-theory.co.uk/docs/gccintro/ | dataarchivio = 31 maggio 2010 | urlmorto = sì }}
 
{{GNU}}
== Collegamenti esterni ==
{{FOSS}}
* [http://www.bo.cnr.it/corsi-di-informatica/corsoCstandard/Lezioni/01Indice.html CNR Italia - Corso C++ in ambiente GNU/linux]
{{Controllo di autorità}}
{{Portale|Informaticasoftware libero}}
 
[[Categoria:CompilatoriProgetto GNU]]
[[ar:تجميعة مصرفات جنو]]
[[bs:GNU Compiler Collection]]
[[ca:GNU Compiler Collection]]
[[cs:GCC]]
[[da:GCC]]
[[de:GNU Compiler Collection]]
[[en:GNU Compiler Collection]]
[[eo:GCC]]
[[es:GNU Compiler Collection]]
[[et:GNU Compiler Collection]]
[[eu:GNU Compiler Collection]]
[[fa:جی‌سی‌سی]]
[[fi:GCC]]
[[fr:GNU Compiler Collection]]
[[gl:GNU Compiler Collection]]
[[he:GCC]]
[[hr:GNU Compiler Collection]]
[[hu:GCC (informatika)]]
[[ja:GNUコンパイラコレクション]]
[[ka:GNU Compiler Collection]]
[[ko:GNU 컴파일러 모음]]
[[la:GCC]]
[[lt:GCC]]
[[nl:GNU Compiler Collection]]
[[no:GCC]]
[[pl:GNU Compiler Collection]]
[[pt:GNU Compiler Collection]]
[[ro:GNU Compiler Collection]]
[[ru:GNU Compiler Collection]]
[[sk:GNU Compiler Collection]]
[[sl:GNU Compiler Collection]]
[[sr:ГНУ колекција компајлера]]
[[sv:GCC]]
[[th:ชุดแปลโปรแกรมของกนู]]
[[tr:GCC]]
[[uk:GNU Compiler Collection]]
[[vi:Bộ trình dịch GNU]]
[[zh:GCC]]