ജസ്റ്റ്-ഇൻ-ടൈം കംപൈലേഷൻ
പ്രോഗ്രാം എക്സിക്യൂഷൻ |
---|
പൊതുവായ ആശയങ്ങൾ |
|
ടൈപ്പ്സ് ഓഫ് കോഡ് |
|
കംപലേഷൻ സ്ട്രാറ്റെജീസ് |
|
ശ്രദ്ധേയമായ റൺടൈമുകൾ |
|
ശ്രദ്ധേയമായ കംപൈലറുകളും ടൂൾചെയിനുകളും |
|
ഒരു പ്രോഗ്രാം കോഡ് ആരംഭിക്കുന്നതിന് മുമ്പ് അത് പ്രവർത്തിക്കുമ്പോൾ തന്നെ മെഷീൻ ഭാഷയിലേക്ക് വിവർത്തനം ചെയ്യുന്നതാണ് ജസ്റ്റ്-ഇൻ-ടൈം (ജെഐടി) കംപൈലേഷൻ(ഡൈനാമിക് ട്രാൻസലേഷൻ അല്ലെങ്കിൽ റൺ-ടൈം കംപൈലേഷൻ എന്നും അറിയപ്പെടുന്നു)[1]. ഒറ്റയടിക്ക് മുൻകൂട്ടി ഉപയോഗിക്കുന്നതിനുപകരം യഥാർത്ഥ ഉപയോഗത്തെ അടിസ്ഥാനമാക്കി ഒപ്റ്റിമൈസ് ചെയ്തുകൊണ്ട് കോഡ് വേഗത്തിൽ പ്രവർത്തിപ്പിക്കാൻ ഇത് അനുവദിക്കുന്നു[2]. ജെഐടി കംപൈലേഷൻ എന്നാൽ കോഡ് ആരംഭിക്കുന്നതിന് മുമ്പ്, പ്രോഗ്രാം യഥാർത്ഥത്തിൽ ഉപയോഗത്തിലായിരിക്കുമ്പോൾ തന്നെ കമ്പ്യൂട്ടറിന് പ്രവർത്തിപ്പിക്കാൻ കഴിയുന്ന ഒരു ഫോർമാറ്റിലേക്ക് വിവർത്തനം ചെയ്യുക എന്നാണ് അർത്ഥമാക്കുന്നത്. കോഡിൻ്റെ ഏതൊക്കെ ഭാഗങ്ങൾ വിവർത്തനം ചെയ്യപ്പെടുകയാണെങ്കിൽ വേഗത്തിൽ പ്രവർത്തിക്കാൻ കഴിയുമെന്ന് മനസ്സിലാക്കുവാൻ ഈ രീതി കമ്പ്യൂട്ടറിനെ സഹായിക്കുന്നു, ഇത് മൊത്തത്തിൽ പ്രോഗ്രാം കൂടുതൽ സുഗമമായും കാര്യക്ഷമമായും പ്രവർത്തിക്കുന്നു.
ജെഐടി (ജസ്റ്റ്-ഇൻ-ടൈം) കംപൈലേഷൻ ഒരു കമ്പ്യൂട്ടറിൽ പ്രവർത്തിപ്പിക്കുന്നതിന് കോഡ് തയ്യാറാക്കുന്നതിനുള്ള രണ്ട് പ്രധാന രീതികൾ സംയോജിപ്പിക്കുന്നു: എഹെഡ്-ഓഫ്-ടൈം കംപൈലേഷൻ (പ്രവർത്തിക്കുന്നതിന് മുമ്പ് എല്ലാം കംപൈൽ ചെയ്യുന്നു), ഇന്റർപ്രെട്ടേഷൻ(കോഡ് പ്രവർത്തിക്കുമ്പോൾ തന്നെ കോഡ് ലൈൻ-ബൈ-ലൈനായി വായിക്കുകയും നടപ്പിലാക്കുകയും ചെയ്യുന്നു). പ്രോഗ്രാം പ്രവർത്തിക്കുമ്പോൾ കോഡിൻ്റെ ഏറ്റവും കൂടുതൽ ഉപയോഗിക്കുന്ന ഭാഗങ്ങൾ മാത്രമേ ജെഐടി കംപൈൽ ചെയ്യുന്നുള്ളൂ, ഇത് പൂർണ്ണമായി കംപൈൽ ചെയ്ത കോഡിൻ്റെ മുൻകൂട്ടി എടുക്കുന്ന സമയവും സ്റ്റോറേജ് ആവശ്യകതകളും കൂടാതെ തന്നെ വേഗത്തിലുള്ള നിർവ്വഹണത്തെ സഹായിക്കുന്നു, അതിനാൽ തന്നെ എല്ലാം മുൻകൂട്ടി കംപൈൽ ചെയ്യുന്നതിനുള്ള പൂർണ്ണ കാലതാമസമോ ഓരോ വരിയും ഇന്റപ്രെട്ട് ചെയ്യുന്നതിന്റെ മന്ദതയോ ഇതിന് ഇല്ല[3]. ഒരു പ്രോഗ്രാം പ്രവർത്തിക്കുമ്പോൾ കോഡ് ഭാഗികമായി കംപൈൽ ചെയ്യുന്ന പ്രക്രിയയാണ് ജെഐടി കംപൈലേഷൻ. ഇത് പതിവായി ഉപയോഗിക്കുന്ന കോഡ് തിരഞ്ഞെടുക്കുകയും എവിടെയായിരുന്നാലും അത് മെഷീൻ ഭാഷയിലേക്ക് കംപൈൽ ചെയ്യുകയും വേഗത്തിൽ പ്രവർത്തിപ്പിക്കുകയും ചെയ്യുന്നു, ഇത് പൂർണ്ണ പ്രീ-കംപൈലേഷൻ ആവശ്യമില്ലാതെ തന്നെ പ്രകടനം മെച്ചപ്പെടുത്തുന്നു. ഇത് പ്രോഗ്രാം പ്രവർത്തിക്കുമ്പോൾ തന്നെ കമ്പ്യൂട്ടർ കോഡ് മെഷീൻ ഭാഷയിലേക്ക് മാറ്റുന്നു, പ്രോഗ്രാം യഥാർത്ഥത്തിൽ എങ്ങനെ ഉപയോഗിക്കുന്നു എന്നതിനെ അടിസ്ഥാനമാക്കി വേഗത്തിൽ പ്രവർത്തിക്കാൻ ദ്രുത ക്രമീകരണങ്ങൾ നടത്താൻ ഇത് അനുവദിക്കുന്നു, ഇത് പലപ്പോഴും മാറുന്ന ഡൈനാമിക് ഭാഷകൾക്ക് മികച്ചതാക്കുന്നു. ഉപയോഗ സമയത്ത് എല്ലാം സുഗമമായും സുരക്ഷിതമായും പ്രവർത്തിക്കുന്നുവെന്ന് ഇത് ഉറപ്പാക്കുന്നു.
ചരിത്രം
[തിരുത്തുക]1960-ൽ ലിസ്പ് പ്രോഗ്രാമിംഗ് ഭാഷയ്ക്കായി ജോൺ മക്കാർത്തിയാണ് ആദ്യമായി അറിയപ്പെടുന്ന ജെഐടി കമ്പൈലർ വികസിപ്പിച്ചെടുത്തത്. റികർസീവ് ഫങ്ഷൻസ് ഓഫ് സിംമ്പോളിക് എക്സപ്രക്ഷൻസ് ആൻഡ് ദെയർ കംപ്യൂട്ടേഷൻ ബൈ മെഷീൻ പാർട്ട് I എന്ന ഈ ആദ്യകാല കൃതി ഭാവിയിലെ ജെഐടി കംപൈലേഷൻ ടെക്നിക്കുകൾക്ക് അടിത്തറയിട്ടു, മുൻകൂറായി പ്രവർത്തിക്കാതെ കോഡ് മെഷീൻ ഭാഷയിലേക്ക് പരിവർത്തനം ചെയ്തുകൊണ്ട് പ്രോഗ്രാമുകൾ കൂടുതൽ കാര്യക്ഷമമായി പ്രവർത്തിക്കാൻ അനുവദിച്ചു. ഈ സമീപനം പ്രോഗ്രാമിംഗ് ഭാഷകൾക്ക് മികച്ച പ്രകടനവും പൊരുത്തപ്പെടുത്തലും സാധ്യമാക്കി[4]. 1960-ൽ ജോൺ മക്കാർത്തിയുടെ ജെഐടി ലിപ്സുമായി ചേർന്ന് പ്രവർത്തിച്ചു, പഞ്ച് കാർഡുകളിൽ കംപൈലർ ഔട്ട്പുട്ട് ഭൗതികമായി സംഭരിക്കുന്നതിനുള്ള ബുദ്ധിമുട്ട് ഒഴിവാക്കാനും, ഫ്ലൈയിൽ നിന്ന് നേരിട്ട് എക്സിക്യൂട്ടബിൾ കോഡിലേക്ക് കംപൈൽ ചെയ്യുന്നതിലൂടെ പ്രക്രിയ കാര്യക്ഷമമാക്കാനും ലക്ഷ്യമിട്ടുള്ളതാണ് (ഒരു "കംപൈൽ ആൻഡ് ഗോ" സിസ്റ്റം)[5]. 1968-ൽ, കെൻ തോംസൺ ക്യുഇഡി ടെക്സ്റ്റ് എഡിറ്ററിൽ റെഗുലർ എക്സ്പ്രഷനുകൾ ഉപയോഗിച്ചു, ടെക്സ്റ്റ് പാറ്റേണുകൾ വേഗത്തിൽ കണ്ടെത്താനും എഡിറ്റുചെയ്യാനും ഉപയോക്താക്കളെ അനുവദിക്കുന്നതിനുള്ള ആദ്യകാല ടൂളുകളിൽ ഒന്നാണ്. ഡോക്യുമെൻ്റുകൾക്കുള്ളിൽ നിർദ്ദിഷ്ട പദങ്ങളോ ഫോർമാറ്റുകളോ തിരയാനും തൽക്ഷണം മാറ്റങ്ങൾ വരുത്താനും ഇത് മൂലം സാധ്യമായി, ആധുനിക ടെക്സ്റ്റ് തിരയലിനും എഡിറ്റിംഗ് ടൂളുകൾക്കും അടിത്തറയിട്ടു[6]. ഡൈനാമിക് കോഡ് എക്സിക്യൂഷൻ്റെയും ടെക്സ്റ്റ് പ്രോസസ്സിംഗിൻ്റെയും ആദ്യകാല രീതികൾ രൂപപ്പെടുത്താൻ രണ്ട് നവീകരണങ്ങളും സഹായിച്ചു. ഐബിഎം 7094 സിസ്റ്റത്തിൽ പ്രവർത്തിക്കുന്ന കോഡിലേക്ക് റെഗുലർ എക്സ്പ്രഷനുകൾ നേരിട്ട് കംപൈൽ ചെയ്തുകൊണ്ട് കെൻ തോംസൺ ക്യുഇഡി എഡിറ്ററിൽ പാറ്റേൺ മാച്ചിംഗിന്റെ വേഗത മെച്ചപ്പെടുത്തി. പിന്നീട്, 1970-ൽ, ജെയിംസ് ജി. മിച്ചൽ ഇന്റപ്രെട്ടേഷനിൽ നിന്ന് കംപൈൽ ചെയ്ത കോഡ് സൃഷ്ടിക്കുന്നതിനുള്ള ഒരു സാങ്കേതികത വികസിപ്പിച്ചെടുത്തു, അത് അദ്ദേഹം LC² എന്ന പരീക്ഷണ ഭാഷയിൽ നടപ്പിലാക്കി. ആവർത്തിച്ചുള്ള ഇന്റർപ്രെട്ടേഷന്റെ ആവശ്യകത കുറച്ചുകൊണ്ടും ഭാവിയിലെ കംപൈലർ ഡിസൈനുകളെയും ജസ്റ്റ്-ഇൻ-ടൈം (JIT) കംപൈലേഷൻ രീതികളെയും സ്വാധീനിച്ചുകൊണ്ട് കോഡ് കൂടുതൽ കാര്യക്ഷമമായി നടപ്പിലാക്കാൻ ഈ സാങ്കേതികത സിസ്റ്റത്തെ അനുവദിച്ചു[7][8].
1983-ൽ സ്മോൾടോക്ക് ഒരു ജെഐടി കംപൈലേഷൻ അപ്രോച്ച് അവതരിപ്പിച്ചു, അത് ആവശ്യാനുസരണം കോഡ് മെഷീൻ ഭാഷയിലേക്ക് വിവർത്തനം ചെയ്തു. ഭാവിയിലെ ഉപയോഗത്തിനായി സിസ്റ്റം ഈ കംപൈൽ ചെയ്ത കോഡ് സംരക്ഷിച്ചു. അതിനാൽ ഓരോ തവണയും അത് വീണ്ടും ചെയ്യേണ്ടതില്ല. മെമ്മറി കുറവാണെങ്കിൽ, അത് സേവ് ചെയ്ത കോഡ് നീക്കം ചെയ്യുകയും ആവശ്യമെങ്കിൽ പിന്നീട് അത് പുനഃസൃഷ്ടിക്കുകയും ചെയ്യും. ആവശ്യാനുസരണം കോഡ് കൈകാര്യം ചെയ്യുന്നതിനുള്ള ഈ മികച്ച മാർഗം സിസ്റ്റത്തിൻ്റെ മെമ്മറി ലഭ്യതയ്ക്ക് അനുസൃതമായി ജെഐടി കംപൈലറുകൾ ഇന്ന് കാണുന്ന പ്രവർത്തന രീതി രൂപപ്പെടുത്താൻ സഹായിച്ചു[9]. സൺ മൈക്രോസിസ്റ്റംസിൻ്റെ സെൽഫ് പ്രോഗ്രാമിംഗ് ഭാഷ ജെഐടി ടെക്നിക്കുകളിൽ കാര്യമായ പുരോഗതി വരുത്തി, സെൽഫ് പ്രോഗ്രാമിംഗ് എൺവയൺമെന്റ് അക്കാലത്തെ ഏറ്റവും വേഗതയേറിയ സ്മോൾടോക്ക് സിസ്റ്റമായി മാറി. പൂർണ്ണമായും ഒബ്ജക്റ്റ് ഓറിയൻ്റഡ് ഭാഷയിൽ ശ്രദ്ധേയമായ സിയുടെ പകുതി വേഗതയിൽ എത്താൻ ഇതിന് കഴിഞ്ഞു. അഡാപ്റ്റീവ് കംപൈലേഷൻ, അഡ്വാൻസ്ഡ് ഒബ്ജക്റ്റ് ഓറിയൻ്റഡ് ഡിസൈനുകൾ, ഉയർന്ന പ്രവർത്തനക്ഷമതയുള്ള, ഡൈനാമിക്-ടൈപ്പ്ഡ് പ്രോഗ്രാമിംഗ് ഭാഷകൾക്ക് വേദിയൊരുക്കുക തുടങ്ങിയ നൂതനമായ ഒപ്റ്റിമൈസേഷനുകളിലൂടെയാണ് ഈ കാര്യക്ഷമത കൈവരിക്കാനായത്[10].
അവലംബം
[തിരുത്തുക]- ↑ Languages, Compilers, and Runtime Systems, University of Michigan, Computer Science and Engineering, retrieved March 15, 2018
- ↑ Aycock 2003.
- ↑ "Does the JIT take advantage of my CPU?". David Notario's WebLog. Retrieved 2018-12-03.
- ↑ Aycock 2003, 2. JIT Compilation Techniques, 2.1 Genesis, p. 98.
- ↑ McCarthy, J. (April 1960). "Recursive functions of symbolic expressions and their computation by machine, Part I". Communications of the ACM. 3 (4): 184–195. CiteSeerX 10.1.1.111.8833. doi:10.1145/367177.367199. S2CID 1489409.
- ↑ Thompson 1968.
- ↑ Aycock 2003, 2. JIT Compilation Techniques, 2.2 LC², p. 98–99.
- ↑ Mitchell, J.G. (1970). "The design and construction of flexible and efficient interactive programming systems".
{{cite journal}}
: Cite journal requires|journal=
(help) - ↑ Deutsch, L.P.; Schiffman, A.M. (1984). "Efficient implementation of the smalltalk-80 system" (PDF). Proceedings of the 11th ACM SIGACT-SIGPLAN symposium on Principles of programming languages - POPL '84. pp. 297–302. doi:10.1145/800017.800542. ISBN 0-89791-125-3. S2CID 3045432. Archived from the original (PDF) on 2004-06-18.
- ↑ "97-pep.ps". research.sun.com. Archived from the original on 24 November 2006. Retrieved 15 January 2022.