Compilador Tiny C

De la Viquipèdia, l'enciclopèdia lliure.
Saltar a la navegació Saltar a la cerca
Compilador Tiny C
programari
Compilador Tiny C que s’executa al Windows
Compilador Tiny C que s’executa al Windows
Tipus Compilador
Desenvolupador Fabrice Bellard
Data de la primera versió 2002
Última versió 0.9.26 (15 de febrer de 2013)
Sistema operatiu Multiplataforma
Llenguatge C.
muntatge
Llicència LGPL
( llicència gratuïta )
Lloc web bellard.org/tcc/

Tiny C Compiler (també conegut com TCC , tCc o TinyCC ) és un compilador C per a plataformes x86 i ARM creat per Fabrice Bellard i distribuït sota la llicència LGPL . És un compilador mínim, que es presta molt bé per utilitzar-lo en sistemes lents amb pocs recursos de memòria i emmagatzematge. Nascut per a sistemes similars a Unix , amb la versió 0.9.23 (17 de juny de 2005) es va afegir suport per a Windows .

Segons la documentació, TCC implementa completament l' estàndard ANSI C (C89 / C90), [1] gran part de l'estàndard ISO C99 [2] i moltes de les extensions GNU C, inclosa la inserció de conjunts en línia .

Característiques

TCC té algunes característiques peculiars que el diferencien de molts compiladors C:

  • Té una mida petita (aproximadament 100 KB per a l'executable del compilador x86) i una petita petjada de memòria, fins al punt que es pot utilitzar en un sol disquet de 1,44 M , com ara un disc de rescat.
  • TCC està dissenyat per generar codi natiu x86, x86-64 i ARM molt ràpidament: segons Bellard, la compilació, el muntatge i l'enllaç són aproximadament nou vegades més ràpids que GCC . [3]
  • TCC té algunes funcions addicionals que el fan pràctic, com ara la comprovació vinculada.
  • TCC us permet executar programes directament en temps de compilació amb un commutador, cosa que us permet executar scripts C en intèrprets de comandes que admetin la directiva shebang .
  • La biblioteca libtcc.so us permet crear funcions C en temps d'execució dins de programes C o C ++: el codi, contingut en una cadena , es compila amb les funcions proporcionades per la biblioteca i el codi de màquina corresponent es carrega en una part de la memòria amb permisos d'execució, dels quals es retorna un punter que permet invocar la funció.

Rendiment del codi generat

TCC té temps de compilació molt ràpids, però això implica un compromís amb l’eficiència del codi que genera. El compilador realitza un nombre limitat d’optimitzacions, com ara plegament constant per a totes les operacions, optimització de multiplicacions i divisions mitjançant desplaçament aritmètic quan és possible, optimització d’operadors de comparació mitjançant l’ús d’una memòria cau específica i una assignació de registres senzilla que us permet estalviar cicles d'estalvi / càrrega dins d'una única instrucció d'alt nivell.

En general, TCC se centra més en la compacitat i la velocitat que en l'optimització, generant el codi en un sol pas i sense realitzar moltes de les optimitzacions que solen practicar els principals compiladors d'optimització. En particular, TCC compila cada instrucció individualment, informant dels valors dels registres de la pila al final de cadascuna i sol·licitant una nova lectura de la mateixa si la següent instrucció els reutilitza. TCC tampoc utilitza tots els registres disponibles, per exemple a l'arquitectura x86, mai no utilitza registres ebx, esi i edi, perquè s'han de conservar de les trucades de funcions. [4]

En una prova de referència amb una versió modificada de TCC, capaç de compilar GCC, executant cc1 (compilador C de GCC) en si mateix, amb un nivell d’optimització -O1 o equivalent, va trigar 518 segons a compilar-se amb GCC 3.4.2, 558 segons amb GCC 2.95.3, 545 amb el compilador Microsoft C i 1145 amb TCC. [5]

Ús

Entre els usos de TCC:

  • TCCBOOT, [6] que utilitza TCC per carregar i executar el nucli Linux des de l'origen. És una mena de carregador d’arrencada que llegeix les fonts del disc, escriu a la memòria les instruccions corresponents de la màquina i les executa.
  • TCC es va utilitzar per demostrar un mecanisme de defensa contra la vulnerabilitat de Trusting Trust. [7]
  • El TCC es va utilitzar per compilar GCC, tot i que es necessiten alguns pegats per a això. [8]
  • Cinpy [9] és una biblioteca Python que us permet implementar funcions C en mòduls Python, que es compilen en temps d'execució amb TCC i que Python fa que sigui cridable a través de la biblioteca ctypes.

Història

TCC és l’evolució de l’Obscuscated Tiny C Compiler (OTCC), un programa escrit per Bellard amb el qual va guanyar el Concurs Internacional de Codi Obfuscat C (IOCCC) del 2001 com a millor abús de les normes . [10] Bellard posteriorment va ampliar i desofuscar el programa, resultant en TCC. [11]

Estat del projecte

TCC té una llista de correu activa i la versió del programari Bellard està disponible en un dipòsit de Git . No obstant això, el desenvolupament de TCC és discontinu a causa del compromís de Bellard amb altres projectes. [3]

Rob Landley va bifurcar TCC [12] per incloure diversos pegats de tercers, a través de Mercurial . [13] El projecte va ser abandonat el 4 d'octubre de 2004 i va renéixer en una bifurcació el 27 d'octubre de 2007 [12] fins al 5 de setembre de 2008. [14] Des de llavors, TCC només va rebre dues actualitzacions, el 20 de maig de 2009 i el 15 de febrer de 2013.

Altres programadors han distribuït patchs o versions ampliades de TCC, com la col·lecció de patchs de Dave Dodge, [15] patchs dels projectes Debian i kfreebsd, [16] i grischka. [5] El dipòsit públic grischka [17] conté una branca [18] amb contribucions més recents i algunes funcions addicionals.

Nota

  1. Documentació de referència del compilador Tiny C, consultada el 07-08-2008
  2. ^ Segons la llista TODO del projecte, els tipus complexos són l'única característica C99 que falta. S'han afegit matrius de longitud variable al TCC 0.9.26
  3. ^ a bPàgina inicial del compilador Tiny C
  4. Glöckner, Daniel. Re: Tinycc-devel (sense tema) , 8 de setembre de 2006.
  5. ^ a b grischka, GCC per TCC (algunes correccions) , 29 de setembre de 2005
  6. ^ TCCBOOT
  7. Wheeler, David A. Combatre la confiança a través de la compilació doble . ACSAC.
  8. ^ tinycc-devel (fil)
  9. ^ Cinpy Arxivat el 20 de novembre de 2008 a Internet Archive .
  10. ^ Guanyadors anteriors de l'IOCCC , a ioccc.org . Consultat el 28 de maig de 2016 (arxivat de l' original el 9 d'abril de 2009) .
  11. Bellard, Fabrice. Compilador de Tiny C ofuscat
  12. ^ a b Forquilla TCC de Rob Landley que va quedar inactiva
  13. ^ Branca Mercurial de Landley
  14. ^ tinycc-devel (missatge)
  15. Col·lecció de pegats no oficials de Dave Dodge tcc Arxivat el 31 de març de 2007 a Internet Archive .
  16. ^ Pegats descendents de Debian i kfreebsd
  17. ^ grischka, Public Git Hosting per a tcc
  18. ^ grischka, mob branch for tcc

Articles relacionats

Enllaços externs

Informàtica Portal de TI : accediu a les entrades de Viquipèdia relacionades amb TI