Vývojář | Fabrice Bellard |
---|---|
První vydání | 2002 |
Aktuální verze | 0.9.27 (13. prosince 2017) |
Operační systém | Linux Microsoft Windows UN*X FreeBSD NetBSD OpenBSD ReactOS GNU/Linux |
Platforma | x86 architektura ARM x86_64 Common Intermediate Language RISC-V |
Vyvíjeno v | C a jazyk symbolických adres |
Typ softwaru | překladač, svobodný software, Assembler, linker, preprocesor, optimalizující překladač, svobodný a otevřený software a Open source |
Licence | GNU Lesser General Public License, version 2.1 |
Web | bellard |
Některá data mohou pocházet z datové položky. |
Tiny C Compiler (též TCC, tCc, TinyCC) je v informatice překladač jazyka C pro platformy x86 a x86-64. Původním autorem je Fabrice Bellard. Byl navržen pro starší (pomalejší) počítače s omezeným diskovým prostorem (například záchranné disky). Od verze 0.9.23 (17. července 2005) obsahuje podporu pro operační systém Microsoft Windows. TCC je šířen pod licencí GNU Lesser General Public License (LGPL).
Dokumentace tvrdí, že TCC plně podporuje ANSI C (C89/90),[1] mnoho vlastností ISO C99 a též mnoho GNU rozšíření (včetně vkládaného assembleru).
Vlastnosti odlišující TCC od jiných běžných překladačů jazyka C:
Následující kód ukazuje Hello world s počátečním shebang řádkem. Bude-li mít takový soubor práva na spuštění (a bude-li v /usr/bin/tcc opravdu TCC), bude možno takový soubor přímo spustit.
#!/usr/bin/tcc -run
#include <stdio.h>
int main(int argc, char ** argv)
{
puts("Hello, world!");
return 0;
}
Přestože samotný překladač je velice rychlý a vytváří malé spustitelné soubory, je tato rychlost vykoupena rychlostí přeložených programů (kompromis mezi složitostí/velikostí překladače a rychlostí výsledného kódu).
TCC provádí několik druhů optimalizací, například propagaci konstant u všech operací. Násobení a dělení jsou ve vhodných případech nahrazeny posuvy. Dále provádí jednoduchou alokaci registrů pro zrychlení přístupu k často používaným proměnným.
Obecně je ovšem důraz kladen především na rychlost překladu a velikost výsledného kódu. TCC zpracuje kód v jednom průchodu, nemůže tedy použít většinu optimalizací, které jinak aplikují ostatní překladače. Každý příkaz (výraz) se překládá odděleně, na jeho konci se registry vloží na zásobník a potom musí být znovu ze zásobníku načteny i v případě, že následující příkaz používá tyto hodnoty. Dále TCC nevyužívá všech dostupných registrů (například na x86 nepoužívá ebx, esi a edi, protože jejich hodnota musí být zachována mezi jednotlivými voláními funkci).[2]
Následují dva pokusné benchmarky:
V tomto článku byl použit překlad textu z článku Tiny C Compiler na anglické Wikipedii.