Tiny C Compiler

Tiny C Compiler
software
Tiny C Compiler in esecuzione su Windows
Tiny C Compiler in esecuzione su Windows
Tiny C Compiler in esecuzione su Windows
GenereCompilatore
SviluppatoreFabrice Bellard
Data prima versione2002
Ultima versione0.9.26 (15 febbraio 2013)
Sistema operativoMultipiattaforma
LinguaggioC
linguaggio assembly
LicenzaLGPL
(licenza libera)
Sito webbellard.org/tcc/

Tiny C Compiler (noto anche come TCC, tCc o TinyCC) è un compilatore C per piattaforme x86 e ARM creato da Fabrice Bellard e distribuito sotto licenza 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 Windows.

Secondo la documentazione, TCC implementa interamente lo standard ANSI C (C89/C90), buona parte dello standard ISO C99 e molte delle estensioni GNU C, tra le quali l'inserimento di assembly inline.

Caratteristiche

TCC ha alcune caratteristiche peculiari che lo differenziano da molti compilatori C:

Performance del codice generato

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.

In un 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.

Impiego

Tra gli impiegi di TCC:

Storia

TCC è l'evoluzione di Obfuscated Tiny C Compiler (OTCC), un programma scritto da Bellard con il quale ha vinto l'International Obfuscated C Code Contest (IOCCC) del 2001 come Best abuse of the rules. Bellard ha in seguito esteso e de-offuscato il programma, ottenendo TCC.

Stato del progetto

TCC ha una mailing list attiva e la versione del software di Bellard è disponibile su un repository Git. Tuttavia, lo sviluppo di TCC è discontinuo, per via dell'impegno di Bellard in altri progetti.

Rob Landley ha creato un fork di TCC per includere svariate patch di terze parti, tramite Mercurial. Il progetto è stato abbandonato il 4 ottobre 2004 ed è rinato in un fork il 27 ottobre 2007 fino al 5 settembre 2008. 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, le patch dei progetti Debian e kfreebsd, e di grischka. Il repository pubblico di grischka contiene un branch con contributi più recenti e alcune funzionalità aggiuntive.

Note

  1. ↑ Tiny C Compiler Reference Documentation accessed on 2008-08-07
  2. ↑ According to the project's TODO list complex types are the only missing C99 feature. Variable Length Arrays have been added in TCC 0.9.26
  3. 1 2 Tiny C Compiler homepage, su bellard.org.
  4. ↑ Glöckner, Daniel. Re: Tinycc-devel (no subject), September 8, 2006.
  5. 1 2 grischka, GCC by TCC (some fixes), 29 Sep 2005
  6. ↑ TCCBOOT, su bellard.org.
  7. ↑ Wheeler, David A. Countering Trusting Trust through Diverse Double-Compiling Archiviato l'8 ottobre 2011 in Internet Archive.. ACSAC.
  8. ↑ tinycc-devel (thread), su lists.gnu.org.
  9. ↑ Cinpy, su cs.tut.fi (archiviato dall'url originale il 20 novembre 2008).
  10. ↑ Previous IOCCC Winners, su ioccc.org. URL consultato il 28 maggio 2016 (archiviato dall'url originale il 9 aprile 2009).
  11. ↑ Bellard, Fabrice. Obfuscated Tiny C Compiler
  12. 1 2 Rob Landley's TCC fork that went inactive, su landley.net.
  13. ↑ Landley's Mercurial branch, su landley.net.
  14. ↑ tinycc-devel (message), su lists.gnu.org.
  15. ↑ Dave Dodge's collection of unofficial tcc patches, su dododge.net (archiviato dall'url originale il 31 marzo 2007).
  16. ↑ Debian and kfreebsd downstream patches, su packages.debian.org.
  17. ↑ grischka, Public Git Hosting for tcc
  18. ↑ grischka, mob branch for tcc

Voci correlate

Collegamenti esterni

  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica