Tiny C Compiler: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Corretto collegamento ipertestuale |
|||
(12 versioni intermedie di 7 utenti non mostrate) | |||
Riga 12:
|Licenza = LGPL
|SoftwareLibero = si
}}
'''Tiny C Compiler''' (noto anche come '''TCC''', '''tCc''' o '''TinyCC''') è un [[compilatore]] [[C (linguaggio)|C]] per piattaforme [[x86]] e [[architettura ARM|ARM]] creato da [[Fabrice Bellard]] e distribuito sotto licenza [[GNU Lesser General Public License|LGPL]]. È un compilatore minimale, che si presta bene all'uso su sistemi lenti e con poche risorse di memoria e archiviazione. Nato per sistemi [[Unix-like]], con la versione 0.9.23 (17 giugno 2005) gli è stato aggiunto il supporto a [[Microsoft Windows|Windows]].
Secondo la documentazione, TCC implementa interamente lo standard [[ANSI C]] (C89/C90),<ref>[http://bellard.org/tcc/tcc-doc.html#SEC6 Tiny C Compiler Reference Documentation] accessed on 2008-08-07</ref> buona parte dello standard ISO [[C99 (linguaggio di programmazione)|C99]]<ref>According to the project's [http://repo.or.cz/w/tinycc.git/blob/HEAD:/TODO TODO list] complex types are the only missing C99 feature. Variable Length Arrays have been added in TCC 0.9.26</ref> e molte delle estensioni GNU C, tra le quali l'inserimento di [[Assembler inline|assembly
== Caratteristiche ==
Riga 30 ⟶ 29:
TCC ha tempi di compilazione molto rapidi, tuttavia questo comporta un compromesso con l'efficienza del codice generato da esso. Il compilatore esegue un numero limitato di ottimizzazioni, come [[constant folding]] per tutte le operazioni, ottimizzazione di moltiplicazioni e divisioni tramite [[shift aritmetico]] quando possibile, ottimizzazione degli operatori di confronto tramite l'uso di una specifica cache, e una semplice [[register allocation]] che consente di risparmiare cicli di save/load all'interno di una singola istruzione ad alto livello.
In generale TCC punta maggiormente a compattezza e velocità piuttosto che all'ottimizzazione, generando il codice in un unico passaggio e senza eseguire molte delle ottimizzazioni praticate comunemente dai principali compilatori ottimizzanti. In particolare, TCC compila ogni istruzione individualmente, riportando i valori dei registri sullo stack al termine di ognuna e richiedendo una nuova lettura degli stessi se l'istruzione successiva li riutilizza. TCC inoltre non usa tutti i registri disponibili, ad esempio nell'architettura x86 non impiega mai i registri ebx, esi e edi, perché devono essere preservati dalle chiamate di funzione.<ref>Glöckner, Daniel. [
In un [[benchmark (informatica)|benchmark]] effettuato usando una versione modificata di TCC, capace di compilare GCC, l'esecuzione di cc1 (il compilatore C di GCC) su sé stesso, usando un livello di ottimizzazione -O1 o equivalente, ha richiesto 518 secondi quando compilato con GCC 3.4.2, 558 secondi con GCC 2.95.3, 545 con il compilatore C Microsoft e 1145 con TCC.<ref name="grischka"/>
Riga 36 ⟶ 35:
== Impiego ==
Tra gli impiegi di TCC:
* TCCBOOT,<ref>[http://bellard.org/tcc/tccboot.html TCCBOOT]</ref> che impiega TCC per caricare ed eseguire il [[kernel Linux]] da sorgenti. È una sorta di bootloader che legge i sorgenti da disco, scrive le corrispondenti istruzioni macchina in
* TCC è stato usato per mostrare un meccanismo di difesa rispetto alla vulnerabilità Trusting Trust.<ref>Wheeler, David A. ''[http://www.dwheeler.com/trusting-trust Countering Trusting Trust through Diverse Double-Compiling] {{Webarchive|url=https://web.archive.org/web/20111008035532/http://www.dwheeler.com/trusting-trust |date=8 ottobre 2011 }}''. ACSAC.</ref>
* TCC è stato impiegato per compilare GCC, anche se allo scopo sono necessarie alcune patch.<ref>[
* Cinpy<ref>[
== Storia ==
TCC è l'evoluzione di Obfuscated Tiny C Compiler (OTCC), un programma scritto da Bellard
== Stato del progetto ==
TCC ha una [[mailing list]] attiva e la versione del software di Bellard è disponibile su un [[repository]] [[Git (software)|Git]]. Tuttavia, lo sviluppo di TCC è discontinuo, per via dell'impegno di Bellard in altri progetti.<ref name="tccHome" />
Rob Landley ha creato un fork di TCC<ref name="tccfork" /> per includere svariate patch di terze parti, tramite [[Mercurial]].<ref>[http://www.landley.net/hg/tinycc Landley's Mercurial branch]</ref> Il progetto è stato abbandonato il 4 ottobre 2004 ed è rinato in un fork il 27 ottobre 2007 <ref name="tccfork">[http://landley.net/code/tinycc/ Rob Landley's TCC fork that went inactive]</ref> fino al 5 settembre 2008.<ref>[
Altri programmatori hanno distribuito patch o versioni estese di TCC, come la collezione di patch di terze parti di Dave Dodge,<ref>[http://www.dododge.net/tcc/patches.html Dave Dodge's collection of unofficial tcc patches] {{webarchive|url=https://web.archive.org/web/20070331221112/http://www.dododge.net/tcc/patches.html |data=31 marzo 2007 }}</ref> le patch dei progetti Debian e kfreebsd,<ref>[
== Note ==
<references />
== Voci correlate ==
Riga 61 ⟶ 60:
== Collegamenti esterni ==
*[http://bellard.org/tcc/ Sito ufficiale]
*[
*[http://repo.or.cz/w/tinycc.git Repository Git]
|