Tiny C компиляторы - 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
Веб-сайтқоңырау.org/ tcc/

The Tiny C компиляторы (TCC, tCc немесе TinyCC) an x86, X86-64 және ҚОЛ процессор C құрастырушы басында жазылған Фабрис Беллард. Ол аз дискілік орны бар баяу компьютерлерге арналған (мысалы, құтқару дискілерінде). Windows операциялық жүйені қолдау 0.9.23 нұсқасында қосылды (2005 ж. 17 маусым). TCC таралады GNU кіші жалпыға ортақ лицензиясы.

TCC барлығын жүзеге асырамыз деп мәлімдейді ANSI C (C89 / C90),[1] көп бөлігі C99 ISO стандарты,[2] және көптеген GNU C кеңейтімдері құрастыру.

Ерекшеліктер

TCC басқа C компиляторларынан ерекшеленетін бірқатар ерекшеліктерге ие:

  • Оның кішігірім өлшемдері (орындалатын TCC x86 үшін шамамен 100 КБ) және жадының іздері оны тікелей 1,44 М-ден пайдалануға мүмкіндік береді. дискета, мысалы, құтқару дискісі.
  • TCC жергілікті x86, x86-64 және ARM кодтарын тез шығаруға арналған; Беллардтың айтуынша, ол құрастырады, құрастырады және сілтемелерден шамамен тоғыз есе жылдамырақ GCC жасайды.[3]
  • TCC-де кодтың тұрақтылығын жақсарту үшін қосымша жад және байланысты тексергіш сияқты практикалық жақсартуға арналған бірнеше компиляторға тән тілдік мүмкіндіктер бар.
  • TCC командалық жолды ауыстырып-қосқыш көмегімен бағдарламаларды компиляция кезінде автоматты түрде іске қосуға мүмкіндік береді. Бұл бағдарламаларды Unix тәрізді жүйелер астында қабықша сценарийі ретінде іске қосуға мүмкіндік береді шебанг аудармашы директивасы синтаксис.

Бағдарламаның орындалуы

Тұтастай алғанда, СТК-ны іске асыру оңтайлы нәтижелердің орнына кішігірімге баса назар аударады. TCC бір жолда код жасайды және басқа компиляторлар орындайтын оңтайландырулардың көпшілігін орындай алмайды. TCC әр операторды өздігінен құрастырады, және әрбір оператордың соңында регистр мәндері стекке қайта жазылады және келесі жолда регистрлердегі мәндер қолданылған болса да қайта оқылуы керек (операторлар арасында бөгде сақтау / жүктеу жұптарын құру). TCC тек кейбір қол жетімді регистрлерді қолданады (мысалы, x86-да ол ешқашан ebx, esi немесе edi қолданбайды, өйткені оларды функционалдық қоңыраулар кезінде сақтау керек).[4]

TCC бірнеше әрекеттерді орындайды оңтайландыру, сияқты тұрақты көбейту барлық операциялар үшін көбейту және бөлу оңтайландырылған ауысым қажет болған жағдайда және салыстыру операторлары арнайы оңтайландырылған (процессордың жалаушалары үшін арнайы кэш сақтау арқылы). Бұл сондай-ақ қарапайым тіркеу бөлу, бұл көптеген бөгде сақтау / жүктеу жұптарының алдын алады мәлімдеме.

Міне, екі эталондық мысал:

  1. 1,8 ГГц Intel Centrino ноутбугіндегі 512 МБ болатын рекурсивті Фибоначчи алгоритмі Жедел Жадтау Құрылғысы Microsoft Visual C ++ компиляторы 13.10.3052 мен TCC арасындағы нәтижелерде айтарлықтай айырмашылықты береді. 49-шы Фибоначчи нөмірін есептеу үшін MS Visual C ++ бағдарламасы TCC құрастырған бағдарламадан шамамен 18% артық уақытты алды.[дәйексөз қажет ]
  2. GCC-ді компиляциялау үшін модификацияланған tcc-мен cc1-ді (GCC C компиляторын) іске қосу GCC 3.4.2 көмегімен құрастырған кезде 518 секунд, GCC 2.95.3 көмегімен 558 секунд, Microsoft C компиляторы арқылы 545 және tcc арқылы 1145 секунд қажет болды. Әрбір компилятордағы оңтайландыру деңгейі -O1 немесе ұқсас болды.[5]

Қолданады

  • TCCBOOT,[6] а бұзу мұнда TCC жүктейді және жүктейді a Linux ядросы көзден шамамен 10 секунд ішінде. Яғни, бұл Linux жүктемесінің бастапқы кодын дискіден оқып, орындалатын нұсқауларды жадқа жазып, іске қосуды бастайтын «жүктеуші». Бұл Linux құру үдерісіне өзгерістер енгізуді қажет етті.
  • TCC қорғанысты көрсету үшін пайдаланылды сенім шабуыл.[7]
  • GCC-ді құрастыру үшін TCC пайдаланылды, бірақ бұл жұмыс үшін әр түрлі патчтар қажет болды.[8]
  • Cinpy[9] - бұл Python модульдерінде C көмегімен функцияларды жүзеге асыруға мүмкіндік беретін Python кітапханасы. Функциялар жұмыс уақытында TCC-мен құрастырылады. Нәтижелер Python-да цитоптер кітапханасы арқылы қол жетімді болады.
  • JavaScript Linux-те орнатылған[10] (сонымен қатар Беллард).
  • Супер micro-max шахмат бағдарламасының қайнар көзінің жинақталған нұсқасына сілтеме ретінде қолданылған.[11]

Тарих

TCC бастауын Obfuscated Tiny C Compiler-ден (OTCC) алады, деп жазды Bellard бағдарламасы Халықаралық Кодекс Конкурсы (IOCCC) 2001 ж. Осы уақыттан кейін Беллард tcc өндірісі бойынша бағдарламаны кеңейтті және деоффусациялады.[12]

2012 жылдың 4 ақпанына дейін біраз уақыт бұрын Фабрис Беллард жобаның ресми веб-парағын жаңартты, ол бұдан әрі ТТК-да жұмыс істемейтіндігі туралы хабарлады.[13]

Беллард жобадан кеткен сәттен бастап, әр түрлі адамдар мен топтар ТКК-ға байланысты мәселелерді шешу немесе түзету үшін ТКК-нің патчтарын немесе сақтықтарын таратты. Бұған Дейв Додждың бейресми tcc патчтар коллекциясы,[14] Дебиан мен кфребсдтің төменгі ағысы,[15] және гришканың gcc патчтары.[5] Грищка сонымен бірге жоба үшін қоғамдық Git репозиторийін құрды[16] құрамында моб филиалы бар[17] мұнда көптеген үлестер, соның ішінде ортақ құрастыру, кросс-компиляторлар және SELinux үйлесімділігі қосылды. Грищканың GIT репозиторийі кейінірек ресми TCC репозиторийіне айналды (Фабрис Беллардтың Саванна жобалық парағымен байланыстырылды) [18]).

Ағымдағы күй

2017 жылғы желтоқсандағы жағдай бойынша TCC-тің ресми тарату тізімі[19] және Git ресми репозиторийі (Фабрис Беллардтың Саванна жобасы бетімен байланыстырылған)[20]) көптеген әзірлеушілер мен қызығушылық танытқан пайдаланушылардың белсенді талқылауы мен дамуын көрсетеді. 2017 жылдың желтоқсанында grischka тарату тізімінде TCC 0.9.27 нұсқасы шыққанын жариялады [21].

Сондай-ақ қараңыз

Әдебиеттер тізімі

  1. ^ Tiny C компиляторына арналған анықтамалық құжаттама қол жеткізілген 2008-08-07
  2. ^ Жоба бойынша Тізім жасау күрделі типтер - бұл C99 жетіспейтін жалғыз мүмкіндігі. Ұзындықтың массивтері TCC 0.9.26 қосылды
  3. ^ Tiny C Compiler басты беті
  4. ^ Глокнер, Даниэль. Re: Tinycc-devel (тақырып жоқ), 8 қыркүйек, 2006 ж.
  5. ^ а б гришка, TCC бойынша GCC (кейбір түзетулер), 29 қыркүйек 2005 ж
  6. ^ TCCBOOT
  7. ^ Уилер, Дэвид А. Әр түрлі қос компиляция арқылы сенімге қарсы әрекет. ACSAC.
  8. ^ tinycc-devel (жіп)
  9. ^ Cinpy Мұрағатталды 2008-11-20 Wayback Machine
  10. ^ JavaScript Linux
  11. ^ Super Micro-Max шахматы
  12. ^ Беллард, Фабрис. Мөлдір Tiny C компиляторы
  13. ^ Фабрис Беллардтың СТК-де жұмысты тоқтату туралы хабарламасы көрсетілген ТКК-нің басты бетіндегі архивтің ең көне суреті.
  14. ^ Дэйв Додждың бейресми tcc патчтар жиынтығы Мұрағатталды 2007-03-31 Wayback Machine
  15. ^ Debian және kfreebsd төменгі ағысындағы патчтар
  16. ^ гришка, Tcc үшін қоғамдық Git хостингі
  17. ^ гришка, tcc үшін моб филиалы
  18. ^ Саванна жобасының ресми парағы
  19. ^ Ресми TCC тарату тізімі
  20. ^ Ресми Git бастапқы коды
  21. ^ Ресми TCC тарату тізімі, 2017-12-27 жазба

Сыртқы сілтемелер