Tiny C Compiler: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Recupero di 1 fonte/i e segnalazione di 0 link interrotto/i. #IABot (v1.6.5) |
m Bot: passaggio degli url da HTTP a HTTPS |
||
Riga 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 37:
* 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 memoria e le esegue.
* 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]''. ACSAC.</ref>
* TCC è stato impiegato per compilare GCC, anche se allo scopo sono necessarie alcune patch.<ref>[
* Cinpy<ref>[
== Storia ==
Riga 46:
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 ==
Riga 60:
== Collegamenti esterni ==
*[http://bellard.org/tcc/ Sito ufficiale]
*[
*[http://repo.or.cz/w/tinycc.git Repository Git]
|