LLVM

Վիքիպեդիայից՝ ազատ հանրագիտարանից
Jump to navigation Jump to search
LLVM
DragonFull.png
Տեսակկոմպիլյատոր
Նախագծումը՝Vikram Adve? և Քրիս Լաթներ
Գրված է՝C++[1], C[2] և Ասսեմբլեր լեզու[2]
ՕՀբազմապլատֆորմ
Լույս տեսավ՝հոկտեմբերի 24, 2003[3]
ԱրտոնագիրUniversity of Illinois/NCSA Open Source License?[4] և Apache արտոնագիր[5]
Կայքllvm.org
Աղբյուր կոդllvm.org/viewvc/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,[6] C#[7][8][9] և Lua լեզուները։

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

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

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

Ընդհանուր նկարագրություն[խմբագրել | խմբագրել կոդը]

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

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

Ծանոթագրություններ[խմբագրել | խմբագրել կոդը]

  1. The llvm Open Source Project on Open Hub: Languages Page — 2006.
  2. 2,0 2,1 The llvm Open Source Project on Open Hub: Languages Page
  3. Lattner C. The LLVM 1.0 Release is finally available!
  4. License
  5. http://releases.llvm.org/9.0.0/LICENSE.TXT — 2019.
  6. (2012-09-24)։ «Compiling Scala to LLVM»։ Վերցված՝ 2013-02-19։
  7. Announcing LLILC - A new LLVM-based Compiler for .NET, http://www.dotnetfoundation.org/blog/announcing-llilc-llvm-for-dotnet, վերցված է 2015-04-17 
  8. Mono LLVM, http://www.mono-project.com/Mono_LLVM, վերցված է 2013-03-10 
  9. LLVM, Chris Lattner, in The architecture of Open Source Applications, edited by Amy Brown, Greg Wilson, 2011
  10. Adam Treat (2005-02-19), mkspecs and patches for LLVM compile of Qt4, http://lists.trolltech.com/qt4-preview-feedback/2005-02/msg00691.html, վերցված է 2012-01-27 
  11. «Apple LLVM Compiler», Developer Tools (Apple), http://developer.apple.com/technologies/tools/, վերցված է 2012-01-27 
  12. Developer Toolchain for ps4, http://llvm.org/devmtg/2013-11/slides/Robinson-PS4Toolchain.pdf, վերցված է փետրվարի 24, 2015 
  13. «Chris Lattner discusses the name LLVM»։ Վերցված է դեկտեմբերի 22, 2011 
  14. Chris Lattner (ապրիլի 3, 2014)։ «The LLVM Foundation»։ LLVM Project Blog 
  15. «ACM Awards»։ ACM 
  16. «LLVM Language Reference Manual»։ Վերցված է ապրիլի 16, 2012