Interested Article - Tiny C Compiler

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

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

Особенности

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

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

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

Совместимость

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

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

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

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

Текущее состояние

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

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

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

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

См. также

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

Ссылки

  • (англ.)

Примечания

  1. от 12 августа 2014 на Wayback Machine [1]
  2. от 27 сентября 2011 на Wayback Machine (англ.)
  3. от 27 сентября 2011 на Wayback Machine (англ.)
  4. от 8 апреля 2011 на Wayback Machine (англ.)
  5. от 8 апреля 2011 на Wayback Machine (англ.)
  6. от 27 сентября 2011 на Wayback Machine (англ.)
  7. от 27 сентября 2011 на Wayback Machine (англ.)
  8. (англ.)
  9. . Дата обращения: 13 мая 2009. Архивировано из 22 октября 2013 года.
  10. . Дата обращения: 13 мая 2009. 3 марта 2016 года.
  11. (недоступная ссылка)
Источник —

Same as Tiny C Compiler