ഇന്റർമീഡിയറ്റ് റെപ്രസന്റേഷൻ

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

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

***പ്രതിനിധാനമുള്ള ഒരു അടിസ്ഥാന പ്രവർത്തനം മാത്രം**: ഓരോ നിർദ്ദേശവും ഒരു അടിസ്ഥാന പ്രവർത്തനത്തെ മാത്രം പ്രതിനിധാനം ചെയ്യുന്നു. മൈക്രോപ്രോസസറുകളിലെ സാധാരണ "shift-add" അടയാളമാർഗങ്ങൾ ഇവിടെ ഉൾപ്പെടുത്തിയിട്ടില്ല.  

***കൺട്രോൾ ഫ്ലോ വിവരങ്ങളുടെ അഭാവം**: ഇൻസ്ട്രക്ഷൻ സെറ്റിൽ കൺട്രോൾഫ്ലോയുമായി (control flow) ബന്ധപ്പെട്ട വിവരങ്ങൾ സാധാരണയായി ഉൾപ്പെടുന്നില്ല.  

***പ്രോസസർ രജിസ്റ്ററുകളുടെ പരിമിതിയില്ലായ്മ**: പ്രോസസറിന്റെ രജിസ്റ്ററുകളുടെ എണ്ണം വളരെ വലുതായിരിക്കും, ചിലപ്പോൾ പരിധിയില്ലാത്തതായും കാണാം.  

സാധാരണ, ഇന്റർമീഡിയറ്റ് ഭാഷയ്ക്ക് ത്രീ അഡ്രസ്സ് കോഡ് എന്ന ഫോർമാറ്റ് ഉപയോഗിക്കുന്നു.

ചില ഉന്നത തല പ്രോഗ്രാമിംഗ് ഭാഷകൾ നേരിട്ട് മെഷീൻ കോഡ് അല്ലെങ്കിൽ ഒബ്ജക്റ്റ് കോഡ് നിർമ്മിക്കാതെ ഇന്റർമീഡിയേറ്റ് ഭാഷ (intermediate language) മാത്രമേ സൃഷ്ടിക്കൂ. ഈ ഇടനില ഭാഷ കമ്പൈലർ അല്ലെങ്കിൽ മറ്റൊരു സംവിധാനത്തിന്റെ സഹായത്തോടെ തുടർന്നുള്ള കോഡായി മാറ്റും. അതിനാൽ, പ്രോഗ്രാമിന്റെ അവസാനം പ്രവർത്തനക്ഷമമായ കോഡ് സൃഷ്ടിക്കാൻ ഈ ഭാഷ ഉപയോഗിക്കുന്നു. ഇൻ്റർമീഡിയറ്റ് ഭാഷ ഒരു പ്രത്യേക കമ്പൈലർ ഉപയോഗിച്ച് മറ്റൊരു രൂപത്തിൽ മാറ്റുന്നു. അതിന് ശേഷം, കമ്പൈലർ ആന്തരിക പ്രവർത്തനങ്ങൾ നടത്തി, പ്രോഗ്രാമിനെ യന്ത്രത്തിൽ നേരിട്ട് പ്രവർത്തിക്കാവുന്ന ഒബ്ജക്റ്റ് കോഡ് സൃഷ്ടിക്കുന്നു. ഇത് സാധാരണയായി ഒപ്റ്റിമൈസേഷൻ പ്രക്രിയ എളുപ്പമാക്കുന്നതിനും, വിവിധ പ്രോസസറുകളും ഓപ്പറേറ്റിംഗ് സിസ്റ്റങ്ങളുമായി പൊരുത്തപ്പെടാൻ സഹായിക്കുന്ന ഇന്റർമീഡിയറ്റ് ഭാഷ ഉപയോഗിച്ചാണ് നടത്തുന്നത്, ഉദാഹരണത്തിന് സി ഭാഷ. ഇതുപോലുള്ള ഭാഷകൾ ഉന്നത തല ഭാഷകളും നിമ്നതല ഭാഷകളും തമ്മിലുള്ള സങ്കീർണ്ണതാ വ്യത്യാസം മനസ്സിലാക്കിത്തരുന്നു, ഉദാഹരണത്തിന് അസംബ്ലി ഭാഷകൾ. ഉന്നത തല ഭാഷകൾ മനുഷ്യർക്ക് മനസ്സിലാക്കാൻ എളുപ്പമാണ്, എന്നാൽ, ഇവ നേരിട്ട് യന്ത്രം മനസ്സിലാക്കുന്നത് പരിമിതമാണ്, അതിനാൽ കമ്പ്യൂട്ടറുകൾക്ക് പരിഗണിക്കാൻ ആകുന്ന ബൈനറി കോഡ് ആയി മാറ്റേണ്ടതുണ്ട്. പ്രോഗ്രാമർമാർക്ക് പ്രോഗ്രാമുകൾ എളുപ്പത്തിൽ എഴുതാനാകും എന്നതാണ് ഇതിന്റെ പ്രത്യേകത. നിമ്നതല ഭാഷ (Low-level language) കമ്പ്യൂട്ടറിന്റെ ഹാർഡ്‌വെയറിനടുത്തുള്ള ഭാഷയാണ്, ഇത് കമ്പ്യൂട്ടറിന്റെ പ്രവർത്തനങ്ങളെ നേരിട്ട് നിയന്ത്രിക്കാൻ ഉപകരിക്കും. അസംബ്ലി ഭാഷയും മറ്റുള്ള മെമ്മറി മാനിപ്പുലേഷൻ പ്രവർത്തനങ്ങളും ഇതിന്റെ ഉദാഹരണങ്ങളാണ്.
### ഭാഷകൾ
നിമ്നതല ഭാഷയായി കണക്കായിട്ടില്ലെങ്കിലും, സിയുടെ സ്വഭാവം അസംബ്ലി ഭാഷയുടെ ഒരു അംശമായും, യൂണിക്‌സ് പോലെയുള്ള ഒട്ടനവധി ഓപ്പറേറ്റിംഗ് സിസ്റ്റങ്ങളിൽ ഡിഫാക്ടോ സിസ്റ്റം ഭാഷയായും വ്യാപകമായി ഉപയോഗിക്കപ്പെടുന്നു (ഡിഫാക്ടോ സിസ്റ്റം ഭാഷ എന്നത് ഒരു ഓപ്പറേറ്റിംഗ് സിസ്റ്റം അടക്കമുള്ള പ്രോഗ്രാമുകൾ എഴുതാൻ എല്ലായിടത്തും സാധാരണയായി ഉപയോഗിക്കുന്ന ഭാഷയാണ്. സി ഭാഷ യൂണിക്സ് പോലുള്ള സിസ്റ്റങ്ങളിലെ അടിസ്ഥാനഭാഷയായതിനാൽ, അതിനെ എല്ലാവരും പ്രധാന പ്രോഗ്രാമിംഗ് ഭാഷയായി കരുതുന്നു). ഈ കാരണങ്ങളാൽ, സി ഒരു ജനപ്രിയ ഇന്റർമീഡിയറ്റ് ഭാഷയായി മാറിയിരിക്കുന്നു. ഐഫൽ, സതർ, എസ്റ്ററൽ, ലിസ്‌പ്പിന്റെ ചില ഡയലക്ടുകൾ (ലഷ്, ഗാംബിറ്റ്), സ്‌ക്വീക്കിന്റെ സ്മാൾടോക്ക്-സബ്സെറ്റ് സ്ലാംഗ്, നിം, സൈത്തൺ, സീഡ്7, സിസ്റ്റംടാപ്പ്, വല, വി തുടങ്ങി മറ്റ് പല ഭാഷകളും സിയെ ഒരു നിമ്ന തല ഭാഷയായി ഉപയോഗിക്കുന്നു. സിയുടെ സവിശേഷതകൾ ഉപയോഗിച്ച്, പല യന്ത്രങ്ങളിലും പ്രവർത്തിക്കാൻ കഴിവുള്ള അസംബ്ലി ഭാഷ പോലെയുള്ള ഒരു ഭാഷ നൽകാൻ സിയും സി ഇന്റർമീഡിയറ്റ് ലാംഗ്വേജും (CIL) രൂപകൽപ്പന ചെയ്‌തിട്ടുണ്ട്.

## അവലംബം