Кленг (енгл. 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 излази

Види још уреди

Референце уреди

  1. ^ Download LLVM releases
  2. ^ LLVM License, Приступљено 24. 07. 2014 
  3. ^ Christopher, Eric (3 July 2008). "simply wonder pronunciation of Clang".
  4. ^ Clang "Getting started" instructions, Clang.llvm.org, Приступљено 18. 09. 2012 
  5. ^ „Clang Static Analyzer”. LLVM. Приступљено 3. 09. 2009. 
  6. ^ Treat, Adam (19 February 2005). "mkspecs and patches for LLVM compile of Qt4" Архивирано на сајту Wayback Machine (4. октобар 2011).
  7. ^ Lattner, Chris (25. 05. 2007). LLVM for OpenGL and other stuff (Slides). LLVM Developers' Meeting. 
  8. ^ Zadeck, Kenneth (19 November 2005).
  9. ^ а б Naroff, Steve (25. 05. 2007). New LLVM C Front-end (Slides). LLVM Developers' Meeting. 
  10. ^ а б в 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. ^ а б в Simonis, Volker (10. 02. 2011). „Compiling the HotSpot VM with Clang”. Архивирано из оригинала 30. 04. 2012. г. Приступљено 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. Приступљено 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. ^ а б „GCC 4.9 VS. LLVM CLANG 3.5 LINUX COMPILER BENCHMARKS”. OpenBenchmarking.org. 14. 04. 2014. Приступљено 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, Приступљено 18. 09. 2012 
  19. ^ Hornung, Alex. „llvm/clang once more”. 
  20. ^ Clang, DragonFlyBSD, Приступљено 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”. Архивирано из оригинала 30. 04. 2012. г. Приступљено 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, Архивирано из оригинала 07. 09. 2015. г., Приступљено 18. 09. 2012 
  27. ^ Gregor, Douglas (26. 01. 2011). „New C++0x feature support in Clang” (Листа адреса). Архивирано из оригинала 30. 01. 2011. г. Приступљено 29. 01. 2011. 
  28. ^ „C++ and C++'0x Support in Clang”. LLVM. 
  29. ^ Sonnenberger, Jörg (19. 01. 2012). „Status of NetBSD and LLVM”. Архивирано из оригинала 09. 04. 2014. г. Приступљено 26. 02. 2014. 
  30. ^ Ledru, Sylvestre. „Rebuild of the Debian archive with clang”. 
  31. ^ „Official Minix 3 website: News”. Архивирано из оригинала 28. 11. 2015. г. Приступљено 23. 11. 2015. 
  32. ^ Gerzo, Daniel (12. 05. 2012). „FreeBSD Quarterly Status Report January-March, 2012” (Листа адреса). Приступљено 14. 05. 2012. 
  33. ^ Davis, Brooks (5. 11. 2012). „HEADS UP: Clang now the default on x86” (Листа адреса). Приступљено 7. 11. 2012. 
  34. ^ Webster, Behan (18. 02. 2013). „LLVMLinux: Compiling Android with LLVM” (PDF). Архивирано из оригинала (PDF) 12. 05. 2014. г. Приступљено 11. 05. 2013. 
  35. ^ Tinti, Vinicius (17. 03. 2013). „LLVMLinux: Nexus 7”. Архивирано из оригинала 11. 06. 2014. г. Приступљено 11. 05. 2013. 
  36. ^ Du Toit, Stefanus. „Clang is C++11 feature complete as of *just now*!”. 
  37. ^ „[llvm-project] Revision 194194”. Архивирано из оригинала 30. 01. 2017. г. Приступљено 23. 11. 2015. 

Спољашње везе уреди