петак, 26 априла, 2024
Сам свој мајстор

Егзотични Ц компајлери

Аутор: Стефан Ножинић

Доста нас који се бавимо програмирањем, па и крајњи корисници, знају шта је компајлер и чему он служи. Када говоримо о компајлерима на Линуксу, већина ће прво помислити на GNU C компајлер или на Clang који се много користи на BSD системима, али они никако нису једини. Има их још доста које вреди поменути.

За почетак да кажемо по чему се GCC и CLang толико издвајају од конкуренције.

За већину случајева може се рећи да лиценца и функционалност играју главну улогу у вагању предности и одабиру. GCC је GNU-ов компајлер и може се портовати на више различитих платформи. Поред C језика има подршку за још неколико, на пример C++ , Ada… Добро је документован и веома једноставан за коришћење. Clang је развијен под BSD лиценцом и најчешће се користи на BSD системима. Такође подржава више језика поред C-а. Најчешће се на неком слободном систему користи GCC или Clang.

Amsterdam Compiler Kit

Amsterdam Compiler Kit односно ACK је native MINIX-ов компајлер тo јест toolchain. MINIX се може назвати претком данашњег Линукса. ACK је веома „лаган“. Аутори овог компајлера су Andrew Tanenbaum и Ceriel Jacobs. У почетку развоја овај је компајлер био затвореног кода, све до 2003, када је објављен под BSD лиценцом. Компајлира C, Pascal, BASIC, Modula-2 и Occam код. Занимљиво је да је ово један од компајлера који нема верзију за Windows.

Ch

Ch је компајлер који је портован на много платформи, укључујући и Линукс. Започео га је Harry H. Cheng. Дизајниран је да буде као својеврстан интерпретер за C/C++, односно да омогући писање скрипти у C/C++ синтакси. Дакле, ово није прави компајлер, али је веома користан алат. Нажалост, овај компајлер није ни под једном open source лиценцом. Међутим, поред комерцијалне професионалне верзије постоји и бесплатна верзија за студенте. Ако бисте волели shell у коме можете куцкати C/C++ код, онда ће вам се овако нешто веома свидети.

LCC

LCC („Local C Compiler“, „Little C Compiler“) је мали компајлер од око 20 000 линија кода. Доступан је за бесплатну употребу али не спада у групу „free“ софтвера. Ово значи да га можете бесплатно користити али његов изворни код (енгл. source code) није објављен јавно и не можете имати увид у изворни код као ни мењати исти. Предности овог компајлера јесу добра документација и једноставност коришћења.

Морамо напоменути да је овај компајлер много лакше портовати на неку нову платформу него GCC, али је GCC ипак бољи по броју оптимизација.

Open64

Open64 односно Pro64, како му је био и први назив, је компајлер оптимизован за x86_64 архитектуру. Прво издање датира из 2000. године под GPL лиценцом. Тренутна верзија је 5.0. Предности овог компајлера јесу те да садржи много „интерпроцедуралних“ оптимизација. Иако је дизајниран пре свега за x86_64 платформу, подржава и i386 и IA-64 архитектуре.

Portable C Compiler (PCC)

Један од најстаријих C компајлера. Написао га је Stephen C. Johnson средином 70-тих година прошлог века. Један је од првих компајлера који су могли компајлирати излазни програм за више архитектура. Дуго је био у старим верзијама BSD-а све док 1994. није био замењен са GCC-ом у 4.4 BSD. И данас се PCC развија под BSD лиценцом, а користи се у OpenBSD-у и другим системима. Програмери упозоравају да PCC још није спреман да замени GCC и да то за сада није приоритет; међутим, важно је напоменути да PCC може компајлирати x86 OpenBSD кернел слику. У сваком случају, овај компајлер вреди пробати јер има дугу и занимљиву прошлост.

Tiny C Compiler

Tiny C Compiler (TCC) је један од најлакших и најмањих компајлера. Осмишљен је од стране Fabrice Bellarda као x86 и x86_64 компајлер за споре компјутере. Доступан је под GNU Lesser General Public лиценцом (LGPL). Занимљиво је рећи да је TCC толико мали да његова x86 извршна датотека заузима тек око 100 kB меморије. Ево још мало поређења TCC-а и GCC-а: Lynx прегледач се 9 пута брже компајлира са TCC-ом. Ово је велика разлика, зар не?

Лоша страна TCC-а је та што је, упркос његовој великој брзини компајлирања, број отпимизација мањи у поређењу са GCC-ом. То значи да ће програм компајлиран TCC-ом радити видно спорије него исти програм компајлиран GCC-ом.

Дакле, закључак је: ако вам треба да брзо компајлирате програм ради теста онда користите TCC, а ако вам треба програм за свакодневни рад онда користите GCC.