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)
LauBot (discussione | contributi)
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. [httphttps://lists.gnu.org/archive/html/tinycc-devel/2006-09/msg00028.html Re: Tinycc-devel (no subject)], September 8, 2006.</ref>
 
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>[httphttps://lists.gnu.org/archive/html/tinycc-devel/2005-09/threads.html tinycc-devel (thread)]</ref>
* Cinpy<ref>[httphttps://www.cs.tut.fi/~ask/cinpy/ Cinpy] {{webarchive|url=https://web.archive.org/web/20081120164629/http://www.cs.tut.fi/~ask/cinpy/ |data=20 novembre 2008 }}</ref> è una libreria [[Python]] che consente di implementare funzioni C nei moduli Python, che vengono compilate a runtime con TCC e rese richiamabili dal Python tramite la libreria ctypes.
 
== 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>[httphttps://lists.gnu.org/archive/html/tinycc-devel/2008-09/msg00013.html tinycc-devel (message)]</ref> Da allora, TCC ha ricevuto solo due aggiornamenti, il 20 maggio 2009 e il 15 febbraio 2013.
 
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>[httphttps://packages.debian.org/unstable/devel/tcc Debian and kfreebsd downstream patches]</ref> e di grischka.<ref name="grischka">grischka, [httphttps://lists.gnu.org/archive/html/tinycc-devel/2005-09/msg00054.html GCC by TCC (some fixes)], 29 Sep 2005</ref> Il repository pubblico di grischka<ref>grischka, [http://repo.or.cz/w/tinycc.git Public Git Hosting for tcc]</ref> contiene un branch<ref>grischka, [http://repo.or.cz/w/tinycc.git/shortlog/refs/heads/mob mob branch for tcc]</ref> con contributi più recenti e alcune funzionalità aggiuntive.
 
== Note ==
Riga 60:
== Collegamenti esterni ==
*[http://bellard.org/tcc/ Sito ufficiale]
*[httphttps://lists.nongnu.org/mailman/listinfo/tinycc-devel Mailing list]
*[http://repo.or.cz/w/tinycc.git Repository Git]