LLVM

Վիքիպեդիայից՝ ազատ հանրագիտարանից
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 Վիքիպահեստում

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