Tiny C Compiler

редактировать
Компилятор Tiny C
Разработчик (и) Фабрис Беллард
Стабильный выпуск 0.9.27 / 17 декабря 2017 г.; 2 года назад (2017-12-17)
Репозиторий репо.или.cz / w / tinycc.git
Написано наC и Сборка
Операционная система Linux, Unix, Windows
Тип C компилятор
Лицензия LGPLv2.1
Веб-сайтbellard.org / tcc /

Компилятор Tiny C (также известный как TCC, tCc или TinyCC) - это x86, X86-64 и ARM процессор C компилятор, созданный Фабрисом Белларом. Он разработан для работы на медленных компьютерах с небольшим дисковым пространством (например, на аварийных дисках). Поддержка операционной системы Windows была добавлена ​​в версии 0.9.23 (17 июня 2005 г.). TCC распространяется под Стандартной общественной лицензией ограниченного применения GNU.

. TCC утверждает, что реализует все стандарты ANSI C (C89 / C90), большую часть стандарта C99 ISO и множество расширений GNU C, включая встроенную сборку.

Содержание
  • 1 Возможности
  • 2 Производительность скомпилированной программы
  • 3 Использование
  • 4 История
  • 5 Текущее состояние
  • 6 См. также
  • 7 Ссылки
  • 8 Внешние ссылки
Возможности

TCC имеет ряд функций, которые отличают его от других текущих компиляторов C:

  • Небольшой размер файла (около 100 КБ для исполняемого файла x86 TCC) и объем памяти позволяют использовать его непосредственно с одной дискеты 1,44 M , например, аварийного диска.
  • TCC предназначен для создания собственного кода x86, x86-64 и ARM. очень быстро; по словам Белларда, он компилирует, собирает и связывает примерно в девять раз быстрее, чем это делает GCC.
  • TCC имеет ряд специфичных для компилятора языковых функций, направленных на повышение его практичности, например, необязательный память и проверка границ для повышения стабильности кода.
  • TCC позволяет программам запускаться автоматически во время компиляции с помощью переключателя командной строки. Это позволяет запускать программы как сценарий оболочки в Unix-подобных системах, которые поддерживают синтаксис директивы интерпретатора shebang .
Производительность скомпилированной программы

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

TCC выполняет несколько оптимизаций, например, распространение константы для всех операций, умножения и деления оптимизированы до сдвигов, когда это необходимо, а операторы сравнения специально оптимизированы (путем поддержки специального кеша для флагов процессора). Он также выполняет простое распределение регистров , что предотвращает множество посторонних пар сохранения / загрузки внутри одного оператора .

Вот два примера тестов:

  1. Рекурсивный алгоритм Фибоначчи на процессоре Intel 1,8 ГГц. Ноутбук Centrino с 512 МБ ОЗУ дает заметную разницу в результатах между компилятором Microsoft Visual C ++ 13.10.3052 и TCC. Чтобы вычислить 49-е число Фибоначчи, программе MS Visual C ++ потребовалось примерно на 18% больше времени, чем программе, скомпилированной TCC.
  2. С tcc, измененным для компиляции GCC, для запуска cc1 (компилятора GCC C) на самой себе требовалось 518 секунд при компиляции с использованием GCC 3.4.2, 558 секунд с использованием GCC 2.95.3, 545 секунд с использованием компилятора Microsoft C и 1145 секунд с использованием tcc. Уровень оптимизации в каждом компиляторе был -O1 или аналогичный.
Используется
  • TCCBOOT, хак, где TCC загружает и загружает ядро ​​Linux из исходного кода примерно за 10 секунд.. Другими словами, это «загрузчик», который считывает исходный код ядра Linux с диска, записывает исполняемые инструкции в память и запускает его. Это действительно потребовало изменений в процессе сборки Linux.
  • TCC использовался для демонстрации защиты от доверяющих атак.
  • TCC использовался для компиляции GCC, хотя Для этой работы потребовались исправления.
  • Cinpy - это библиотека Python, которая позволяет вам реализовывать функции с C в модулях Python. Функции компилируются с помощью TCC во время выполнения. Результаты становятся доступными для вызова в Python через библиотеку ctypes.
  • Поставляется установленным на JavaScript Linux (также Bellard).
  • Используется в качестве справочника для скомпилированной версии супер-микро- max. источник шахматной программы.
История

TCC берет свое начало в компиляторе Obfuscated Tiny C Compiler (OTCC), программе, которую Беллард написал для победы в Международном конкурсе запутанного кода C (IOCCC) в 2001 году. После этого Беллард расширил и деобфусцировал программу для создания tcc.

За некоторое время до 4 февраля 2012 года Фабрис Беллард обновил официальную веб-страницу проекта, чтобы сообщить, что он больше не работает над TCC.

После ухода Белларда из проекта различные люди и группы распространяли патчи или поддерживали форки TCC, чтобы развить или исправить проблемы с TCC. Это включает в себя коллекцию неофициальных исправлений tcc Дейва Доджа, последующие исправления Debian и kfreebsd, а также исправления gcc от grischka. Гришка также создал общедоступный репозиторий Git для проекта, содержащий ветку mob, куда были добавлены многочисленные дополнения, включая общую сборку, кросс-компиляторы и совместимость с SELinux. Репозиторий Grischka позже стал официальным репозиторием TCC (ссылка на страницу проекта Fabrice Bellard's Savannah).

Текущий статус

По состоянию на декабрь 2017 года как в официальном списке рассылки TCC, так и в официальном репозитории Git (ссылка на который есть на странице проекта Саванна Фабриса Белларда) наблюдается активное обсуждение и разработка многими разработчиками и заинтересованными сторонами. пользователей. В декабре 2017 года grischka объявил в списке рассылки о выпуске TCC версии 0.9.27.

См. Также
  • Портал бесплатного программного обеспечения с открытым исходным кодом
Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-11 04:12:22
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте