Кленг (енгл. Clang, /ˈklæŋ/)[3] преводилац је предњег дела за следеће програмске језике: C, C++, Objective-C и Objective-C++. Користи ВМНР као "задњи део" и део је ВМНР иклуса од ВМНР 2.6.

Кленг
Програмер(и)Крис Латнер и други
Епл и други
Стабилно издање
3.7[1]/1. септембар, / 2015.; пре 9 година (2015)
Репозиторијум Уреди на Википодацима
Написан уC++
Оперативни системUnix-like
ПлатформаКрст платформа
ТипПрограмски преводилац
ЛиценцаИлиноис Универзитет /НЦСА отворена лиценца[2]
Веб-сајтhttp://clang.llvm.org/

Кленг је израђен да би заменио ГЦЦ. Отвореног је типа;[4] развио га је Епл, мада су у његовом стварању учествовали и Мајкрософт, Гугл, АРМ, Сони и Интел. Код је доступан по лиценци Универзитета у Илиноису; то је слободна софтвер лиценца

Пројекат Кленг садржи и предњи део Кленга и више врста кодова за статичко анализирање.[5]

Позадина

уреди

Епл је 2005. проширио употребу ВМНР на виже комерцијалних оперативних система,[6] у које се убрајају и опрема за развој иФона и Икскода 3.1.

Једна од првих примена ВМНР-а је била у OpenGL компајлеру за X оперативни систем. OpenGL је помоћу ВМНР конвертовао своје команде у основне команде за графичко обрађивање јединица (ГПУ) које не подржавају одређене карактеристике. То је дозволило Еплу да лансира подршку за све OpenGL апликације за програмирање интерфејса (АПИ) за рачунаре који користе Интелов ГМА чипсет, повећавајући њихове перформансе.[7]За довољно способан графички процесор код се преводи тако да максимално искористи основни хардвер, али ако рачунар користи ГМА, ВМНР преводи код у подпрограм како би било сигурно да ће радити.

ВМНР је у почетку користио предњи део ГЦЦ-а, али је то стварало проблеме у развоју, како ВМНР-у тако и Еплу. Изворни код ГЦЦ-а је превелик и незграпан систем да би се користио, чак је један од твораца ГЦЦ-а за њега прокоментарисао да "није нилски коњ за балет".[8]

Епл софтвер је углавном базиран на Објектном-Ц-у, али предњи део овог програмског језика у ГЦЦ-у се баш и не развија. Такође ГЦЦ није намењен за Епл.[9] Коначно, ГЦЦ је ГПЛ лиценцирана верзија 3, који захтева од програмера који дистрибуирају екстензије за (или модификоване верзије) ГЦЦ да њихов изворни код буде доступан, док ЛЛВМ има БСД-олику лиценцу[10] која дозвољава укључење извора у власнички софтвер.

Епл је ипак одлучио да направи нови предњи део компајлера, који ће подржавати C, Објектни-Ц и C++.[9]Пројекат "Кленг" је отвореног кода од јула 2007.[11]

Дизајн

уреди

Кленг је намењен да ради искључиво на ВМНР бази.[10] Комбинација Кленга и ВМНР даје велики избор алатки које вам омогућавају да у потпуности замените ГЦЦ конструкцију података. Кленг је лако уградити у апликације, као и остатак ВМНР-а, зато сто је његова конструкција слична библиотеци. То је један од разлога зашто је све везано за OpenGL израђено уз помоћ Кленга и ВМНР-а.

Један од примарних циљева Кленга јесте да боље подржи постепене преводилаце и да буду ближе повезани у интегрисаној развојној околини система. Супротно томе, ГЦЦ је направљен да ради на класичан преведи-повежи-дешифруј систем и иако нуди разне подршке и опције превођења, није баш лако укомпоновати га тако да ради са другим алаткама. На пример, ГЦЦ користи корак "фолд" која је кључ у целом процесу превођења кода, и који има тенденцију да преведе код у нешто што скоро уопште не личи на оригинални код. Ако се за време овог корака пронађе грешка било би скоро немогуће вратити тај исти код у почетно стање превођења. Поред тога, произвођачи користе ГЦЦ стек унутар ИДЕа и користе посебне алате за индексирање кода, да би обезбедили функције као што су синтаксно истицање и самозавршавање.

Кленг је дизајниран тако да у току превођења кода запамти више информација од ГЦЦ-а, и да у потпуности сачува облик примарног кода. Циљ овога је лакше детектовање грешака. Пријављивање грешака би такође требало бити детаљније и јасније, као и препознатљиво за рачунар, како би се грешке изоловале за време превођења кода. Модуларни дизајн компајлера као опцију нуди индексирање изворног кода, проверу синтаксе, и друге карактеристике које су најчешће повезане са апликацијом за брзи развој система. Стабло извођењаподржава дефакторисање кода, при томе текс не губи своју форму никад.

Кленг је модуларизован, одлично документован, и скоро у потпуности базиран на библиотекама замењивих линкова. - за разлику од изворног кода модула који се преводи у времену превођења. У неким случајевима библиотеке имају више верзија и могу се мењати из рантајма; на пример анализатор долази са верзијом која нуди мерење перформанси процеса превођења.

Кленг је преводилац само за C и сличне C језике. Он не нуди преводилачке горње крајеве за друге језицима осим C, C++, Објектног-Ц, и Објектног-C++. За остале језике, укључујући Јаву, Фортран и Ада, ВМНР остаје зависан од ГЦЦ. У многим случајевима, Кленг може да се користи и као замена за ГЦЦ по потреби, без других ефеката на ланац алаткиу целини. Она подржава већину најчешће коришћених ГЦЦ опција.

Перформансе и компатибилност са ГЦЦ

уреди

Кленг је дизајниран да буде веома компатибилана са ГЦЦ.[12] Интерфејс командне линије Кленга су такође сличне са Кленг је дизајнирана да буде веома компатибилана са ГЦЦ као и многе заставе и опције. Кленг спроводи многе ГНУ језике екстензије и омогућава им да буду по дефаулту. Кленг спроводи многе ГЦЦ преводе битне искључиво за компатибилност. На пример, иако Кленг спроводи атомски битне преводе који одговарају управо са атомским Ц11, такође спроводи ГЦЦ-ов је __sync_* који је битан за компатибилност са ГЦЦ и libstdc++. Кленг такође одржава АБИ компатибилност са ГЦЦ-генерисаним објектом кода. У пракси Кленг се често може користити као замена за ГЦЦ.

Кленг творци раде на томе да смање количину меморије која се користи и да повећају брзину превођења и слагања информација. 2007 године објавили су да је Кленг дупло брже преводиo информације од ГЦЦ-а уз помоћ своје Карбон библиотеке, користећи при томе само шестину меморије која је потребна ГЦЦ-у за исту операцију.[13] Међутим од 2011. године напредак је стао.[14][15] До средине 2014.године перформансе система извршавања су се толико побољшале да Кленг утростручио своје оцене, али је ипак ГЦЦ у већини случајева имао више оцене.[16]

Иако још увек постоје неколико тестова у којима учинак Кленг програмског превођења и даље заостаје за перформансама ГЦЦ-програмског превођења, у великим факторима (до 5.5х)[16] , и даље се преноси да Кленг "наставља да се веома активно развија, "а нада је да ће и даље напредовати у будућности.[14]

Статус историје

уреди

Ова табела представља само значајне кораке и обајвљивање истих у историји Кленг преводиоца.

ДатумНајважније
11. јул 2007Кленг је објављен под отвореном лиценцом
25. фебруар 2009Кленг/LLVM су стању да преводе радно FreeBSD језгро.[17][18]
16. март 2009Кленг/LLVM су стању да преводе радно DragonFly BSD језгро.[19][20]
23. октобар 2009Кленг 1.0 пуштена уз LLVM 2.6 по први пут.
децембар 2009Стварање кода за С и Објецтиве-С достиже призводни квалитет (подршка за C++ и Објецтиве-C++ и даље је непотпуна). Кленг C++ је у стању да анализира GCC 4.2 libstdc++ и генерише радни код за нетривијалне програме[10] и био у стању да се сам преведе.[21]
2. фебруар 2010Кленг само-хостинг.[22]
20. фебруар 2010Изворни код за ХеленОС је модификован да се успешно састави са Кленг, и прошао све језгра и кориснићке просторе регресије тестове на IA-32.[23]
20. мај 2010Најновија верзија Кленг успешно је изградио Boost C++ библиотеке, и прошао скоро све тестове.[24]
10. јун 2010Кленг / LLVM је постао саставни део FreeBSD (Стандардно преводилац је и даље GCC)[25]
25. октобар 2010Кленг / LLVM у стању да преведе радно модификовано Линук језгро.[26]
јануар 2011Припремни радови завршени за подршку нацрт, C++0x standard, са неколико нацрта нових функција је подржана у развоју верзији Јека.[27][28]
10. фебруар 2011Кленг у стању да састави радно Жариште Јава Виртуелне Машине[14]
19. јануар 2012Кленг постаје опциони компонент у NetBSD крст-платформи грађења система (GCC и даље подразумеван)[29]
28. фебруар 2012Кленг 3.0 у стању да обновими нешто висе од 91% Debian архиве[30]
29. фебруар 2012Кленг постаје подразумевани превоилац у MINIX 3[31]
12. мај 2012Кленг / LLVM је најављује да ће заменити GCC у FreeBSD[32]
5. новембар 2012Кленг постаје подразумевани компајлер у FreeBSD 10.x[33]
18. фебруар 2013Кленг / LLVM у стању да преведе радни модификовано Андроид Линукс језгро за Нексус 7.[34][35]
19. април 2013Кленг C++ 11 особина је потпуна.[36]
6. новембар 2013Кленг C++ 14 особина је потпуна.[37]
11. септембар 2014Кленг 3.5 може да реизгради 94,3% Дебијан архиве. Проценат неуспеха је пао на 1,2% по верзији од јануара 2013. Углавном због повећане компатибилности са ГЦЦ-ом.
Октобар 2016Кленг постаје фабрички компајлер за Андроид.
13. март 2017.Кленг 4.0 излази
26. јул 2017.Кленг постаје фабрички комапјлер за ОпенБСД 6.2
7. септембар 2017.Кленг 5.0 излази
5. март 2018.Кроум за Виндоус користи Јеку
8. март 2018.Кленг 6.0 излази

Види још

уреди

Референце

уреди

Спољашње везе

уреди