എൽ.എൽ.വി.എം.

**എൽ.എൽ.വി.എം (LLVM)** എന്നത് ഒരു കംപൈലർ, ടൂൾചെയ്ൻ സാങ്കേതികവിദ്യയാണ്(ടൂൾചെയ്ൻ എന്നാൽ പ്രോഗ്രാമിന്റെ വികസനത്തിനുള്ള വിവിധ ഉപകരണങ്ങളുടെ സമാഹാരമാണ്. ഇത് കമ്പൈലർ, ലിങ്കർ, അസംബ്ലർ, ഡിബഗ്ഗർ തുടങ്ങിയ ഉപകരണങ്ങൾ ഉൾക്കൊള്ളുന്നു. പ്രോഗ്രാമുകൾ സൃഷ്ടിക്കാൻ, വീഴ്ചകൾ കണ്ടെത്താൻ, പ്രവർത്തനക്ഷമത മെച്ചപ്പെടുത്താൻ ടൂൾചെയ്ൻ സഹായിക്കുന്നു). ഇത് ഏത് പ്രോഗ്രാമിംഗ് ഭാഷയ്‌ക്കും ഫ്രണ്ട്‌എൻഡ് വികസിപ്പിക്കാൻ വേണ്ടി, ഏത് ഇൻസ്ട്രക്ഷൻ സെറ്റ് ആർക്കിടെക്ചറിനും ബാക്ക്‌എൻഡ് രൂപപ്പെടുത്താൻ ഉപയോഗിക്കാം. അതിന്റെ സവിശേഷതകൾ മൂലം മറ്റ് പ്രോഗ്രാമിംഗ് ഭാഷകളും, പ്ലാറ്റ്‌ഫോമുകളും കൈകാര്യം ചെയ്യാൻ കഴിയും. എൽ.എൽ.വി.എം ഒരു ലാങ്വേജ് ഇൻഡിപ്പെൻഡന്റ് ഇന്റർമീഡിയേറ്റ് റെപ്രസെന്റേഷൻ (ലാങ്വേജ് ഇൻഡിപ്പെൻഡന്റ് ഇന്റർമീഡിയേറ്റ് റെപ്രസെന്റേഷൻ (IR) എല്ലാത്തരം പ്രോഗ്രാമിംഗ് ഭാഷകളും ഉപയോഗിച്ച് പ്രവർത്തിക്കാൻ സാധിക്കുന്ന ഒരു പൊതുവായ കോഡാണ്. ഇത് ഒരു ഭാഷയിൽ എഴുതിയ കോഡിനെ മറ്റൊരു രീതിയിലേക്ക് മാറ്റാൻ സഹായിക്കുന്നു.) കേന്ദ്രീകരിച്ചാണ് രൂപകൽപ്പന ചെയ്തിരിക്കുന്നത്. ഇത് ഒരു പൊതു അസംബ്ലി ഭാഷയായി പ്രവർത്തിക്കുന്നു, പല ഘട്ടങ്ങളിലായി ഓപ്റ്റിമൈസ് ചെയ്യാൻ കഴിയും. ഇതിലൂടെ കോഡ് എളുപ്പത്തിൽ തിരുത്താനും മറ്റു പ്ലാറ്റ്‌ഫോമുകളിൽ ഉപയോഗിക്കാനുമാകും. എൽ.എൽ.വി.എമ്മിനെ ആദ്യം ലോ ലെവൽ വിർച്വൽ മെഷീൻ എന്ന് വിളിച്ചിരുന്നു. പ്രാരംഭ ഘട്ടത്തിൽ, ഇത് വിർച്വൽ മെഷീൻ സാങ്കേതികവിദ്യകളെ കേന്ദ്രീകരിച്ചായിരുന്നു വികസിപ്പിച്ചെടുത്തത്. എന്നാൽ, എൽ.എൽ.വി.എം ഒരു പ്രോജക്ടായും ഒരു കംപൈലർ, ടൂൾചെയിൻ സാങ്കേതികവിദ്യകളുടെ സമാഹാരവുമായി വളരുന്നതോടെ, ഈ പേര് പദ്ധതിയുടെ വിപുലമായ ലക്ഷ്യങ്ങൾ നിറവേറുന്നതിലേക്കായി മാറി. ഇതോടെ ഒരു ബ്രാൻഡ് പേരായി മാത്രമാണ് എൽ.എൽ.വി.എം ഉപയോഗിക്കുന്നത്.

എൽ.എൽ.വി.എം(ലോ ലെവൽ വെർച്വൽ മെഷിൻ) സി++-ൽ എഴുതിയ ഒരു ഫ്രെയിംവർക്കാണ്, ഇത് കംപൈൽ ടൈം, ലിങ്ക് ടൈം, റൺടൈം, ഐഡിൽ ടൈം ഒപ്റ്റിമൈസേഷൻ മുതലയാവ ചെയ്യാൻ വേണ്ടി രൂപകൽപ്പന ചെയ്തിരിക്കുന്നു. ആദ്യം ഇറങ്ങുന്ന സമയത്ത് സി, സി++ എന്നീ ഭാഷകൾക്കായി മാത്രമായിരുന്നു ഉപയോഗിച്ചത്, എന്നാൽ അതിന്റെ പ്രോഗ്രാമിംഗ് ഭാഷകൾക്കതീതമായ രൂപകൽപ്പന കാരണം, ആക്ഷൻസ്ക്രിപ്റ്റ്, അഡ, സി#, കോമൺ ലിസ്പ്, ക്രിസ്റ്റൽ, ക്യൂഡ, ഫോർട്രാൻ, ഹാസ്‌കെൽ, ജൂലിയ, കൊട്‌ലിൻ, റസ്റ്റ്, സ്വിഫ്റ്റ്, സിഗ്, .നെറ്റ്, ഡയലാൻ,സ്കാല, ജാവ ബൈറ്റ്കോഡ്, ലാബ്വ്യൂസ് ജി ലാങ്വേജ്(LabVIEW's G language), ഒബജക്ടീവ്-സി, പോസ്റ്റ്ഗ്രേഎസ്ക്യൂഎൽ, സ്റ്റാൻഡേർഡ് എംഎൽ, സോജോ(Xojo), പിഎൽപിജിഎസ്ക്യൂഎൽ(PLpgSQL), ഓപ്പൺസിഎൽ, ഫ്രീബേസിക്, ഫ്രീപാസ്കൽ, ഹലൈഡ്(Halide), ഇട്രിസ്(Idris), ഡെൽഫി(Delphi), ഫോർത്ത്(Forth), റൂബി, പീക്കോലിസ്പ്(PicoLisp), ഡി പോലെയുള്ള നിരവധി പ്രോഗ്രാമിംഗ് ഭാഷകളുടെ കമ്പൈലറുകൾ എൽ.എൽ.വി.എമ്മിനെ പിന്തുണയ്ക്കുന്നു. ചില ഭാഷകൾ നേരിട്ട് എൽ.എൽ.വി.എം ഉപയോഗിക്കുമ്പോൾ, ചിലത് എൽ.എൽ.വി.എം ഇന്റർമീഡിയറ്റ് റെപ്രസെന്റേഷൻ രൂപത്തിൽ കോഡ് ജനറേറ്റ് ചെയ്യുന്നു. ഇതിലൂടെ, എൽ.എൽ.വി.എം പല ഭാഷകൾക്കും പ്ലാറ്റ്ഫോമുകൾക്കും ഒരുമിച്ച് പ്രവർത്തിക്കാൻ സഹായിക്കുന്ന ശക്തമായ ഉപകരണമാണ്.
## ചരിത്രം
എൽ.എൽ.വി.എം പ്രോജക്റ്റ് 2000-ൽ യൂണിവേഴ്സിറ്റി ഓഫ് ഇലിനോയിസ് ആറ്റ് ഉർബാന-ചാമ്പെയ്നിൽ വിക്രം അദ്വേയും ക്രിസ് ലാറ്റ്നറും നേതൃത്വത്തിൽ ആരംഭിച്ചു. ഇത് സ്റ്റാറ്റിക്, ഡൈനാമിക് പ്രോഗ്രാമിംഗ് ഭാഷകൾക്കായുള്ള ഡൈനാമിക് കോമ്പൈലേഷൻ(ഡൈനാമിക് കോമ്പൈലേഷൻ പ്രോഗ്രാമുകൾ പ്രവർത്തിക്കുന്ന സമയത്ത് (runtime) കോഡ് നിർമിച്ച് പ്രവർത്തിപ്പിക്കുന്ന പ്രക്രിയയാണ്. ഇത് പ്രോഗ്രാമുകളുടെ വേഗതയും കാര്യക്ഷമതയും മെച്ചപ്പെടുത്താൻ സഹായിക്കുന്നു.) സാങ്കേതികവിദ്യകൾക്കായി ഗവേഷണം നടത്താനുള്ള ഒരു അടിസ്ഥാനമായി വികസിപ്പിക്കപ്പെട്ടു. ഈ പ്രോജക്റ്റ് തുടക്കത്തിൽ ഗവേഷണ ആവശ്യങ്ങൾക്ക് പ്രത്യേകമായി രൂപകൽപ്പന ചെയ്തതായിരുന്നു. എൽ.എൽ.വി.എം ഒരു സോഫ്റ്റ്വെയർ ടൂൾ ആണ്, കോഡുകൾ എളുപ്പമാക്കാൻ സഹായിക്കുന്നു. 2005-ൽ ആപ്പിൾ ഇത് ഉപയോഗിക്കാൻ തുടങ്ങി, ലാറ്റ്നറിനെ അത് വികസിപ്പിക്കുന്നതിനായി ക്ഷണിച്ചു. അങ്ങനെ ആപ്പിളിന്റെ സോഫ്റ്റ്വെയറുകൾക്ക് ഇത് കൂടുതൽ ഉപകാരപ്രദമായി മാറി. എൽ.എൽ.വി.എം 2011 മുതൽ ആപ്പിളിന്റെ എക്സ് കോഡ് സോഫ്റ്റ്വെയർ ടൂളിന്റെ ഭാഗമായിട്ടുണ്ട്. എക്സ് കോഡ്(Xcode) മാക്ഒഎസിനും ഐഒഎസിനും വേണ്ടി സോഫ്റ്റ്വെയർ നിർമ്മിക്കാൻ ഉപയോഗിക്കുന്നു. എൽ.എൽ.വി.എം ഉപയോഗപ്പെടുത്തിക്കൊണ്ട്, പ്രോഗ്രാമുകൾ വേഗത്തിൽ നിർമ്മിക്കാൻ സഹായിക്കുന്നു. എൽ.എൽ.വി.എം യൂണിവേഴ്സിറ്റി ഓഫ് ഇലിനോയിസ്/എൻസിഎസിഎ ഓപ്പൺ സോഴ്‌സ് ലൈസൻസ് പ്രകാരം പുറത്തിറക്കിയതാണ്. ഇത് സൗജന്യമായും പരിമിതികളില്ലാതെ ഉപയോഗിക്കാവുന്ന ഒരു ഓപ്പൺ സോഴ്‌സ് ലൈസൻസാണ്.

2006-ൽ, ലാറ്റ്നർ ക്ലാങ് എന്ന പുതിയ പ്രോജക്റ്റ് ആരംഭിച്ചു. ക്ലാങ് ഫ്രണ്ട്എൻഡും എൽ.എൽ.വി.എം ബാക്ക്എൻഡും ചേർന്ന ഈ പ്രോജക്ടിനെ ക്ലാങ്/എൽ.എൽ.വി.എം അല്ലെങ്കിൽ ക്ലാങ് എന്ന് വിളിക്കുന്നു.

എൽ.എൽ.വി.എം എന്നത് തുടക്കത്തിൽ ലോ ലെവൽ വെർച്ചൽ മെഷീൻ   എന്ന് വിളിക്കപ്പെട്ടു. എന്നാൽ പ്രോജക്റ്റ് വളർന്നതോടെ, ഇത് വെർച്വൽ മെഷീനുമായി നേരിട്ട് ബന്ധമില്ലാത്ത, പല ഉപരിതലങ്ങളിലായി പ്രവർത്തിക്കുന്ന ഒരു വലിയ സാങ്കേതിക സംരംഭമായി മാറി. ആദ്യചുരുക്കപ്പേരായ എൽ.എൽ.വി.എം "തെറ്റിദ്ധാരണയുണ്ടാക്കുകയും" "അയോജ്യമായതല്ല" എന്നു തോന്നിക്കുകയും ചെയ്തു. അതിനാൽ, 2011 മുതൽ എൽ.എൽ.വി.എം ഒരു ആക്രോനിം (acronym-ആക്രോനിം എന്ന് പറയുന്നത് പല വാക്കുകളുടെ ആദ്യാക്ഷരങ്ങൾ ചേർത്ത് ഒരു ചുരുക്കനാമം രൂപീകരിക്കുന്നതിനെയാണ് ഉദാഹരണത്തിന്, NASA (National Aeronautics and Space Administration) ഒരു ആക്രോനിം ആണ്.) അല്ലെന്ന് ഔദ്യോഗികമായി പ്രഖ്യാപിച്ചു. ഇപ്പോൾ, ഇത് എൽ.എൽ.വി.എം പദ്ധതിയെ പ്രതിനിധീകരിക്കുന്ന ഒരു ബ്രാൻഡായി മാത്രം ഉപയോഗിക്കുന്നു. ഈ പ്രോജക്റ്റ് എൽ.എൽ.വി.എമ്മിന്റെ പ്രാഥമിക ഭാഗങ്ങളായ ഹൈ പെർഫോമൻസ് കോഡ്, ഡിബഗ്ഗിംഗ് ഉപകരണം, സി++ പ്രോഗ്രാമിംഗിനായി സജ്ജമാക്കിയ സ്റ്റാൻഡേർഡ് ലൈബ്രറി(C++11, C++14 സപോർട്ട് ഉൾപ്പെടെ) തുടങ്ങിയവ ഉൾപ്പെടുന്നു. എൽ.എൽ.വി.എം ഫൗണ്ടേഷൻ ആണ് ഈ പ്രോജക്റ്റ് നിയന്ത്രിക്കുന്നത്. എൽ.എൽ.വി.എം ഫൗണ്ടേഷനാണ് എൽ.എൽ.വി.എം പ്രോജക്റ്റ് നിയന്ത്രിക്കുന്നത്. 2014-ൽ കമ്പൈലർ എഞ്ചിനീയർ ടാന്യ ലാറ്റ്നർ അതിന്റെ പ്രസിഡന്റായി ചുമതല വഹിച്ചു, 2024 മാർച്ച് മാസം വരെ അവർ ഈ പദവിയിൽ ഉണ്ടായിരുന്നു.

എൽ.എൽ.വി.എം രൂപകൽപ്പനയും നടപ്പാക്കലും നടത്തിയതിന്, 2012-ൽ അസോസിയേഷൻ ഫോർ കമ്പ്യൂട്ടിംഗ് മെഷിനറി (ACM) വിക്രം എഡ്‌വെ, ക്രിസ് ലോട്ടൺ, ചെങ് എന്നിവരെ എസിഎം സോഫ്റ്റ്‌വെയർ സിസ്റ്റം അവാർഡ് നൽകി ആദരിച്ചു. എൽ.എൽ.വി.എം ഒരു ശക്തമായ പ്രോഗ്രാമിംഗ് ഫ്രെയിംവർക്കാണ്, അത് കോൺപൈലേഷനെയും(കോൺപൈലേഷൻ എന്നത് പ്രോഗ്രാമിംഗ് ഭാഷയിൽ എഴുതിയ കോഡ് മെഷീൻ ഭാഷയിലേക്കോ ബൈറ്റ് കോഡിലേക്കോ മാറ്റുന്ന പ്രക്രിയയാണ്. ഇത് പ്രോഗ്രാമുകൾ കമ്പ്യൂട്ടറിൽ പ്രവർത്തിപ്പിക്കാൻ സഹായിക്കുന്നു.) കോഡ് ഓപ്റ്റിമൈസേഷനെയും സഹായിക്കുന്നു. ഈ പുരസ്‌കാരം സോഫ്റ്റ്‌വെയർ സിസ്റ്റങ്ങൾ വികസിപ്പിക്കുന്നതിൽ ചെയ്ത ഉന്നത സംഭാവനകളെ അംഗീകരിക്കാനാണ് നൽകുന്നത്.

2019-ൽ എൽ.എൽ.വി.എം പുതിയ അപ്പാച്ചെ ലൈസൻസ് 2.0-ലേക്ക് മാറ്റിയപ്പോൾ, അതിന്റെ എല്ലാ കോഡ് സംഭാവനകളും പുതിയ ലൈസൻസിൽ ഉൾപ്പെടുത്തേണ്ടതായിരുന്നു. ഇത് സാധ്യമാക്കാൻ, ഓരോ സംഭാവകനും(contributer) പുതിയ ലൈസൻസ് അംഗീകരിക്കണമായിരുന്നു. എന്നാൽ, 2022 നവംബറിന് വരെ, 400-ഓളം സംഭാവനകൾക്ക് അവരുടെ സംഭാവകരിൽ നിന്ന് ഇത് സംബന്ധിച്ച അനുമതി ലഭിക്കാത്തതിനാൽ അവ പഴയ യു.ഐ.യു.സി  ലൈസൻസിൽതന്നെയാണ്.(UIUC License (University of Illinois/NCSA License) ഒരു ലളിതവും സൗജന്യവും ഓപ്പൺ സോഴ്‌സ് ലൈസൻസാണ്, കോഡ് എവിടെ നിന്നാണെന്ന് വ്യക്തമാക്കുന്ന കാര്യം മാത്രമാണ് നിർബന്ധമാക്കുന്നത്. ഇത് വ്യവസായിക ഉപയോഗത്തിനല്ലാതയോ(non-commercial) വ്യവസായിക (commercial) ഉപയോഗത്തിനോ വേണ്ടി നിയന്ത്രണങ്ങൾ ഇല്ലാതെ അനുമതി നൽകുന്നു.) ഈ ഭാഗങ്ങൾ പുതിയ ലൈസൻസിൽ കൃത്യമായ നിയമപരമായ സംരക്ഷണം ലഭിക്കാതെ തുടരുകയായിരുന്നു.
## പ്രത്യേകതകൾ
എൽ.എൽ.വി.എം ഒരു പൂർണ്ണ കമ്പൈലർ സിസ്റ്റത്തിന്റെ ഇന്റർമീഡിയറ്റ് ലെയറുകൾ നൽകാൻ കഴിയും. ഇത് ഒരു കമ്പൈലറിൽ നിന്ന് ഇന്റർമീഡിയറ്റ് റെപ്രസന്റേഷൻ (IR) കോഡ് സ്വീകരിച്ച്, അതിനെ ഒപ്റ്റിമൈസ് ചെയ്ത ഐആർ(IR) ആക്കി മാറ്റുന്നു. എൽ.എൽ.വി.എം ഒരു കോഡിനെ കമ്പൈലർ കോഡിന്റെ തുടക്കത്തിൽ നിന്നു തന്നെ ആദ്യത്തെ പാളികൾ എടുത്തു, രണ്ടാമത്തെ ഘട്ടത്തിൽ (നടുവിലത്തെ ഘട്ടത്തിൽ) അവയെ മാറ്റി, പിന്നീട് എളുപ്പത്തിൽ പ്രവർത്തിക്കാൻ തയ്യാറാക്കുന്നു. എൽ.എൽ.വി.എം ഒരു ശക്തമായ കമ്പൈലറാണ്, ഇത് ജിഎൻയു കമ്പൈലർ കളക്ഷൻ (ജിസിസി) ടൂൾചെയിനിൽ നിന്നുള്ള ഇന്റർമീഡയേറ്റ് റെപ്രസെന്റേഷൻ (ഐ.ആർ) സ്വീകരിക്കാൻ കഴിയും. ഇതിന്റെ അർത്ഥം, ജിസിസി പ്രോജക്റ്റിനായി നിർമ്മിച്ച വിവിധ ഫ്രണ്ട്-എൻഡുകൾ ഉപയോഗിച്ച് എൽ.എൽ.വി.എം പ്രവർത്തിക്കാനാകും. കൂടാതെ, ജിസിസി 7.5 പതിപ്പിനുശേഷമുള്ള വേർഷനുകളിൽ എൽ.എൽ.വി.എം നിർമ്മിക്കാനും കഴിയും. ഇതുവഴി ജിസിസിയും എൽ.എൽ.വി.എമ്മും തമ്മിൽ മികച്ച രീതിയിൽ പ്രവർത്തിക്കാനും ഡെവലപ്പർമാർക്ക് കൂടുതൽ മെച്ചപ്പെട്ട സാധ്യതകൾ നൽകാനുമാകും.

എൽ.എൽ.വി.എം കമ്പൈൽ ചെയ്യുന്ന സമയത്തോ (കമ്പൈൽ-ടൈം) ലിങ്ക് ചെയ്യുന്നതിനുള്ള സമയത്തോ (ലിങ്ക്-ടൈം) റീലോക്കേറ്റബിൾ മെഷീൻ കോഡ് (relocatable machine code) സൃഷ്ടിക്കാൻ കഴിയും. കൂടാതെ, റൺടൈമിൽ (പ്രോഗ്രാം പ്രവർത്തിക്കുന്ന സമയത്ത്) ബൈനറി മെഷീൻ കോഡ് തത്സമയം സൃഷ്ടിക്കാനും എൽ.എൽ.വി.എമ്മിന് കഴിയും. ഇത് പ്രോഗ്രാമുകളുടെ പ്രവർത്തനക്ഷമതയും കൃത്യതയും ഉയർത്തുന്ന ഒരു മഹത്തായ സവിശേഷതയാണ്.

എൽ.എൽ.വി.എം ഭാഷയെ ആശ്രയിക്കാതെ തന്നെ(language-independent) ഇൻസ്ട്രക്ഷൻ സെറ്റിനെയും ടൈപ്പ് സിസ്റ്റത്തിനെയും പിന്തുണയ്ക്കുന്നു, ഇത് ഇൻ്റർമീഡിയറ്റ് റെപ്രസെന്റേഷൻ ഉപയോഗിച്ച് പ്രവർത്തിക്കുന്നു. ഇത് പ്രോഗ്രാമിംഗ് ഭാഷകളുടെ പ്രത്യേകതകളെ മറികടന്ന് പൈത്തൺ, സി, സി++, റസ്റ്റ് തുടങ്ങിയ ഭാഷകളുടെ കോഡിനെ ഒപ്റ്റിമൈസ് ചെയ്യാനും വിവിധ പ്ലാറ്റ്ഫോമുകളിൽ ഉപയോഗിക്കാനും സഹായിക്കുന്നു. എൽ.എൽ.വി.എമ്മിന്റെ ടൈപ്പ് സിസ്റ്റം സ്ഥിരവും കാര്യക്ഷമവുമായ ടൈപ്പ് ചെക്കിംങ്ങും ഒപ്റ്റിമൈസേഷൻസും ഉറപ്പാക്കുന്നു. ഭാഷാ സ്വാതന്ത്ര്യവും ഉയർന്നതലത്തിലുള്ള അബ്സ്ട്രാക്ഷനും പ്രോഗ്രാമുകൾ വ്യത്യസ്ത ഉപകരണങ്ങളിൽ കാര്യക്ഷമമായി പ്രവർത്തിക്കാൻ കഴിയുന്ന രീതിയിൽ രൂപകൽപ്പന ചെയ്യാൻ സഹായിക്കുന്നു.

## അവലംബം