Разработчик (и) | Фабрис Беллард |
---|---|
Стабильный выпуск | 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, включая встроенную сборку.
TCC имеет ряд функций, которые отличают его от других текущих компиляторов C:
В общем, Реализация TCC подчеркивает малость вместо оптимальных результатов. TCC генерирует код за один проход и не выполняет большую часть оптимизаций, выполняемых другими компиляторами. TCC компилирует каждый оператор самостоятельно, и в конце каждого оператора значения регистров записываются обратно в стек и должны быть перечитаны, даже если следующая строка использует значения в регистрах (создавая лишние пары сохранения / загрузки между операторами). TCC использует только некоторые из доступных регистров (например, на x86 он никогда не использует ebx, esi или edi, потому что их необходимо сохранять при вызовах функций).
TCC выполняет несколько оптимизаций, например, распространение константы для всех операций, умножения и деления оптимизированы до сдвигов, когда это необходимо, а операторы сравнения специально оптимизированы (путем поддержки специального кеша для флагов процессора). Он также выполняет простое распределение регистров , что предотвращает множество посторонних пар сохранения / загрузки внутри одного оператора .
Вот два примера тестов:
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.