**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, C# և Lua լեզուները։

LLVM նախագիծը սկսվել է 2000 թվականին Իլինոյսի Համալսարանում (University of Illinois at Urbana–Champaign), Վիքրամ Էյդվի (Vikram Adve) և Քրիս Լատների (Chris Lattner) ղեկավարությամբ։ LLVM-ն ի սկզբանե մշակվում էր որպես ստատիկ և դինամիկ լեզուների համար դինամիկ կոմպիլյացիայի մեթոդների ուսումնասիրման հետազոտական ենթակառուցվածք։ 2005 թվականին Apple Inc. ընկերությունը պայմանագիր կնքեց Լատների հետ և թիմ ստեղծեց Apple-ի տարբեր համակարգերում LLVM-ի կիրառությունները մշակելու համար։ Այժմ LLVM-ը Apple-ի Mac OS X և iOS միջավայրերում ծրագրային համակարգերի մշակման ներդրված բաղադրիչ է։ Բոլորովին վերջերս Sony ընկերությունը LLVM-ի clang կոմպիլյատորն օգտագործում էր իր PS4 խաղային սարքի ծրագրերի մշակման համակարգում (SDK)։

Ի սկզբանե *LLVM* անունը *Low Level Virtual Machine* անվան հապավումն էր, սակայն այդ ավելի քիչ էր արտահայտում ամբողջ նախագծի իմաստը, երբ LLVM-ը դարձավ կոմպիլյատորների հետ ամենատարբեր գործիքների և տեխնոլոգիաների մի համակարգ։ Այդ պատճառով էլ նախագիծը հրաժարվեց հապավումից և *LLVM* անունը ընդունվեց որպես հատուկ անուն։ Այժմ LLVM-ը մի ապրանքանիշ է, որը կապված է LLVM ընդհանուր նախագծին, LLVM ներքին ներկայացմանը, LLVM շտկող-կարգաբերող ծրագիրին (debugger), LLVM-ի C++ ստանդարտ գրադարանին և այլն։ LLVM-ը կառավարվում է LLVM Հիմնադրամի կողմից, որի նախագահը Տանյա Լետներն (Tanya Lattner) է՝ կոմպիլյատորների ճարտարագետ և Քրիս Լատների կինը։

2012 թվականին ACM-ը (Association for Computing Machinery) LLVM-ի համար Էյդվին, Լետներին և Չենգին ներկայացրել է *ACM Software System Award* մրացանակի։

Ընդհանուր նկարագրություն
------------------------

LLVM-ը կարող է ներկայացնել կոմպիլյատորի ամբողջ միջանկյալ փուլերը՝ մուտքում ստանալով տվյալների *միջանկյալ ներկայացումը* (intermediate form) և գեներացնելով նույն միջանլյալ ներկայացմամբ օպտիմիզացված տվյալներ։ Այնուհետև այդ նոր միջանկյալ ներկայացումը կարող է ձևափոխվել նպատակային պլատֆորմի մեքենայից կախված ասեմբլերային կոդի։ LLVM-ը կարողանում է աշխատել GCC փաթեթի տրամադրած ներքին ներկայացման հետ՝ դրանով իսկ հնարավորություն ստեղծելով LLVM-ի հետ օգտագործել GCC-ի համար գրված բազմաթիվ կոմպիլյատորները։

LLVM-ը տրամադրում է իր սեփական լեզվից անկախ հրամանների բազմությունը և տիպերի համակարգը։ Ամեն մի հրաման ունի *միակ ստատիկ վերագրումով* (static single assignment — SSA) տեսք, ըստ որի ամեն մի փոփոխականի (դրանք կոչվում են *տիպիզացված ռեգիստրներ*) արժեք է վերագրվում միայն մեկ անգամ և այն դառնում է չփոփոխվող։ Սա օգնում է պարզեցնել փոփոխականների կախվածությունների վերլուծությունը։

Ծանոթագրություններ
------------------

1. 1 2
2. ↑  The llvm Open Source Project on Open Hub: Languages Page — 2006.
3. 1 2  The llvm Open Source Project on Open Hub: Languages Page
4. ↑  *Lattner C.* The LLVM 1.0 Release is finally available!
5. ↑  License
6. ↑   — 2019.
7. ↑   (2012-09-24)։ «*Compiling Scala to LLVM*»։  Վերցված՝ 2013-02-19։
8. ↑   *Announcing LLILC - A new LLVM-based Compiler for .NET*, արխիվացված  օրիգինալից 2015-09-23-ին, վերցված է 2015-04-17
9. ↑   *Mono LLVM*, վերցված է 2013-03-10
10. ↑  LLVM, Chris Lattner, in The architecture of Open Source Applications, edited by Amy Brown, Greg Wilson, 2011
11. ↑  Adam Treat (2005-02-19), *mkspecs and patches for LLVM compile of Qt4*, վերցված է 2012-01-27
12. ↑  «Apple LLVM Compiler», *Developer Tools* (Apple), վերցված է 2012-01-27
13. ↑   *Developer Toolchain for ps4*, վերցված է փետրվարի 24, 2015
14. ↑  "Chris Lattner discusses the name LLVM". Արխիվացված է the original 2012 թ․ հունվարի 12-ին. Retrieved 2011 թ․ դեկտեմբերի 22.
15. ↑  Chris Lattner (2014 թ․ ապրիլի 3). "The LLVM Foundation". *LLVM Project Blog*.
16. ↑  "ACM Awards". ACM. Արխիվացված է the original 2012 թ․ ապրիլի 2-ին. Retrieved 2015 թ․ նոյեմբերի 29.
17. ↑  "LLVM Language Reference Manual". Retrieved 2012 թ․ ապրիլի 16.