Malý kompilátor C. - Tiny C Compiler
Vývojáři | Fabrice Bellard |
---|---|
Stabilní uvolnění | 0.9.27 / 17. prosince 2017 |
Úložiště | repo |
Napsáno | C a Shromáždění[Citace je zapotřebí ] |
Operační systém | Linux, Unix, Okna |
Typ | C překladač |
Licence | LGPLv2.1 |
webová stránka | Bellard |
The Malý kompilátor C. (také TCC, tCc nebo TinyCC) je x86, X86-64 a PAŽE procesor C překladač původně napsal Fabrice Bellard. Je navržen tak, aby fungoval pro pomalé počítače s malým prostorem na disku (např. Na záchranných discích). Okna podpora operačního systému byla přidána ve verzi 0.9.23 (17. června 2005). TCC je distribuován pod GNU Lesser General Public License.
TCC tvrdí, že implementuje všechny ANSI C. (C89 / C90),[1] hodně z C99 Standard ISO,[2] a mnoho rozšíření GNU C včetně inline shromáždění.
Funkce
TCC má řadu funkcí, které jej odlišují od ostatních současných překladačů jazyka C:
- Jeho malá velikost souboru (asi 100 kB pro spustitelný soubor x86 TCC) a paměťová stopa umožňují jeho použití přímo z jednoho 1,44 M disketa, například záchranný disk.
- TCC je určen k velmi rychlé produkci nativních kódů x86, x86-64 a ARM; podle Bellarda se kompiluje, sestavuje a propojuje asi devětkrát rychleji než GCC dělá.[3]
- TCC má řadu jazykových funkcí specifických pro kompilátor, jejichž cílem je zlepšit jeho praktičnost, jako je volitelná paměť a vázaná kontrola, pro lepší stabilitu kódu.
- TCC umožňuje automatické spouštění programů v době kompilace pomocí přepínače příkazového řádku. To umožňuje spouštět programy jako shell skript v systémech podobných Unixu, které podporují Shebang směrnice tlumočníka syntax.
Zkompilovaný výkon programu
Obecně platí, že implementace TCC zdůrazňuje namísto optimálně výkonných výsledků maličkost. TCC generuje kód v jednom průchodu a neprovádí většinu optimalizací prováděných jinými kompilátory. TCC sestavuje každý výpis sám a na konci každého výpisu se hodnoty registru zapisují zpět do zásobníku a musí se znovu načíst, i když další řádek používá hodnoty v registrech (vytváření cizích párů save / load mezi příkazy). TCC používá pouze některé z dostupných registrů (např. Na x86 nikdy nepoužívá ebx, esi nebo edi, protože je třeba je zachovat přes volání funkcí).[4]
TCC provádí několik optimalizace, jako konstantní šíření pro všechny operace jsou násobení a dělení optimalizována na směny je-li to vhodné, a operátory porovnání jsou speciálně optimalizovány (udržováním speciální mezipaměti pro příznaky procesoru). Je to také jednoduché přidělení registru, což zabrání mnoha cizím párům uložení / načtení uvnitř jednoho prohlášení.
Zde jsou dva srovnávací příklady:
- Rekurzivní Fibonacciho algoritmus na 1,8 GHz notebooku Intel Centrino s 512 MB RAM přináší znatelný rozdíl ve výsledcích mezi kompilátorem Microsoft Visual C ++ 13.10.3052 a TCC. K výpočtu 49. Fibonacciho čísla trvalo program MS Visual C ++ přibližně o 18% delší než program zkompilovaný TCC.[Citace je zapotřebí ]
- S tcc upraveným tak, aby kompiloval GCC, běh cc1 (překladač GCC C) sám o sobě vyžadoval 518 sekund při kompilaci pomocí GCC 3.4.2, 558 sekund pomocí GCC 2.95.3, 545 pomocí kompilátoru Microsoft C a 1145 sekund pomocí tcc. Úroveň optimalizace v každém kompilátoru byla -O1 nebo podobná.[5]
Použití
- TCCBOOT,[6] A zaseknout kde TCC načítá a bootuje a Linuxové jádro ze zdroje asi za 10 sekund. To znamená, že jde o „zavaděč“, který čte zdrojový kód jádra Linuxu z disku, zapisuje spustitelné pokyny do paměti a začíná jej spouštět. To vyžadovalo změny v procesu sestavování Linuxu.
- TCC byla použita k prokázání obrany proti důvěra Záchvat.[7]
- TCC byl použit ke kompilaci GCC, i když k tomu, aby to fungovalo, byly zapotřebí různé patche.[8]
- Cinpy[9] je knihovna v Pythonu, která umožňuje implementovat funkce s C v modulech Pythonu. Funkce jsou za běhu kompilovány s TCC. Výsledky jsou zpřístupnitelné v Pythonu prostřednictvím knihovny ctypes.
- Nainstalováno na JavaScriptu Linux[10] (také Bellard).
- Byl použit jako reference pro kompilovanou verzi zdroje šachového programu super micro-max.[11]
Dějiny
TCC má svůj původ v Obfuscated Tiny C Compiler (OTCC), programu, který Bellard napsal, aby vyhrál Mezinárodní soutěž o zmatené kódy C. (IOCCC) v roce 2001. Po této době Bellard rozšířil a deobfuskoval program na produkci TCC.[12]
V době před 4. únorem 2012 Fabrice Bellard aktualizoval oficiální webovou stránku projektu a oznámil, že na TCC již nepracuje.[13]
Od odchodu Bellarda z projektu různí lidé a skupiny distribuovali patche nebo udržovali vidlice TCC, aby stavěli na problémech s TCC nebo je opravovali. To zahrnuje sbírku neoficiálních záplat tcc Dave Dodge,[14] Následné opravy Debianu a kfreebsd,[15] a Griska gcc záplaty.[5] Grischka také pro projekt zřídila veřejné úložiště Git[16] která obsahuje mobovou větev[17] kde byly přidány četné příspěvky, včetně sdíleného sestavení, křížových překladačů a kompatibility se SELinuxem. Úložiště Grischka GIT se později stalo oficiálním úložištěm TCC (propojeno se stránkou projektu Savannah Fabrice Bellardové [18]).
Aktuální stav
Od prosince 2017 oba oficiální seznamy TCC[19] a oficiální úložiště Git (na které odkazuje stránka projektu Savannah od Fabrice Bellardové[20]) ukazují aktivní diskusi a vývoj mnoha vývojářů a zainteresovaných uživatelů. V prosinci 2017 grischka na seznamu adresátů oznámila, že byla vydána verze TCC 0.9.27 [21].
Viz také
Reference
- ^ Referenční dokumentace kompilátoru Tiny C. zpřístupněno 7. 8. 2008
- ^ Podle projektu Seznam úkolů komplexní typy jsou jedinou chybějící funkcí C99. V TCC 0.9.26 byla přidána pole s proměnnou délkou
- ^ Domovská stránka kompilátoru Tiny C.
- ^ Glöckner, Daniel. Re: Tinycc-devel (žádný předmět), 8. září 2006.
- ^ A b grischka, GCC od TCC (některé opravy), 29. září 2005
- ^ TCCBOOT
- ^ Wheeler, David A. Proti důvěryhodnosti důvěryhodnosti prostřednictvím rozmanité dvojí kompilace. ACSAC.
- ^ tinycc-devel (vlákno)
- ^ Cinpy Archivováno 2008-11-20 na Wayback Machine
- ^ JavaScript Linux
- ^ Šachový motor Super Micro-Max
- ^ Bellard, Fabrice. Zmatený kompilátor Tiny C.
- ^ Nejstarší snímek archive.org na domovské stránce TCC, který zobrazuje oznámení Fabrice Bellardové o ukončení práce na TCC.
- ^ Dave Dodge je sbírka neoficiálních tcc záplat Archivováno 2007-03-31 na Wayback Machine
- ^ Následné opravy Debianu a kfreebsd
- ^ grischka, Public Git Hosting pro tcc
- ^ grischka, mob pobočka pro tcc
- ^ Oficiální stránka projektu Savannah
- ^ Oficiální seznam adres TCC
- ^ Oficiální úložiště zdrojových kódů Git
- ^ Oficiální seznam adres TCC, vstup 2017-12-27