Кленг
Овај чланак можда захтева чишћење и/или прерађивање како би се задовољили стандарди квалитета Википедије. |
Програмер(и) | Крис Латнер и други Епл и други |
---|---|
Стабилно издање | 18.1.8[1]/1. септембар,
/ 18. јун 2024. |
Репозиторијум | |
Написан у | C++ |
Оперативни систем | Unix-like |
Платформа | Крст платформа |
Тип | Програмски преводилац |
Лиценца | Илиноис Универзитет /НЦСА отворена лиценца[2] |
Веб-сајт | https://clang.llvm.org/ |
Кленг (енгл. Clang, /ˈklæŋ/)[3] преводилац је предњег дела за следеће програмске језике: C, C++, Objective-C и Objective-C++. Користи ВМНР као "задњи део" и део је ВМНР иклуса од ВМНР 2.6.
Кленг је израђен да би заменио ГЦЦ. Отвореног је типа;[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 излази |
Види још
[уреди | уреди извор]Референце
[уреди | уреди извор]- ^ Download LLVM releases
- ^ LLVM License, Приступљено 24. 07. 2014
- ^ Christopher, Eric (3 July 2008). "simply wonder pronunciation of Clang".
- ^ Clang "Getting started" instructions, Clang.llvm.org, Приступљено 18. 09. 2012
- ^ „Clang Static Analyzer”. LLVM. Приступљено 3. 09. 2009.
- ^ Treat, Adam (19 February 2005). "mkspecs and patches for LLVM compile of Qt4" Архивирано на сајту Wayback Machine (4. октобар 2011).
- ^ Lattner, Chris (25. 05. 2007). LLVM for OpenGL and other stuff (Slides). LLVM Developers' Meeting.
- ^ Zadeck, Kenneth (19 November 2005).
- ^ а б Naroff, Steve (25. 05. 2007). New LLVM C Front-end (Slides). LLVM Developers' Meeting.
- ^ а б в Clang team, clang: a C language family frontend for LLVM
- ^ Lattner, Chris (11 July 2007).
- ^ Clang - Features and Goals: GCC Compatibility, 15. 04. 2013
- ^ Clang - Features and Goals: Fast compiles and Low Memory Use, 2007
- ^ а б в 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. '”
- ^ „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'”
- ^ а б „GCC 4.9 VS. LLVM CLANG 3.5 LINUX COMPILER BENCHMARKS”. OpenBenchmarking.org. 14. 04. 2014. Приступљено 25. 06. 2014.
- ^ Divacky, Roman. „[ANNOUNCE] clang/llvm can compile booting FreeBSD kernel on i386/amd64”.
- ^ Building FreeBSD with Clang, Wiki.freebsd.org, 24. 08. 2012, Приступљено 18. 09. 2012
- ^ Hornung, Alex. „llvm/clang once more”.
- ^ Clang, DragonFlyBSD, Приступљено 18. 09. 2012
- ^ „Clang can compile LLVM and Clang”. LLVM Project Blog.
- ^ „Clang Successfully Self-Hosts”. LLVM Project Blog.
- ^ „HelenOS mainline changeset head,294”. Архивирано из оригинала 30. 04. 2012. г. Приступљено 23. 11. 2015.
- ^ Gregor, Doug. „Clang++ Builds Boost!”. LLVM Project Blog.
- ^ Davis, Brad. „FreeBSD Status Reports April - June, 2010”.
- ^ 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
- ^ Gregor, Douglas (26. 01. 2011). „New C++0x feature support in Clang” (Листа адреса). Архивирано из оригинала 30. 01. 2011. г. Приступљено 29. 01. 2011.
- ^ „C++ and C++'0x Support in Clang”. LLVM.
- ^ Sonnenberger, Jörg (19. 01. 2012). „Status of NetBSD and LLVM”. Архивирано из оригинала 09. 04. 2014. г. Приступљено 26. 02. 2014.
- ^ Ledru, Sylvestre. „Rebuild of the Debian archive with clang”.
- ^ „Official Minix 3 website: News”. Архивирано из оригинала 28. 11. 2015. г. Приступљено 23. 11. 2015.
- ^ Gerzo, Daniel (12. 05. 2012). „FreeBSD Quarterly Status Report January-March, 2012” (Листа адреса). Приступљено 14. 05. 2012.
- ^ Davis, Brooks (5. 11. 2012). „HEADS UP: Clang now the default on x86” (Листа адреса). Приступљено 7. 11. 2012.
- ^ Webster, Behan (18. 02. 2013). „LLVMLinux: Compiling Android with LLVM” (PDF). Архивирано из оригинала (PDF) 12. 05. 2014. г. Приступљено 11. 05. 2013.
- ^ Tinti, Vinicius (17. 03. 2013). „LLVMLinux: Nexus 7”. Архивирано из оригинала 11. 06. 2014. г. Приступљено 11. 05. 2013.
- ^ Du Toit, Stefanus. „Clang is C++11 feature complete as of *just now*!”.
- ^ „[llvm-project] Revision 194194”. Архивирано из оригинала 30. 01. 2017. г. Приступљено 23. 11. 2015.