Это не официальный сайт wikipedia.org 01.01.2023

Tiny C Compiler — Википедия

Tiny C Compiler

Tiny C Compiler (англ. Tiny C Compiler — «крошечный компилятор Си»), или TinyCC, или TCC — компилятор C для платформы x86.

Tiny C Compiler
Скриншот программы Tiny C Compiler
Тип компилятор
Автор Фабрис Беллар[1]
Разработчик Фабрис Беллар
Написана на C и язык ассемблера
Операционная система Linux, Microsoft Windows, KolibriOS
Первый выпуск 2002[1]
Аппаратная платформа x86, ARM и x86_64
Последняя версия 0.9.27 (17 декабря 2017)
Лицензия GNU LGPL
Сайт bellard.org/tcc/

Работает в ОС Linux, KolibriOS[2], Microsoft Windows. Существуют также версии для ARM, TMS320C67xx. Распространяется по лицензии GNU LGPL.

ОсобенностиПравить

  • От других распространённых компиляторов TCC отличается прежде всего тем, что может исполнять скомпилированную им программу, то есть выполнять функцию интерпретатора. Данное свойство позволяет использовать язык Си в качестве скриптового языка. Например, для того, чтобы запустить программу на Си в качестве скрипта в оболочке Linux, достаточно вставить в начало текста программы строку:
#!/usr/local/bin/tcc -run[3]

Также, наличие библиотеки libtcc позволяет осуществлять динамическую генерацию кода. С помощью этой библиотеки пользователь, например, может скомпилировать строку, содержащую программу на Си, после чего получить доступ к любому глобальному символу (переменной или функции), определенному в программе.[4]

  • Компактность. Исполняемый файл для процессоров x86, включающий препроцессор, компилятор, ассемблер и компоновщик, составляет всего около 100 КБ.[5]
  • Высокая скорость компиляции. Например, TCC примерно в 9 раз быстрее GCC.[6]
  • Возможность формировать код с контролем границ массивов, который можно беспрепятственно использовать вместе с обычным кодом.
  • Возможность напрямую использовать любую динамическую библиотеку.
  • Оптимизация кода ограничена вычислением константных выражений на этапе компиляции, заменой операций умножения и деления операциями сдвига, где это возможно, а также некоторыми другими действиями. Оптимизация переходов не производится, так как это потребовало бы организацию промежуточного кода в более абстрактном виде.[7]

СовместимостьПравить

TCC поддерживает не только стандарт ANSI C, но и большую часть нового стандарта ISO C99 и многие расширения GNU C, включая ассемблерные вставки. TCC также имеет собственные расширения, например, представление чисел в двоичном коде (0b101 вместо 5), а также предопределенный макрос __TINYC__, с помощью которого можно определить, используется ли TCC.[8]

История развитияПравить

TCC первоначально разрабатывался для ОС Linux, однако начиная с версии 0.9.23 (17 июня 2005) работает и в ОС Microsoft Windows.

Первый вариант TCC был разработан как Obfuscated Tiny C Compiler (OTCC). OTCC — программа, написанная Фабрисом Белларом для участия в конкурсе International Obfuscated C Code Contest (IOCCC) в 2002 году[9] (на официальном сайте конкурса Фабрис Беллар с программой OTCC числится среди победителей конкурса за 2001 год[10].) С того времени Беллар значительно расширил функциональность программы и сделал её более понятной.

Текущее состояниеПравить

На данный момент проект TCC продолжает развиваться. Существует активный список рассылки, а текущая версия от Фабриса Беллара доступна через CVS. Однако, официальная разработка TCC замедлилась в связи с занятостью Беллара в других проектах. На данный момент (апрель 2012) на сайте разработчика висит сообщение, что он больше не занимается поддержкой компилятора.

Роб Лендли, используя Mercurial SCM, создал версию TCC, включающую различные патчи от сторонних разработчиков.

Помимо обозначенных выше, существуют и другие модификации TCC и патчи для него, такие как, неофициальная коллекция патчей от Дейва Доджа, патчи от Debian и kfreebsd, а также патчи для GCC от grischka.

В версии TCC 0.9.23 была обнаружена уязвимость, получившая номера CVE-2006-0635[11] и Open Source Vulnerability Database vulnerability 22956[12]. В отчёте было сказано, что TCC «содержит ошибку, способную вызвать проблемы с безопасностью в программах, скомпилированных с его помощью. Компилятор не способен возвращать беззнаковое значение оператора sizeof, что может привести к переполнениям целых чисел в скомпилированных объектах». Эта уязвимость была закрыта в версии 0.9.24.

См. такжеПравить

На основе TCC создан загрузчик TCCBOOT (TinyCC Boot Loader)  (англ.), позволяющий компилировать и загружать ядро Linux непосредственно из исходных текстов.

СсылкиПравить

ПримечанияПравить

  1. 1 2 Obfuscated Tiny C Compiler
  2. Tiny C Compiler - Просмотр темы Архивная копия от 12 августа 2014 на Wayback Machine [1]
  3. Tiny C Compiler Reference Documentation, 2.1 Quick start Архивная копия от 27 сентября 2011 на Wayback Machine  (англ.)
  4. Tiny C Compiler Reference Documentation, 7. The libtcc library Архивная копия от 27 сентября 2011 на Wayback Machine  (англ.)
  5. Tiny C Compiler Архивная копия от 8 апреля 2011 на Wayback Machine  (англ.)
  6. Tiny C Compiler Compilation Speed Архивная копия от 8 апреля 2011 на Wayback Machine  (англ.)
  7. Tiny C Compiler Reference Documentation, 8.8 Optimizations done Архивная копия от 27 сентября 2011 на Wayback Machine  (англ.)
  8. Tiny C Compiler Reference Documentation, 3.4 TinyCC extensions Архивная копия от 27 сентября 2011 на Wayback Machine  (англ.)
  9. Obfuscated Tiny C Compiler  (англ.)
  10. Previous IOCCC Winners  (неопр.). Дата обращения: 13 мая 2009. Архивировано из оригинала 22 октября 2013 года.
  11. CVE-2006-0635  (неопр.). Дата обращения: 13 мая 2009. Архивировано 3 марта 2016 года.
  12. 22956 : Tiny C Compiler sizeof Calculation Weakness (недоступная ссылка)