LLVM
Տեսակ | կոմպիլյատոր |
---|---|
Նախագծումը՝ | Քրիս Լաթներ, Craig Topper?[1] և Simon Pilgrim?[1] |
Գրված է՝ | C++[2], C[3] և Ասսեմբլեր լեզու[3] |
ՕՀ | բազմապլատֆորմ, NetBSD, FreeBSD, OpenBSD?, Լինուքս, MINIX 3?, Windows և illumos? |
Լույս տեսավ՝ | հոկտեմբերի 24, 2003[4] |
Արտոնագիր | University of Illinois/NCSA Open Source License?[5] և Apache License v2.0 with LLVM Exceptions?[6] |
Կայք | llvm.org(անգլ.) |
Ելակոդ | github.com/llvm/llvm-project |
![]() |
LLVM-ը (նախկինում՝ Low Level Virtual Machine) կոմպիլյատորների ենթակառուցվածք է, որը նախագծվել է որպես լավ (կանոնավոր) սահմանված ինտերֆեյս ունեցող բազմակի օգտագործման գրադարանների բազմություն։
LLVM-ը գրված է C++ լեզվով և նախատեսված է կամայական ծրագրավորման լեզվով գրված ծրագրերում կոմպիլյացիայի ընթացքում, կապակցման ընթացքում և կատարման ընթացքում օպտիմիզացումներ կատարելու համար։ Ի սկզբանե իրականացված լինելով C և C++ ծրագրավորման լեզուների համար, LLVM-ի լեզվից անկախ մտահղացումը տարածվեց նաև ամենատարբեր լեզուների համար։ LLVM օգտագործող ծրագրավորման լեզուների կոմպիլյատորների թվին են պատկանում Common Lisp, ActionScript, Ada, D, Fortran, Go, Haskell, Java բայթ-կոդ, Julia, Objective-C, Swift, Python, R, Ruby, Rust, Scala[7], C#[8][9][10] և Lua լեզուները։
LLVM նախագիծը սկսվել է 2000 թվականին Իլինոյսի Համալսարանում (University of Illinois at Urbana–Champaign), Վիքրամ Էյդվի (Vikram Adve) և Քրիս Լատների (Chris Lattner) ղեկավարությամբ։ LLVM-ն ի սկզբանե մշակվում էր որպես ստատիկ և դինամիկ լեզուների համար դինամիկ կոմպիլյացիայի մեթոդների ուսումնասիրման հետազոտական ենթակառուցվածք։ 2005 թվականին Apple Inc. ընկերությունը պայմանագիր կնքեց Լատների հետ և թիմ ստեղծեց Apple-ի տարբեր համակարգերում LLVM-ի կիրառությունները մշակելու համար[11]։ Այժմ LLVM-ը Apple-ի Mac OS X և iOS միջավայրերում ծրագրային համակարգերի մշակման ներդրված բաղադրիչ է[12]։ Բոլորովին վերջերս Sony ընկերությունը LLVM-ի clang կոմպիլյատորն օգտագործում էր իր PS4 խաղային սարքի ծրագրերի մշակման համակարգում (SDK)[13]։
Ի սկզբանե LLVM անունը Low Level Virtual Machine անվան հապավումն էր, սակայն այդ ավելի քիչ էր արտահայտում ամբողջ նախագծի իմաստը, երբ LLVM-ը դարձավ կոմպիլյատորների հետ ամենատարբեր գործիքների և տեխնոլոգիաների մի համակարգ։ Այդ պատճառով էլ նախագիծը հրաժարվեց հապավումից և LLVM անունը ընդունվեց որպես հատուկ անուն[14]։ Այժմ LLVM-ը մի ապրանքանիշ է, որը կապված է LLVM ընդհանուր նախագծին, LLVM ներքին ներկայացմանը, LLVM շտկող-կարգաբերող ծրագիրին (debugger), LLVM-ի C++ ստանդարտ գրադարանին և այլն։ LLVM-ը կառավարվում է LLVM Հիմնադրամի կողմից, որի նախագահը Տանյա Լետներն (Tanya Lattner) է՝ կոմպիլյատորների ճարտարագետ և Քրիս Լատների կինը[15]։
2012 թվականին ACM-ը (Association for Computing Machinery) LLVM-ի համար Էյդվին, Լետներին և Չենգին ներկայացրել է ACM Software System Award մրացանակի[16]։
Ընդհանուր նկարագրություն
[խմբագրել | խմբագրել կոդը]LLVM-ը կարող է ներկայացնել կոմպիլյատորի ամբողջ միջանկյալ փուլերը՝ մուտքում ստանալով տվյալների միջանկյալ ներկայացումը (intermediate form) և գեներացնելով նույն միջանլյալ ներկայացմամբ օպտիմիզացված տվյալներ։ Այնուհետև այդ նոր միջանկյալ ներկայացումը կարող է ձևափոխվել նպատակային պլատֆորմի մեքենայից կախված ասեմբլերային կոդի։ LLVM-ը կարողանում է աշխատել GCC փաթեթի տրամադրած ներքին ներկայացման հետ՝ դրանով իսկ հնարավորություն ստեղծելով LLVM-ի հետ օգտագործել GCC-ի համար գրված բազմաթիվ կոմպիլյատորները։
LLVM-ը տրամադրում է իր սեփական լեզվից անկախ հրամանների բազմությունը և տիպերի համակարգը[17]։ Ամեն մի հրաման ունի միակ ստատիկ վերագրումով (static single assignment — SSA) տեսք, ըստ որի ամեն մի փոփոխականի (դրանք կոչվում են տիպիզացված ռեգիստրներ) արժեք է վերագրվում միայն մեկ անգամ և այն դառնում է չփոփոխվող։ Սա օգնում է պարզեցնել փոփոխականների կախվածությունների վերլուծությունը։
Ծանոթագրություններ
[խմբագրել | խմբագրել կոդը]- ↑ 1,0 1,1 https://github.com/llvm/llvm-project/graphs/contributors?type=a
- ↑ The llvm Open Source Project on Open Hub: Languages Page — 2006.
- ↑ 3,0 3,1 The llvm Open Source Project on Open Hub: Languages Page
- ↑ Lattner C. The LLVM 1.0 Release is finally available!
- ↑ License
- ↑ https://github.com/llvm/llvm-project/commit/469bdefd448b76c5adcdd67256e9a44fabf7e027 — 2019.
- ↑ (2012-09-24)։ «Compiling Scala to LLVM»։ Վերցված՝ 2013-02-19։
- ↑ Announcing LLILC - A new LLVM-based Compiler for .NET, Արխիվացված է օրիգինալից 2015 թ․ սեպտեմբերի 23-ին, Վերցված է 2015 թ․ ապրիլի 17-ին
- ↑ Mono LLVM, Վերցված է 2013 թ․ մարտի 10-ին
- ↑ LLVM, Chris Lattner, in The architecture of Open Source Applications, edited by Amy Brown, Greg Wilson, 2011
- ↑ Adam Treat (2005 թ․ փետրվարի 19), mkspecs and patches for LLVM compile of Qt4, Արխիվացված է օրիգինալից 2011 թ․ հոկտեմբերի 4-ին, Վերցված է 2012 թ․ հունվարի 27-ին
- ↑ «Apple LLVM Compiler», Developer Tools, Apple, Վերցված է 2012 թ․ հունվարի 27-ին
- ↑ Developer Toolchain for ps4 (PDF), Վերցված է 2015 թ․ փետրվարի 24-ին
- ↑ «Chris Lattner discusses the name LLVM». Արխիվացված է օրիգինալից 2012 թ․ հունվարի 12-ին. Վերցված է 2011 թ․ դեկտեմբերի 22-ին.
- ↑ Chris Lattner (2014 թ․ ապրիլի 3). «The LLVM Foundation». LLVM Project Blog.
- ↑ «ACM Awards». ACM. Արխիվացված է օրիգինալից 2012 թ․ ապրիլի 2-ին. Վերցված է 2015 թ․ նոյեմբերի 29-ին.
- ↑ «LLVM Language Reference Manual». Վերցված է 2012 թ․ ապրիլի 16-ին.