ഗ്നു കമ്പൈലർ ശേഖരം

ഗ്നു പദ്ധതി പ്രകാരം നിർമ്മിച്ച് കമ്പൈലർ ശേഖരമാണ് **ഗ്നു കമ്പൈലർ ശേഖരം** അഥവാ **ജി.സി.സി.** (Gnu Compiler Collection അഥവാ GCC). ഗ്നു ഉപകരണ ശൃംഖലയിലെ പ്രധാനകണ്ണിയാണിത്. സി, സി++, ജാവ, അഡ തുടങ്ങി വിവിധ കമ്പ്യൂട്ടർ ഭാഷകളെ ഇത് പിൻതുണയ്ക്കുന്നു. ഗ്നു/ലിനക്സ് പോലുള്ള മറ്റു വിവിധ ഓപ്പറേറ്റിംഗ് സിസ്റ്റങ്ങളുടെയും പ്രധാന കമ്പയിലറായി ഇന്ന് ഗ്നു കമ്പൈലർ ശേഖരം പ്രവർത്തിക്കുന്നു. വിവിധ തരം പ്രോസസർ ആർക്കിടെക്ടറുകളിലേക്ക് ഗ്നു കമ്പൈലർ ശേഖരം രൂപമാറ്റം വരുത്തിയിട്ടുണ്ട്. സിംബിയൻ, എ.എം.സി.സി. പോലുള്ള വിവിധ എംബഡഡ് സിസ്റ്റങ്ങളിലും ഗ്നു കമ്പൈലർ ശേഖരം ലഭ്യമാണ്. വീഡിയോഗെയിമുകൾ, കമ്പ്യൂട്ടർ ഗെയിമുകൾ മുതലായവയുടെ നിർമ്മാണത്തിൽ ഗ്നു കമ്പൈലർ ശേഖരം ഇന്ന് വ്യാപകമായി ഉപയോഗിക്കുന്നുണ്ട്. 

GCC 1.0 1987ലാണ് പുറത്തിറങ്ങിയത്. ഇതിന്റെ ആദ്യപേര് ഗ്നു സി കമ്പൈലർ എന്നായിരുന്നു. 1987 ഡിസംബറിൽ സി++ പിന്തുണ ഉൾപ്പെടുത്തി. സ്വതന്ത്ര സോഫ്റ്റ്‌വെയർ പ്രസ്ഥാനം ഗ്നു കമ്പൈലർ ശേഖരം ഗ്നു പകർപ്പനുമതിപത്ര പ്രകാരം വിതരണം നടത്തിവരുന്നു.

## ചരിത്രം
റിച്ചാർഡ് സ്റ്റാൾമാൻ 1985-ൽ ആണ് ഈ പദ്ധതി ആരംഭിച്ചത്. അന്ന് നിലവിലുണ്ടായിരുന്നതും പാസ്കൽ, സി മുതലായ ഭാഷകളെ പിൻതുണച്ചിരുന്നതുമായ ഫ്രീ യൂണിവേഴ്സിറ്റി കമ്പൈലർ കിറ്റ് എന്ന പ്രോഗ്രാം താൻ ആരംഭിക്കാനിരിക്കുന്ന ഗ്നു ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റം  പ്രോജക്റ്റിൽ ഉപയോഗിക്കുന്നതിനായി അതിന്റെ രചയിതാവിനോട് അനുവാദം ചോദിച്ചു. എന്നാൽ യൂണിവേഴ്സിറ്റി സൗജന്യമാണ് കമ്പൈലർ സൗജന്യമല്ല എന്ന പരിഹാസപൂർണ്ണമായ മറുപടിയാണ്  അദ്ദേഹത്തിന് ലഭിച്ചത്. ഇതിനെത്തുടർന്ന് ഗ്നു വിനായി തന്റെ ആദ്യത്തെ പ്രോഗ്രാം വിവിധ ഭാഷകളെയും കമ്പ്യൂട്ടറുകളെയും പിൻതുണക്കുന്ന ഒരു കമ്പൈലർ ആയിരിക്കണം എന്ന് അദ്ദേഹം തീരുമാനിച്ചു. ഒരു കമ്പൈലർ മുഴുവനായി എഴുതുന്ന ഭാരം ഒഴിവാക്കാൻ ലോറൻസ് ലിവർമോർ ലാബിന്റെ  പാസ്റ്റൽ എന്ന പാസ്കൽ കമ്പൈലറിൽ സി ഭാഷക്കുള്ള പിൻതുണ ചേർക്കാൻ സ്റ്റാൾമാൻ ശ്രമിച്ചു. എന്നാൽ ജോലികൾ പൂർണ്ണമായപ്പോൾ മോട്ടോറോളയുടെ 68000 കമ്പ്യൂട്ടറിൽ അനുവദനീയമായതിൽ കൂടുതൽ മെമ്മറി ആ പ്രോഗ്രാം  ഉപയോഗിക്കുന്നതായി കണ്ടെത്തി. ഇതിനെത്തുടർന്ന് പാസ്റ്റൽ ഉപയോഗിക്കാതെ എന്നാൽ താൻ പാസ്റ്റലിൽ സി ഭാഷക്കുള്ള പിൻതുണ ചേർക്കാനായി എഴുതിയ ഭാഗങ്ങൾ ഉപയോഗിച്ച് അദ്ദേഹം ഒരു പുതിയ കമ്പൈലർ നിർമ്മിച്ചു. പാസ്റ്റൽ കമ്പൈലറിന്റെ പ്രവർത്തന രീതി ഈ കമ്പൈലറിലും പിൻതുടർന്നു. ജിസിസിയുടെ ആദ്യത്തെ പതിപ്പ്  1987 മാർച്ച് 22 ന് ആണ് പുറത്തിറങ്ങിയത്. 1991 ആയപ്പോളേക്കും ജിസിസി സ്ഥിരതയുള്ള പ്രവർത്തനം കാഴ്ചവയ്ക്കുന്ന രീതിയിലേക്ക് എത്തിയെങ്കിലും കമ്പ്യൂട്ടർ ആർക്കിട്ടെക്ചറുകളുമായി ബന്ധപ്പെട്ട പരിമിതികൾ കൊണ്ട് വിചാരിച്ച രീതിയിലൂള്ള മുന്നേറ്റം നടത്താൻ അതിന്  സാധിച്ചില്ല. അതിനാൽ സ്വതന്ത്ര സോഫ്റ്റ്‌‌വെയർ പ്രസ്ഥാനം ഇതിന്റെ രണ്ടാം പതിപ്പിന്റെ ജോലികൾ ആരംഭിച്ചു. ജി പി എൽ അനുമതി വ്യവസ്ഥയിൽ ആയിരുന്നതിനാൽ വിവിധ വ്യക്തികൾ ജിസിസിയുടെ വിവിധ പതിപ്പുകൾ ഉണ്ടാക്കുകയും അവയിൽ കൂട്ടിച്ചേർക്കലുകൾ നടത്തുകയും ചെയ്തുപോന്നു. 1994 ഇൽ ബിഎസ് ഡി ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റത്തിന്റെ നാലാം പതിപ്പ് വന്നതോടെ ഒരുപാട് കമ്പ്യൂട്ടറുകളിൽ ജിസിസി അടിസ്ഥാന കമ്പൈലർ ആയിരുന്നു.

ഇന്ന് ജിസിസി വിവിധ പ്രോഗ്രാമിങ്ങ് ഭാഷകളെയും കമ്പ്യൂട്ടർ ആർക്കിട്ടെക്ചറുകളെയും പിൻതുണക്കുന്നു. സ്വതന്ത്രമായതും അല്ലാത്തതുമായ നിരവധി പശ്ചാത്തലങ്ങളിൽ വിൻഡോസ് അടക്കം നിരവധി ഓപ്പറേറ്റിങ്ങ് സിസ്റ്റങ്ങളിൽ ഇന്ന് ജിസിസി ഉപയോഗിക്കപ്പെടുന്നുണ്ട്. ലോകത്തെമ്പാടുമുള്ള നിരവധി പ്രോഗ്രാമർമാർ ഒരു സ്റ്റിയറിങ്ങ് കമ്മിറ്റിയുടെ മേൽനോട്ടത്തിൽ ജിസിസിയുടെ വികസിപ്പിക്കലുകൾ നടത്തിവരുന്നു. ജി പി എൽ അനുമതി വ്യവസ്ഥയിൽ പുറത്തിറങ്ങിയ ജിസിസി ഒരു പ്രോഗ്രാമിങ്ങ് ഉപകരണം എന്ന നിലയിൽ മാത്രമല്ല സ്വതന്ത്ര സോഫ്റ്റ്വെയറിന് ഒരുദഹരണം എന്ന നിലയിലും സ്വതന്ത്ര സോഫ്റ്റ്‌‌വെയർ പ്രസ്ഥാനത്തിന് വലിയ ശ്രദ്ധ നേടിക്കൊടുക്കുകയുണ്ടായി. ഇന്ന് നിലവിലുള്ള കമ്പ്യൂട്ടർ ആർക്കിട്ടെക്ചറുകളിലും  ലഭ്യമായ പ്രോസസറുകളിലും ജിസിസി പിൻതുണക്കാത്തവ ഇല്ലെന്ന് തന്നെ പറയാൻ സാധിക്കും.

## ഘടന
ജിസിസി എന്നത് ഒരൊറ്റ പ്രോഗ്രാമല്ല. ഇത് ഒന്നിലധികം പ്രോഗ്രാമുകളുടെ കൂട്ടമാണ്. ഒരു ഉപഭോക്താവ് സാധാരണഗതിയിൽ ജിസിസി എന്ന പ്രോഗ്രാം ആണ് ഉപയോഗിക്കുക. ഇതിനെ കമ്പൈലർ ഡ്രൈവർ പ്രോഗ്രാം എന്നാണ് വിളിക്കുന്നത്. ഈ പ്രോഗ്രാം ഉപയോഗിക്കപ്പെടുന്നത് ഒന്നോ അതിലധികമോ ഫയലുകളെയും ഐഛികങ്ങളെയും പരാമർശിച്ചുകൊണ്ടായിരിക്കും. ഇവയുടെ അടിസ്ഥാനത്തിൽ ഫയലുകളിൽ ഉപയോഗിക്കപ്പെട്ട ഭാഷക്കായുള്ള കമ്പൈലറുകൾ പ്രവർത്തിപ്പിക്കുക, കൂടുതൽ പ്രോഗ്രാമുകൾ പ്രവർത്തിപ്പിക്കേണ്ടത് ആവശ്യമാണെങ്കിൽ അവയെ പ്രവർത്തിപ്പിക്കുക എന്നിവയാണ് ഈ പ്രോഗ്രാമിന്റെ ധർമ്മം. സാധാരണഗതിയിൽ ഒരു സി പ്രോഗ്രാമിനെ പ്രവർത്തന സജ്ജമായ ഒരു പ്രോഗ്രാമായി മാറ്റുന്ന പ്രക്രിയയിൽ പ്രീ-പ്രോസസർ, കമ്പൈലർ, അസംബ്ലർ, ലിങ്കർ എന്നീ പ്രോഗ്രാമുകളുടെ സേവനം ആവശ്യമാണ്. ഇതിൽ ജിസിസി ഒരു കമ്പൈലർ മാത്രമാണ്. ഒരു കമ്പൈലറിന്റെ ധർമ്മം മറ്റൊരു ഭാഷയിൽ എഴുതപ്പെട്ട പ്രോഗ്രാമിനെ അസംബ്ലി ഭാഷയിലേക്ക് മാറ്റുന്നത് മാത്രമാണ്. ജിസിസിയുടെ ഘടനയിൽ മുൻഭാഗം, മധ്യഭാഗം, പിൻഭാഗം എന്നിങ്ങനെ മൂന്ന് ഭാഗങ്ങൾ ഉണ്ട്. സി ഭാഷയിൽ എഴുതപ്പെട്ട പ്രോഗ്രാം ഒരു കുഴലിലൂടെ കടന്നുപോകുന്നത് പോലെ ഈ മൂന്ന് ഭാഗങ്ങളിലൂടെയും കടന്ന് പോകുന്നു. മൂന്നാമത്തെ ഭാഗത്തിന് ശേഷം‌ ഏത് കമ്പ്യൂട്ടറിനായാണോ ആ പ്രോഗ്രാമിനെ കമ്പൈൽ ചെയ്യുന്നത് ആ കമ്പ്യൂട്ടറീന്റെ അസംബ്ലർ‌ പ്രോഗ്രാമിന് മനസ്സിലാകുന്ന അസംബ്ലി ഭാഷയിലുള്ള ഒരു പ്രോഗ്രാം ലഭിക്കുന്നു.

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

### മധ്യഭാഗം
മധ്യഭാഗം (മിഡിൽ എൻഡ്) എല്ലാ പ്രോഗ്രാമിങ്ങ് ഭാഷകൾക്കും ഒന്നുതന്നെ. ഈ ഭാഗത്ത് വച്ച് പ്രോഗ്രാമുകളിൽ കമ്പൈലർ‌ പലവിധത്തിലും ഉള്ള മാറ്റങ്ങൾ വരുത്തുന്നു. അവസാനമായി ഉണ്ടാകുന്ന പ്രോഗ്രാമിന്റെ വലിപ്പം കുറക്കാനോ പ്രവർത്തന സമയത്തെ വേഗത വർദ്ധിപ്പിക്കാനോ ഒക്കെ ഉദ്ദേശിച്ചുള്ളവയാണ് ഈ മാറ്റങ്ങൾ‌. ഇതിനെ മെച്ചപ്പെടുത്തലുകൾ (ഓപ്റ്റിമൈസേഷൻ) എന്ന് വിളിക്കുന്നു. ഇത്തരം മെച്ചപ്പെടുത്തലുകൾ എല്ലാ ഭാഗത്തുവച്ചും നടക്കാറുണ്ടെങ്കിലും മധ്യഭാഗത്ത് വച്ചാണ് ഏറ്റവുമധികമായി നടക്കുന്നത്. മുൻഭാഗത്തിന് പ്രോഗ്രാം എന്ത് എന്തുചെയ്യുന്നു, അതിലെ നിർദ്ദേശങ്ങൾ ഏത് ക്രമത്തിലാണ് പാലിക്കപ്പെടുക എന്നിങ്ങനെയുള്ള കാര്യങ്ങൾ അറിയാൻ സാധിക്കില്ല. നിർദ്ദേശങ്ങളെ ജെനറിക് രീതിയിലേക്ക് മാറ്റുക, പ്രോഗ്രാമിങ്ങ് ഭാഷയുടെ വ്യാകരണം പാലിക്കപ്പെട്ടിട്ടുണ്ടോ എന്നുറപ്പുവരുത്തുക എന്നിവ മാത്രമാണ് അതിന് ചെയ്യാൻ സാധിക്കുന്നത്. എന്നാൽ മധ്യഭാഗം കൂടുതൽ കാര്യക്ഷമമായ രീതിയിൽ തന്നെ പ്രോഗ്രാമിനെ അപഗ്രഥിക്കുന്നു. ഭാഷാ വ്യാകരണങ്ങൾ തുടങ്ങിയവയിൽ പ്രശ്നങ്ങൾ ഉണ്ടെങ്കിൽ ആദ്യ ഭാഗം തന്നെ ഉപഭോക്താവിന് സന്ദേശം നൽകി കമ്പൈലിങ്ങ് നിർത്തി വയ്ക്കും. ബീജഗണിത സമവാക്യങ്ങളെ ലളിതമാക്കുക മുതലായ നിരവധി മെച്ചപ്പെടുത്തലുകൾ മധ്യഭാഗം നടത്തുന്നു. ഉദാഹരണമായി, `a = a + 1 + 9` എന്ന പ്രസ്താവനയെ `a = a + 10` എന്നാക്കി മാറ്റുന്നു. പ്രോഗ്രാം പ്രവർത്തിക്കുന്ന സമയത്ത് നടക്കുമായിരുന്ന രണ്ട് സങ്കലന പ്രക്രിയകളെ ഒന്നാക്കി കുറക്കാൻ ഇതുകൊണ്ട് സാധിക്കും. മറ്റൊരു ഉദാഹരണത്തിന് ഒരു ലൂപ്പ് പരിഗണിക്കാം,

```cpp
int a, b = 10;
for (i=0; i < 3; i++) {
     a = b;
     printf("%d", a);
}
```


എന്നതിൽ a എന്ന ചരത്തിന്റെ മൂല്യം മൂന്ന് തവണ ആ പ്രസ്താവനയിലൂടെ കടന്ന് പോകുമ്പോളും മാറുന്നില്ല. അതിനാൽ കമ്പൈലർ അതിനെ ലൂപ്പിന് പുറത്തേക്ക് മാറ്റും. b എന്ന ചരം വേറെ എവിടെയും ഉപയോഗിക്കുകയോ അതിന്റെ മൂല്യത്തിൽ മാറ്റം വരികയോ ചെയ്യുന്നില്ല. അതിനാൽ ആ ചരത്തിന്റെ ആവശ്യം തന്നെ വരുന്നില്ല. ഇത് കൂടാതെ പ്രോഗ്രാമിന്റെ വേഗത വർദ്ധിപ്പിക്കുന്ന തരത്തിലുള്ള മെച്ചപ്പെടുത്തലാണ് നടത്തുന്നതെങ്കിൽ മൂന്ന് തവണ മാത്രമാണ് ആ ലൂപ്പിലെ പ്രസ്താവനകളെ പ്രവർത്തിപ്പിക്കേണ്ടത് എന്നത് പരിഗണിച്ച് ആ ലൂപ്പ് ഒഴിവാക്കി പകരം മൂന്ന് തവണ `printf("%d", 10);` എന്നതിന് സമമായ പ്രസ്താവനകൾ അവിടെ ചേർക്കുന്നു. പ്രവർത്തന സമയത്ത് i എന്ന ചരത്തിന്റെ മൂല്യം പരിശോധിക്കാനും വർദ്ധിപ്പിക്കാനും വേണ്ട സമയം ഇതിലൂടെ ലാഭിക്കം. 

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

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

പിൻഭാഗം തയ്യാറാക്കുന്ന അസംബ്ലി ഭാഷയിലുള്ള പ്രോഗ്രാം ആണ് കമ്പൈലറിന്റെ ഔട്ട്പുട്ട്. ഇതിനെ ഒരു ഫയലിലേക്ക് എഴുതുകയും അസംബ്ലർ ഉപയോഗിച്ച് യന്ത്രഭാഷയിലേക്ക് മാറ്റുകയും ചെയ്യുന്നു.

## അവലംബം

## കൂടുതൽ വായനക്ക്
* റെഡ്‌ഹാറ്റ് മാഗസിനിലെ ജിസിസി പ്രവർത്തനത്തെക്കുറിച്ചുള്ള ലേഖനം
* ജിസിസിയുടെ ഓൺലൈൻ സഹായം

വർഗ്ഗം:കംപൈലറുകൾ
വർഗ്ഗം:ഗ്നു പദ്ധതി