Kleng (engl. Clang, /ˈklæŋ/)[3] prevodilac je prednjeg dela za sledeće programske jezike: C, C++, Objective-C i Objective-C++. Koristi VMNR kao "zadnji deo" i deo je VMNR iklusa od VMNR 2.6.

Kleng
Programer(i)Kris Latner i drugi
Epl i drugi
Stabilno izdanje
3.7[1]/1. septembar, / 2015. god.; pre 9 godina (2015)
Repozitorijum Uredi na Vikipodacima
Napisan uC++
Operativni sistemUnix-like
PlatformaKrst platforma
TipProgramski prevodilac
LicencaIlinois Univerzitet /NCSA otvorena licenca[2]
Veb-sajthttp://clang.llvm.org/

Kleng je izrađen da bi zamenio GCC. Otvorenog je tipa;[4] razvio ga je Epl, mada su u njegovom stvaranju učestvovali i Majkrosoft, Gugl, ARM, Soni i Intel. Kod je dostupan po licenci Univerziteta u Ilinoisu; to je slobodna softver licenca

Projekat Kleng sadrži i prednji deo Klenga i više vrsta kodova za statičko analiziranje.[5]

Pozadina uredi

Epl je 2005. proširio upotrebu VMNR na viže komercijalnih operativnih sistema,[6] u koje se ubrajaju i oprema za razvoj iFona i Ikskoda 3.1.

Jedna od prvih primena VMNR-a je bila u OpenGL kompajleru za X operativni sistem. OpenGL je pomoću VMNR konvertovao svoje komande u osnovne komande za grafičko obrađivanje jedinica (GPU) koje ne podržavaju određene karakteristike. To je dozvolilo Eplu da lansira podršku za sve OpenGL aplikacije za programiranje interfejsa (API) za računare koji koriste Intelov GMA čipset, povećavajući njihove performanse.[7] Za dovoljno sposoban grafički procesor kod se prevodi tako da maksimalno iskoristi osnovni hardver, ali ako računar koristi GMA, VMNR prevodi kod u podprogram kako bi bilo sigurno da će raditi.

VMNR je u početku koristio prednji deo GCC-a, ali je to stvaralo probleme u razvoju, kako VMNR-u tako i Eplu. Izvorni kod GCC-a je prevelik i nezgrapan sistem da bi se koristio, čak je jedan od tvoraca GCC-a za njega prokomentarisao da "nije nilski konj za balet". [8]

Epl softver je uglavnom baziran na Objektnom-C-u, ali prednji deo ovog programskog jezika u GCC-u se baš i ne razvija. Takođe GCC nije namenjen za Epl.[9] Konačno, GCC je GPL licencirana verzija 3, koji zahteva od programera koji distribuiraju ekstenzije za (ili modifikovane verzije) GCC da njihov izvorni kod bude dostupan, dok LLVM ima BSD-oliku licencu[10] koja dozvoljava uključenje izvora u vlasnički softver.

Epl je ipak odlučio da napravi novi prednji deo kompajlera, koji će podržavati C, Objektni-C i C++.[9] Projekat "Kleng" je otvorenog koda od jula 2007.[11]

Dizajn uredi

Kleng je namenjen da radi isključivo na VMNR bazi.[10] Kombinacija Klenga i VMNR daje veliki izbor alatki koje vam omogućavaju da u potpunosti zamenite GCC konstrukciju podataka. Kleng je lako ugraditi u aplikacije, kao i ostatak VMNR-a, zato sto je njegova konstrukcija slična biblioteci. To je jedan od razloga zašto je sve vezano za OpenGL izrađeno uz pomoć Klenga i VMNR-a.

Jedan od primarnih ciljeva Klenga jeste da bolje podrži postepene prevodilace i da budu bliže povezani u integrisanoj razvojnoj okolini sistema. Suprotno tome, GCC je napravljen da radi na klasičan prevedi-poveži-dešifruj sistem i iako nudi razne podrške i opcije prevođenja, nije baš lako ukomponovati ga tako da radi sa drugim alatkama. Na primer, GCC koristi korak "fold" koja je ključ u celom procesu prevođenja koda, i koji ima tendenciju da prevede kod u nešto što skoro uopšte ne liči na originalni kod. Ako se za vreme ovog koraka pronađe greška bilo bi skoro nemoguće vratiti taj isti kod u početno stanje prevođenja. Pored toga, proizvođači koriste GCC stek unutar IDEa i koriste posebne alate za indeksiranje koda, da bi obezbedili funkcije kao što su sintaksno isticanje i samozavršavanje.

Kleng je dizajniran tako da u toku prevođenja koda zapamti više informacija od GCC-a, i da u potpunosti sačuva oblik primarnog koda. Cilj ovoga je lakše detektovanje grešaka. Prijavljivanje grešaka bi takođe trebalo biti detaljnije i jasnije, kao i prepoznatljivo za računar, kako bi se greške izolovale za vreme prevođenja koda. Modularni dizajn kompajlera kao opciju nudi indeksiranje izvornog koda, proveru sintakse, i druge karakteristike koje su najčešće povezane sa aplikacijom za brzi razvoj sistema. Stablo izvođenja podržava defaktorisanje koda, pri tome teks ne gubi svoju formu nikad.

Kleng je modularizovan, odlično dokumentovan, i skoro u potpunosti baziran na bibliotekama zamenjivih linkova. - za razliku od izvornog koda modula koji se prevodi u vremenu prevođenja. U nekim slučajevima biblioteke imaju više verzija i mogu se menjati iz rantajma; na primer analizator dolazi sa verzijom koja nudi merenje performansi procesa prevođenja.

Kleng je prevodilac samo za C i slične C jezike. On ne nudi prevodilačke gornje krajeve za druge jezicima osim C, C++, Objektnog-C, i Objektnog-C++. Za ostale jezike, uključujući Javu, Fortran i Ada, VMNR ostaje zavisan od GCC. U mnogim slučajevima, Kleng može da se koristi i kao zamena za GCC po potrebi, bez drugih efekata na lanac alatkiu celini. Ona podržava većinu najčešće korišćenih GCC opcija.

Performanse i kompatibilnost sa GCC uredi

Kleng je dizajniran da bude veoma kompatibilana sa GCC.[12] Interfejs komandne linije Klenga su takođe slične sa Kleng je dizajnirana da bude veoma kompatibilana sa GCC kao i mnoge zastave i opcije. Kleng sprovodi mnoge GNU jezike ekstenzije i omogućava im da budu po defaultu. Kleng sprovodi mnoge GCC prevode bitne isključivo za kompatibilnost. Na primer, iako Kleng sprovodi atomski bitne prevode koji odgovaraju upravo sa atomskim C11, takođe sprovodi GCC-ov je __sync_* koji je bitan za kompatibilnost sa GCC i libstdc++. Kleng takođe održava ABI kompatibilnost sa GCC-generisanim objektom koda. U praksi Kleng se često može koristiti kao zamena za GCC.

Kleng tvorci rade na tome da smanje količinu memorije koja se koristi i da povećaju brzinu prevođenja i slaganja informacija. 2007 godine objavili su da je Kleng duplo brže prevodio informacije od GCC-a uz pomoć svoje Karbon biblioteke, koristeći pri tome samo šestinu memorije koja je potrebna GCC-u za istu operaciju.[13] Međutim od 2011. godine napredak je stao.[14][15] Do sredine 2014.godine performanse sistema izvršavanja su se toliko poboljšale da Kleng utrostručio svoje ocene, ali je ipak GCC u većini slučajeva imao više ocene.[16]

Iako još uvek postoje nekoliko testova u kojima učinak Kleng programskog prevođenja i dalje zaostaje za performansama GCC-programskog prevođenja, u velikim faktorima (do 5.5h)[16] , i dalje se prenosi da Kleng "nastavlja da se veoma aktivno razvija, "a nada je da će i dalje napredovati u budućnosti.[14]

Status istorije uredi

Ova tabela predstavlja samo značajne korake i obajvljivanje istih u istoriji Kleng prevodioca.

Datum Najvažnije
11. jul 2007 Kleng je objavljen pod otvorenom licencom
25. februar 2009 Kleng/LLVM su stanju da prevode radno FreeBSD jezgro.[17][18]
16. mart 2009 Kleng/LLVM su stanju da prevode radno DragonFly BSD jezgro.[19][20]
23. oktobar 2009 Kleng 1.0 puštena uz LLVM 2.6 po prvi put.
decembar 2009 Stvaranje koda za S i Objective-S dostiže prizvodni kvalitet (podrška za C++ i Objective-C++ i dalje je nepotpuna). Kleng C++ je u stanju da analizira GCC 4.2 libstdc++ i generiše radni kod za netrivijalne programe[10] i bio u stanju da se sam prevede.[21]
2. februar 2010 Kleng samo-hosting.[22]
20. februar 2010 Izvorni kod za HelenOS je modifikovan da se uspešno sastavi sa Kleng, i prošao sve jezgra i korisnićke prostore regresije testove na IA-32.[23]
20. maj 2010 Najnovija verzija Kleng uspešno je izgradio Boost C++ biblioteke, i prošao skoro sve testove.[24]
10. jun 2010 Kleng / LLVM je postao sastavni deo FreeBSD (Standardno prevodilac je i dalje GCC)[25]
25. oktobar 2010 Kleng / LLVM u stanju da prevede radno modifikovano Linuk jezgro.[26]
januar 2011 Pripremni radovi završeni za podršku nacrt, C++0x standard, sa nekoliko nacrta novih funkcija je podržana u razvoju verziji Jeka.[27][28]
10. februar 2011 Kleng u stanju da sastavi radno Žarište Java Virtuelne Mašine[14]
19. januar 2012 Kleng postaje opcioni komponent u NetBSD krst-platformi građenja sistema (GCC i dalje podrazumevan)[29]
28. februar 2012 Kleng 3.0 u stanju da obnovimi nešto vise od 91% Debian arhive[30]
29. februar 2012 Kleng postaje podrazumevani prevoilac u MINIX 3[31]
12. maj 2012 Kleng / LLVM je najavljuje da će zameniti GCC u FreeBSD[32]
5. novembar 2012 Kleng postaje podrazumevani kompajler u FreeBSD 10.x[33]
18. februar 2013 Kleng / LLVM u stanju da prevede radni modifikovano Android Linuks jezgro za Neksus 7.[34][35]
19. april 2013 Kleng C++ 11 osobina je potpuna.[36]
6. novembar 2013 Kleng C++ 14 osobina je potpuna.[37]
11. septembar 2014 Kleng 3.5 može da reizgradi 94,3% Debijan arhive. Procenat neuspeha je pao na 1,2% po verziji od januara 2013. Uglavnom zbog povećane kompatibilnosti sa GCC-om.
Oktobar 2016 Kleng postaje fabrički kompajler za Android.
13. mart 2017. Kleng 4.0 izlazi
26. jul 2017. Kleng postaje fabrički komapjler za OpenBSD 6.2
7. septembar 2017. Kleng 5.0 izlazi
5. mart 2018. Kroum za Vindous koristi Jeku
8. mart 2018. Kleng 6.0 izlazi

Vidi još uredi

Reference uredi

  1. ^ Download LLVM releases
  2. ^ LLVM License, Pristupljeno 24. 07. 2014 
  3. ^ Christopher, Eric (3 July 2008). "simply wonder pronunciation of Clang".
  4. ^ Clang "Getting started" instructions, Clang.llvm.org, Pristupljeno 18. 09. 2012 
  5. ^ „Clang Static Analyzer”. LLVM. Pristupljeno 3. 09. 2009. 
  6. ^ Treat, Adam (19 February 2005). "mkspecs and patches for LLVM compile of Qt4" Arhivirano na sajtu Wayback Machine (4. oktobar 2011).
  7. ^ Lattner, Chris (25. 05. 2007). LLVM for OpenGL and other stuff (Slides). LLVM Developers' Meeting. 
  8. ^ Zadeck, Kenneth (19 November 2005).
  9. ^ a b Naroff, Steve (25. 05. 2007). New LLVM C Front-end (Slides). LLVM Developers' Meeting. 
  10. ^ a b v Clang team, clang: a C language family frontend for LLVM
  11. ^ Lattner, Chris (11 July 2007).
  12. ^ Clang - Features and Goals: GCC Compatibility, 15. 04. 2013 
  13. ^ Clang - Features and Goals: Fast compiles and Low Memory Use, 2007 
  14. ^ a b v Simonis, Volker (10. 02. 2011). „Compiling the HotSpot VM with Clang”. Arhivirano iz originala 30. 04. 2012. g. Pristupljeno 13. 02. 2011. „'While the overall GCC compatibility is excellent and the compile times are impressive, the performance of the generated code is still lacking behind a recent GCC version. ' 
  15. ^ „Benchmarking LLVM & Clang Against GCC 4.5”. Phoronix. 21. 04. 2010. Pristupljeno 13. 02. 2011. „'Binaries from LLVM-GCC and Clang both struggled to compete with GCC 4.5.0 in the timed HMMer benchmark of a Pfam database search. LLVM-GCC and Clang were about 23% slower(...)Though LLVM / Clang isn't the performance champion at this point, both components continue to be under very active development and there will hopefully be more news to report in the coming months' 
  16. ^ a b „GCC 4.9 VS. LLVM CLANG 3.5 LINUX COMPILER BENCHMARKS”. OpenBenchmarking.org. 14. 04. 2014. Pristupljeno 25. 06. 2014. 
  17. ^ Divacky, Roman. „[ANNOUNCE] clang/llvm can compile booting FreeBSD kernel on i386/amd64”. 
  18. ^ Building FreeBSD with Clang, Wiki.freebsd.org, 24. 08. 2012, Pristupljeno 18. 09. 2012 
  19. ^ Hornung, Alex. „llvm/clang once more”. 
  20. ^ Clang, DragonFlyBSD, Pristupljeno 18. 09. 2012 
  21. ^ „Clang can compile LLVM and Clang”. LLVM Project Blog. 
  22. ^ „Clang Successfully Self-Hosts”. LLVM Project Blog. 
  23. ^ „HelenOS mainline changeset head,294”. Arhivirano iz originala 30. 04. 2012. g. Pristupljeno 23. 11. 2015. 
  24. ^ Gregor, Doug. „Clang++ Builds Boost!”. LLVM Project Blog. 
  25. ^ Davis, Brad. „FreeBSD Status Reports April - June, 2010”. 
  26. ^ Clang builds a working Linux Kernel (Boots to RL5 with SMP, networking and X, self hosts), Lists.cs.uiuc.edu, Arhivirano iz originala 07. 09. 2015. g., Pristupljeno 18. 09. 2012 
  27. ^ Gregor, Douglas (26. 01. 2011). „New C++0x feature support in Clang” (Lista adresa). Arhivirano iz originala 30. 01. 2011. g. Pristupljeno 29. 01. 2011. 
  28. ^ „C++ and C++'0x Support in Clang”. LLVM. 
  29. ^ Sonnenberger, Jörg (19. 01. 2012). „Status of NetBSD and LLVM”. Arhivirano iz originala 09. 04. 2014. g. Pristupljeno 26. 02. 2014. 
  30. ^ Ledru, Sylvestre. „Rebuild of the Debian archive with clang”. 
  31. ^ „Official Minix 3 website: News”. Arhivirano iz originala 28. 11. 2015. g. Pristupljeno 23. 11. 2015. 
  32. ^ Gerzo, Daniel (12. 05. 2012). „FreeBSD Quarterly Status Report January-March, 2012” (Lista adresa). Pristupljeno 14. 05. 2012. 
  33. ^ Davis, Brooks (5. 11. 2012). „HEADS UP: Clang now the default on x86” (Lista adresa). Pristupljeno 7. 11. 2012. 
  34. ^ Webster, Behan (18. 02. 2013). „LLVMLinux: Compiling Android with LLVM” (PDF). Arhivirano iz originala (PDF) 12. 05. 2014. g. Pristupljeno 11. 05. 2013. 
  35. ^ Tinti, Vinicius (17. 03. 2013). „LLVMLinux: Nexus 7”. Arhivirano iz originala 11. 06. 2014. g. Pristupljeno 11. 05. 2013. 
  36. ^ Du Toit, Stefanus. „Clang is C++11 feature complete as of *just now*!”. 
  37. ^ „[llvm-project] Revision 194194”. Arhivirano iz originala 30. 01. 2017. g. Pristupljeno 23. 11. 2015. 

Spoljašnje veze uredi