Користувач:Fearislie/Tiny C Compiler

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку
Tiny C Compiler
Знімок екрану
Тип C компілятор
Розробник Fabrice Bellard
Стабільний випуск 0.9.27 (17 грудня, 2017; 6 років тому (2017-12-17))
Операційна система Linux, Unix, Windows
Мова програмування C and Assembly[джерело?]
Ліцензія LGPLv2.1
Репозиторій repo.or.cz/w/tinycc.git
Вебсайт www.tinycc.org

Tiny C Compiler (також відомий як TCC, tCc або TinyCC) це компілятор мови С для процесорів x86, X86-64 та ARM написаний Фабрісом Белларом. Він призначений для роботи на повільних комп'ютерах з невеликим обсягом дискового простору (наприклад, на завантажувальних дисках). Підтримку операційної системи Windows було додано у версії 0.9.23 (17 червня 2005 року). TCC поширюється на умовах ліцензії GNU Lesser General Public License.

TCC стверджує, що реалізує всі стандарти ANSI C (C89/C90), більшу частину стандарту ISO C99 стандарту, і багато розширень GNU C

Переваги

[ред. | ред. код]

TCC має низку особливостей, які відрізняють його від інших сучасних компіляторів C:

  • Невеликий розмір файлу (близько 100 КБ для виконуваного файлу x86 TCC) і і Його невеликий розмір файлу (близько 100 КБ для виконуваного файлу x86 TCC) і обсяг пам'яті дозволяють використовувати його безпосередньо з однієї 1,44 М дискети, наприклад, завантажувальний диск.
  • TCC призначений для швидкого створення нативного коду для x86, x86-64 та ARM; За словами Белларда, він компілює, збирає і зв'язує приблизно в дев'ять разів швидше, ніж GCC.[2] Станом на 2023 рік гілка розробки "mob" також включає підтримку RISC-V та TMS320C67xx (DSP).
  • TCC має низку специфічних для компілятора мовних особливостей, призначених для підвищення його практичності, таких як необов'язкова перевірка пам'яті та зв'язаності, для покращення стабільності коду.
  • TCC дозволяє запускати програми автоматично під час компіляції за допомогою перемикача командного рядка. Це дозволяє запускати програми як скрипт командного рядка у Unix-подібних системах, які підтримують синтаксис директив інтерпретатора shebang.

Швидкодія скомпільованої програми

[ред. | ред. код]

Загалом, реалізація TCC робить акцент на малих розмірах, а не на оптимальних результатах. TCC генерує код за один прохід і не виконує більшість оптимізацій, які виконують інші компілятори. TCC компілює кожен оператор самостійно, а в кінці кожного оператора значення регістрів записуються назад у стек і повинні бути перечитані, навіть якщо наступний рядок використовує значення у регістрах (створюючи зайві пари збереження/завантаження між операторами). TCC використовує лише деякі з доступних регістрів (наприклад, на x86 він ніколи не використовує ebx, esi або edi, оскільки їх потрібно зберігати під час викликів функцій).

TCC виконує декілька оптимізацій, таких як поширення констант для всіх операцій, множення та ділення оптимізовано до зсувів коли це доречно, а оператори порівняння спеціально оптимізовано (шляхом підтримки спеціального кешу для прапорів процесора). Також виконується просте розподілення регістрів, що запобігає використанню багатьох зайвих пар збереження/завантаження в одній інструкції.

  1. Рекурсивний алгоритм Фібоначчі на ноутбуці Intel Centrino з тактовою частотою 1,8 ГГц і 512 МБ ОЗП дає помітну різницю в результатах між компілятором Microsoft Visual C++ 13.10.3052 і TCC. Для обчислення 49-го числа Фібоначчі програмі на MS Visual C++ знадобилося приблизно на 18% більше часу, ніж програмі, скомпільованій TCC. [<span title="This claim needs references to reliable sources. (February 2008)">необхідне посилання</span>]
  2. У тесті порівнювалися різні компілятори C, за допомогою яких було скомпільовано сам компілятор GNU C Compiler (GCC), а потім за допомогою отриманих компіляторів знову скомпільовано GCC. Порівняно з GCC 3.4.2, TCC, модифікований для компіляції GCC, зміг скомпілювати компілятор удесятеро швидше, але результуючий .exe, який він створив, був на 57% більшим і працював значно повільніше, а повторна компіляція GCC зайняла у 2.2 рази більше часу. Результати були такими: Запуск cc1 (компілятора C GCC) на виконання вимагав 518 секунд при компіляції за допомогою GCC 3.4.2, 545 секунд за допомогою компілятора Microsoft C і 1145 секунд за допомогою TCC. Для створення цих компіляторів компілятор GCC (3.4.2) витратив 744 секунди, тоді як компілятор TCC - лише 73 секунди. Рівень оптимізації у кожному компіляторі був -O1 або подібний.
  • TCCBOOT,[3] 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.[4]
  • TCC was used to demonstrate a defense against the trust attack. It is also used in GNU Guix[5] in an attempt to make the distribution bootstrapable without using any binary.[6]
  • Cinpy[7] 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[8] (also by Bellard).
  • Has been used as a reference for the compiled version of the Super Micro-Max Chess program source.[9]

TCC has its origins in the Obfuscated Tiny C Compiler (OTCC), 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.

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.[10]

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,[11] Debian and kfreebsd downstream patches,[12] and grischka's gcc patches. Grischka also set up a public Git repository for the project that contains a mob branch 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 [13]).

Current status

[ред. | ред. код]

As of December 2017 both the official TCC mailing list[14] and the official Git repository (as linked to by Fabrice Bellard's Savannah project page[15]) 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.[16]

Дивіться також

[ред. | ред. код]

Посилання

[ред. | ред. код]
  1. 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/
  2. TCC : Tiny C Compiler. bellard.org. Процитовано 27 March 2023.
  3. TCCBOOT: TinyCC Boot Loader. bellard.org. Процитовано 27 March 2023.
  4. tinycc-devel (thread). lists.gnu.org. Процитовано 27 March 2023.
  5. Guix Further Reduces Bootstrap Seed to 25% — 2020 — Blog — GNU Guix.
  6. Bootstrappable builds. bootstrappable.org. Процитовано 29 March 2023.
  7. Cinpy. Архів оригіналу за 20 November 2008. Процитовано 27 March 2023.
  8. JSLinux. bellard.org. Процитовано 27 March 2023.
  9. Super Micro Chess. SourceForge. Процитовано 27 March 2023.
  10. TCC : Tiny C Compiler. 4 February 2012. Архів оригіналу за 4 лютого 2012. Процитовано 27 March 2023.
  11. Unofficial tcc Patches. www.dododge.net. Архів оригіналу за 31 March 2007. Процитовано 27 March 2023.
  12. Debian -- Details of package tcc in sid. packages.debian.org. Процитовано 27 March 2023.
  13. Tiny C Compiler - Summary [Savannah]. savannah.nongnu.org. Процитовано 27 March 2023.
  14. tinycc-devel Archives. lists.gnu.org. Процитовано 27 March 2023.
  15. Public Git Hosting - tinycc.git/summary. repo.or.cz. Процитовано 27 March 2023.
  16. [Tinycc-devel] TCC version 0.9.27 is out. lists.nongnu.org. Процитовано 27 March 2023.
[ред. | ред. код]

[[Категорія:Програмне забезпечення, написане мовою асемблера]] [[Категорія:Вільне програмне забезпечення на C]] [[Категорія:Вільні компілятори та інтерпретатори]] [[Категорія:Компілятори C]]