fbpx
Wikipedia

Tiny C Compiler

The Tiny C Compiler (a.k.a. TCC, tCc, or TinyCC) is an x86, X86-64 and ARM processor C compiler initially written by Fabrice Bellard. It is designed to work for slow computers with little disk space (e.g. on rescue disks). Windows operating system support was added in version 0.9.23 (17 June 2005). TCC is distributed under the GNU Lesser General Public License.

Tiny C Compiler
Screenshot
Developer(s)Fabrice Bellard
Stable release
0.9.27 / 17 December 2017; 6 years ago (2017-12-17)
Repositoryrepo.or.cz/w/tinycc.git
Written inC and Assembly[citation needed]
Operating systemLinux, Unix, Windows
PredecessorOTCC, Obfuscated Tiny C Compiler[1]
TypeC compiler
LicenseLGPLv2.1
Websitewww.tinycc.org

TCC claims to implement all of ANSI C (C89/C90),[2] much of the C99 ISO standard,[3] and many GNU C extensions including inline assembly.

Features edit

TCC has a number of features that differentiate it from other current C compilers:

  • Its small file size (about 100 KB for the x86 TCC executable) and memory footprint allow it to be used directly from a single 1.44 M floppy disk, such as a rescue disk.
  • TCC is intended to produce native x86, x86-64 and ARM code very quickly; according to Bellard, it compiles, assembles and links about nine times faster than GCC does.[4] As of 2023, the "mob" development branch also includes support for RISC-V and TMS320C67xx (a DSP chip).
  • TCC has a number of compiler-specific language features intended to improve its practicality, such as an optional memory and bound checker, for improved code stability.
  • TCC allows programs to be run automatically at compile time using a command-line switch. This allows programs to be run as a shell script under Unix-like systems that support the shebang interpreter directive syntax.

Compiled program performance edit

In general, TCC's implementation emphasizes smallness instead of optimally-performing results. TCC generates code in a single pass, and does not perform most of the optimizations performed by other compilers. TCC compiles every statement on its own, and at the end of each statement register values are written back to the stack and must be re-read even if the next line uses the values in registers (creating extraneous save/load pairs between statements). TCC uses only some of the available registers (e.g., on x86 it never uses ebx, esi, or edi because they need to be preserved across function calls).[5]

TCC performs a few optimizations, such as constant propagation for all operations, multiplications and divisions are optimized to shifts when appropriate, and comparison operators are specially optimized (by maintaining a special cache for the processor flags). It also does some simple register allocation, which prevents many extraneous save/load pairs inside a single statement.

Here are two benchmark examples:

  1. A recursive Fibonacci algorithm on a 1.8 GHz Intel Centrino laptop with 512 MB RAM yields a noticeable difference in results between Microsoft Visual C++ compiler 13.10.3052 and TCC. To calculate the 49th Fibonacci number, it took a MS Visual C++ program approximately 18% longer than the TCC compiled program.[citation needed]
  2. A test compared different C compilers by using them to compile the GNU C Compiler (GCC) itself, and then using the resulting compilers to compile GCC again. Compared to GCC 3.4.2, a TCC modified to compile GCC was able to compile the compiler ten times faster, but the resulting .exe it produced was 57% larger, and much slower, taking 2.2 times as long to compile GCC again.[6]

    The results were: Running cc1 (the GCC C compiler) on itself required 518 seconds when compiled using GCC 3.4.2, 545 seconds using Microsoft C compiler, and 1145 seconds using TCC. To create these compilers in the first place, GCC (3.4.2) took 744 seconds to compile the GCC compiler, whereas TCC took only 73 seconds. The level of optimization in each compiler was -O1 or similar.

Uses edit

  • TCCBOOT,[7] a hack where TCC loads and boots a Linux kernel from source in about 10 seconds. That is to say, it is a "boot loader" that reads Linux kernel source code from disk, writes executable instructions to memory, and begins running it. This did require changes to the Linux build process.
  • TCC has been used to compile GCC, though various patches were required to make this work.[8]
  • TCC was used to demonstrate a defense against the trust attack.[9] It is also used in GNU Guix[10] in an attempt to make the distribution bootstrapable without using any binary.[11]
  • Cinpy[12] is a Python library that allows you to implement functions with C in Python modules. The functions are compiled with TCC at runtime. The results are made callable in Python through the ctypes library.
  • Comes installed on JavaScript Linux[13] (also by Bellard).
  • Has been used as a reference for the compiled version of the Super Micro-Max Chess program source.[14]

History edit

TCC has its origins in the Obfuscated Tiny C Compiler (OTCC),[1] a program Bellard wrote to win the International Obfuscated C Code Contest (IOCCC) in 2001. After that time, Bellard expanded and deobfuscated the program to produce tcc.[1]

At some time prior to 4 February 2012 Fabrice Bellard updated the project's official web page to report that he was no longer working on TCC.[15]

Since Bellard's departure from the project, various people and groups have distributed patches or maintained forks of TCC to build upon or fix issues with TCC. This includes Dave Dodge's collection of unofficial tcc patches,[16] Debian and kfreebsd downstream patches,[17] and grischka's gcc patches.[6] Grischka also set up a public Git repository for the project[18] that contains a mob branch[19] where numerous contributions, including a shared build, cross-compilers, and SELinux compatibility were added. Grischka's GIT repository later became the official TCC repository (linked to by Fabrice Bellard's Savannah project page [20]).

Current status edit

As of December 2017 both the official TCC mailing list[21] and the official Git repository (as linked to by Fabrice Bellard's Savannah project page[22]) show active discussion and development by many developers and interested users. In December 2017, grischka announced on the mailing list that TCC version 0.9.27 was released.[23]

See also edit

References edit

  1. ^ a b c Bellard, Fabrice. Obfuscated Tiny C Compiler, winning entry of IOCCC 2001. https://bellard.org/otcc/ and at the Internet Archive at
  2. ^ Tiny C Compiler Reference Documentation accessed on 2008-08-07
  3. ^ 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
  4. ^ "TCC : Tiny C Compiler". bellard.org. Retrieved 27 March 2023.
  5. ^ Glöckner, Daniel. Re: Tinycc-devel (no subject), 8 September 2006.
  6. ^ a b grischka, GCC by TCC (some fixes), 29 September 2005
  7. ^ "TCCBOOT: TinyCC Boot Loader". bellard.org. Retrieved 27 March 2023.
  8. ^ "tinycc-devel (thread)". lists.gnu.org. Retrieved 27 March 2023.
  9. ^ Wheeler, David A. Countering Trusting Trust through Diverse Double-Compiling. ACSAC.
  10. ^ "Guix Further Reduces Bootstrap Seed to 25% — 2020 — Blog — GNU Guix".
  11. ^ "Bootstrappable builds". bootstrappable.org. Retrieved 29 March 2023.
  12. ^ . Archived from the original on 20 November 2008. Retrieved 27 March 2023.
  13. ^ "JSLinux". bellard.org. Retrieved 27 March 2023.
  14. ^ "Super Micro Chess". SourceForge. Retrieved 27 March 2023.
  15. ^ . 4 February 2012. Archived from the original on 4 February 2012. Retrieved 27 March 2023.
  16. ^ . www.dododge.net. Archived from the original on 31 March 2007. Retrieved 27 March 2023.
  17. ^ "Debian -- Details of package tcc in sid". packages.debian.org. Retrieved 27 March 2023.
  18. ^ grischka, Public Git Hosting for tcc
  19. ^ grischka, mob branch for tcc
  20. ^ "Tiny C Compiler - Summary [Savannah]". savannah.nongnu.org. Retrieved 27 March 2023.
  21. ^ "tinycc-devel Archives". lists.gnu.org. Retrieved 27 March 2023.
  22. ^ "Public Git Hosting - tinycc.git/summary". repo.or.cz. Retrieved 27 March 2023.
  23. ^ "[Tinycc-devel] TCC version 0.9.27 is out". lists.nongnu.org. Retrieved 27 March 2023.

External links edit

tiny, compiler, tinycc, processor, compiler, initially, written, fabrice, bellard, designed, work, slow, computers, with, little, disk, space, rescue, disks, windows, operating, system, support, added, version, june, 2005, distributed, under, lesser, general, . The Tiny C Compiler a k a TCC tCc or TinyCC is an x86 X86 64 and ARM processor C compiler initially written by Fabrice Bellard It is designed to work for slow computers with little disk space e g on rescue disks Windows operating system support was added in version 0 9 23 17 June 2005 TCC is distributed under the GNU Lesser General Public License Tiny C CompilerScreenshotDeveloper s Fabrice BellardStable release0 9 27 17 December 2017 6 years ago 2017 12 17 Repositoryrepo wbr or wbr cz wbr w wbr tinycc wbr gitWritten inC and Assembly citation needed Operating systemLinux Unix WindowsPredecessorOTCC Obfuscated Tiny C Compiler 1 TypeC compilerLicenseLGPLv2 1Websitewww wbr tinycc wbr org TCC claims to implement all of ANSI C C89 C90 2 much of the C99 ISO standard 3 and many GNU C extensions including inline assembly Contents 1 Features 2 Compiled program performance 3 Uses 4 History 5 Current status 6 See also 7 References 8 External linksFeatures editTCC has a number of features that differentiate it from other current C compilers Its small file size about 100 KB for the x86 TCC executable and memory footprint allow it to be used directly from a single 1 44 M floppy disk such as a rescue disk TCC is intended to produce native x86 x86 64 and ARM code very quickly according to Bellard it compiles assembles and links about nine times faster than GCC does 4 As of 2023 the mob development branch also includes support for RISC V and TMS320C67xx a DSP chip TCC has a number of compiler specific language features intended to improve its practicality such as an optional memory and bound checker for improved code stability TCC allows programs to be run automatically at compile time using a command line switch This allows programs to be run as a shell script under Unix like systems that support the shebang interpreter directive syntax Compiled program performance editIn general TCC s implementation emphasizes smallness instead of optimally performing results TCC generates code in a single pass and does not perform most of the optimizations performed by other compilers TCC compiles every statement on its own and at the end of each statement register values are written back to the stack and must be re read even if the next line uses the values in registers creating extraneous save load pairs between statements TCC uses only some of the available registers e g on x86 it never uses ebx esi or edi because they need to be preserved across function calls 5 TCC performs a few optimizations such as constant propagation for all operations multiplications and divisions are optimized to shifts when appropriate and comparison operators are specially optimized by maintaining a special cache for the processor flags It also does some simple register allocation which prevents many extraneous save load pairs inside a single statement Here are two benchmark examples A recursive Fibonacci algorithm on a 1 8 GHz Intel Centrino laptop with 512 MB RAM yields a noticeable difference in results between Microsoft Visual C compiler 13 10 3052 and TCC To calculate the 49th Fibonacci number it took a MS Visual C program approximately 18 longer than the TCC compiled program citation needed A test compared different C compilers by using them to compile the GNU C Compiler GCC itself and then using the resulting compilers to compile GCC again Compared to GCC 3 4 2 a TCC modified to compile GCC was able to compile the compiler ten times faster but the resulting exe it produced was 57 larger and much slower taking 2 2 times as long to compile GCC again 6 The results were Running cc1 the GCC C compiler on itself required 518 seconds when compiled using GCC 3 4 2 545 seconds using Microsoft C compiler and 1145 seconds using TCC To create these compilers in the first place GCC 3 4 2 took 744 seconds to compile the GCC compiler whereas TCC took only 73 seconds The level of optimization in each compiler was O1 or similar Uses editTCCBOOT 7 a hack where TCC loads and boots a Linux kernel from source in about 10 seconds That is to say it is a boot loader that reads Linux kernel source code from disk writes executable instructions to memory and begins running it This did require changes to the Linux build process TCC has been used to compile GCC though various patches were required to make this work 8 TCC was used to demonstrate a defense against the trust attack 9 It is also used in GNU Guix 10 in an attempt to make the distribution bootstrapable without using any binary 11 Cinpy 12 is a Python library that allows you to implement functions with C in Python modules The functions are compiled with TCC at runtime The results are made callable in Python through the ctypes library Comes installed on JavaScript Linux 13 also by Bellard Has been used as a reference for the compiled version of the Super Micro Max Chess program source 14 History editTCC has its origins in the Obfuscated Tiny C Compiler OTCC 1 a program Bellard wrote to win the International Obfuscated C Code Contest IOCCC in 2001 After that time Bellard expanded and deobfuscated the program to produce tcc 1 At some time prior to 4 February 2012 Fabrice Bellard updated the project s official web page to report that he was no longer working on TCC 15 Since Bellard s departure from the project various people and groups have distributed patches or maintained forks of TCC to build upon or fix issues with TCC This includes Dave Dodge s collection of unofficial tcc patches 16 Debian and kfreebsd downstream patches 17 and grischka s gcc patches 6 Grischka also set up a public Git repository for the project 18 that contains a mob branch 19 where numerous contributions including a shared build cross compilers and SELinux compatibility were added Grischka s GIT repository later became the official TCC repository linked to by Fabrice Bellard s Savannah project page 20 Current status editAs of December 2017 both the official TCC mailing list 21 and the official Git repository as linked to by Fabrice Bellard s Savannah project page 22 show active discussion and development by many developers and interested users In December 2017 grischka announced on the mailing list that TCC version 0 9 27 was released 23 See also edit nbsp Free and open source software portal GNU Compiler Collection LCC compiler Portable C Compiler PCC Small CReferences edit a b c Bellard Fabrice Obfuscated Tiny C Compiler winning entry of IOCCC 2001 https bellard org otcc and at the Internet Archive at https web archive org web 20130721162702 http www ioccc org 2001 Tiny C Compiler Reference Documentation accessed on 2008 08 07 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 TCC Tiny C Compiler bellard org Retrieved 27 March 2023 Glockner Daniel Re Tinycc devel no subject 8 September 2006 a b grischka GCC by TCC some fixes 29 September 2005 TCCBOOT TinyCC Boot Loader bellard org Retrieved 27 March 2023 tinycc devel thread lists gnu org Retrieved 27 March 2023 Wheeler David A Countering Trusting Trust through Diverse Double Compiling ACSAC Guix Further Reduces Bootstrap Seed to 25 2020 Blog GNU Guix Bootstrappable builds bootstrappable org Retrieved 29 March 2023 Cinpy Archived from the original on 20 November 2008 Retrieved 27 March 2023 JSLinux bellard org Retrieved 27 March 2023 Super Micro Chess SourceForge Retrieved 27 March 2023 TCC Tiny C Compiler 4 February 2012 Archived from the original on 4 February 2012 Retrieved 27 March 2023 Unofficial tcc Patches www dododge net Archived from the original on 31 March 2007 Retrieved 27 March 2023 Debian Details of package tcc in sid packages debian org Retrieved 27 March 2023 grischka Public Git Hosting for tcc grischka mob branch for tcc Tiny C Compiler Summary Savannah savannah nongnu org Retrieved 27 March 2023 tinycc devel Archives lists gnu org Retrieved 27 March 2023 Public Git Hosting tinycc git summary repo or cz Retrieved 27 March 2023 Tinycc devel TCC version 0 9 27 is out lists nongnu org Retrieved 27 March 2023 External links editOfficial website TCC s active mailing list Source code repository PTSource IDE Integrated Development Environment includes TCC Retrieved from https en wikipedia org w index php title Tiny C Compiler amp oldid 1217223273, wikipedia, wiki, book, books, library,

article

, read, download, free, free download, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, picture, music, song, movie, book, game, games.