četvrtak, 18 aprila, 2024
Sam svoj majstor

Egzotični C kompajleri

Autor: Stefan Nožinić

Dosta nas koji se bavimo programiranjem, pa i krajnji korisnici, znaju šta je kompajler i čemu on služi. Kada govorimo o kompajlerima na Linuksu, većina će prvo pomisliti na GNU C kompajler ili na Clang koji se mnogo koristi na BSD sistemima, ali oni nikako nisu jedini. Ima ih još dosta koje vredi pomenuti.

Za početak da kažemo po čemu se GCC i CLang toliko izdvajaju od konkurencije.

Za većinu slučajeva može se reći da licenca i funkcionalnost igraju glavnu ulogu u vaganju prednosti i odabiru. GCC je GNU-ov kompajler i može se portovati na više različitih platformi. Pored C jezika ima podršku za još nekoliko, na primer C++ , Ada… Dobro je dokumentovan i veoma jednostavan za korišćenje. Clang je razvijen pod BSD licencom i najčešće se koristi na BSD sistemima. Takođe podržava više jezika pored C-a. Najčešće se na nekom slobodnom sistemu koristi GCC ili Clang.

Amsterdam Compiler Kit

Amsterdam Compiler Kit odnosno ACK je native MINIX-ov kompajler to jest toolchain. MINIX se može nazvati pretkom današnjeg Linuksa. ACK je veoma „lagan“. Autori ovog kompajlera su Andrew Tanenbaum i Ceriel Jacobs. U početku razvoja ovaj je kompajler bio zatvorenog koda, sve do 2003, kada je objavljen pod BSD licencom. Kompajlira C, Pascal, BASIC, Modula-2 i Occam kod. Zanimljivo je da je ovo jedan od kompajlera koji nema verziju za Windows.

Ch

Ch je kompajler koji je portovan na mnogo platformi, uključujući i Linuks. Započeo ga je Harry H. Cheng. Dizajniran je da bude kao svojevrstan interpreter za C/C++, odnosno da omogući pisanje skripti u C/C++ sintaksi. Dakle, ovo nije pravi kompajler, ali je veoma koristan alat. Nažalost, ovaj kompajler nije ni pod jednom open source licencom. Međutim, pored komercijalne profesionalne verzije postoji i besplatna verzija za studente. Ako biste voleli shell u kome možete kuckati C/C++ kod, onda će vam se ovako nešto veoma svideti.

LCC

LCC („Local C Compiler“, „Little C Compiler“) je mali kompajler od oko 20 000 linija koda. Dostupan je za besplatnu upotrebu ali ne spada u grupu „free“ softvera. Ovo znači da ga možete besplatno koristiti ali njegov izvorni kod (engl. source code) nije objavljen javno i ne možete imati uvid u izvorni kod kao ni menjati isti. Prednosti ovog kompajlera jesu dobra dokumentacija i jednostavnost korišćenja.

Moramo napomenuti da je ovaj kompajler mnogo lakše portovati na neku novu platformu nego GCC, ali je GCC ipak bolji po broju optimizacija.

Open64

Open64 odnosno Pro64, kako mu je bio i prvi naziv, je kompajler optimizovan za x86_64 arhitekturu. Prvo izdanje datira iz 2000. godine pod GPL licencom. Trenutna verzija je 5.0. Prednosti ovog kompajlera jesu te da sadrži mnogo „interproceduralnih“ optimizacija. Iako je dizajniran pre svega za x86_64 platformu, podržava i i386 i IA-64 arhitekture.

Portable C Compiler (PCC)

Jedan od najstarijih C kompajlera. Napisao ga je Stephen C. Johnson sredinom 70-tih godina prošlog veka. Jedan je od prvih kompajlera koji su mogli kompajlirati izlazni program za više arhitektura. Dugo je bio u starim verzijama BSD-a sve dok 1994. nije bio zamenjen sa GCC-om u 4.4 BSD. I danas se PCC razvija pod BSD licencom, a koristi se u OpenBSD-u i drugim sistemima. Programeri upozoravaju da PCC još nije spreman da zameni GCC i da to za sada nije prioritet; međutim, važno je napomenuti da PCC može kompajlirati x86 OpenBSD kernel sliku. U svakom slučaju, ovaj kompajler vredi probati jer ima dugu i zanimljivu prošlost.

Tiny C Compiler

Tiny C Compiler (TCC) je jedan od najlakših i najmanjih kompajlera. Osmišljen je od strane Fabrice Bellarda kao x86 i x86_64 kompajler za spore kompjutere. Dostupan je pod GNU Lesser General Public licencom (LGPL). Zanimljivo je reći da je TCC toliko mali da njegova x86 izvršna datoteka zauzima tek oko 100 kB memorije. Evo još malo poređenja TCC-a i GCC-a: Lynx pregledač se 9 puta brže kompajlira sa TCC-om. Ovo je velika razlika, zar ne?

Loša strana TCC-a je ta što je, uprkos njegovoj velikoj brzini kompajliranja, broj otpimizacija manji u poređenju sa GCC-om. To znači da će program kompajliran TCC-om raditi vidno sporije nego isti program kompajliran GCC-om.

Dakle, zaključak je: ako vam treba da brzo kompajlirate program radi testa onda koristite TCC, a ako vam treba program za svakodnevni rad onda koristite GCC.